pbuilder, cowbuilder, lxcで作るお手軽サンドボックス
TRANSCRIPT
pbuilder, cowbuilder, lxcで作るお手軽サンド
ボックス
第1回福岡Debian勉強会 (2012-07-28) やまだつよし
自己紹介
やまだつよし● twitter: @minimum2scp● fb: fb.me/minimum2scp● インフラエンジニア● Debian,Rubyとかが好き
もっと自己紹介: OS
● Debianユーザー歴: 10年くらい(woodyから)● 自宅デスクトップPC: Windows7● 自宅ノートPC: Debian unstable● 自宅サーバ: Debian unstable● さくらVPS: Debian unstable● 会社デスクトップPC: Debian unstableときどき
Windows● 会社サーバ: Debian stable, old stable, old old
stable, ... ときどき Gentoo, FreeBSD, Ubuntu, CentOS
もっと自己紹介: Debian歴
● 2002ごろ: はじめてのDebian (woody)● 2003-2004: stableからtesting, そして unstable
使いへ● 2005-: 社会人。会社のサーバにDebian (sarge)
をたくさん入れはじめる● 2007-: Debian(etch)+Xenでサーバー仮想化。
もっともっとたくさんのDebianをインストールするようになる
● 2012: 第0回福岡Debian勉強会、大統一Debian勉強会、そして今日!
もっと自己紹介: 最近
最近やったこと(Debianネタ)● 会社のプロジェクトでperlモジュールを中心に
パッケージたくさん作った● ファイルサーバに置いて、必要なときはdpkg -i
で入れる。面倒だし管理できない● repreproで会社で作ったパッケージのリポジトリ
を実験的にたててみた● できたような気がするけどこれから会社のメン
バーにどう伝えていこうかなというところ
今日のお題
● サンドボックス● pbuilder● cowbuilder● lxc
ゆるーく話すので適当にその場でつっこみ入れてください
サンドボックスがほしい
● experimentalのApache2.4を試してみたい● lsyncdおもしろそう● 最新のRubyをソースからビルドしてみたい● とりあえずインストールしてみたい● いろいろ試行錯誤してみたい
そして、なかったことにしたい
ということありますよね…?
サンドボックスがほしい
「なかったことにしたい」ができるととても気が楽になる
XenやKVMで仮想化するのは大袈裟
そこでpbuilderとcowbuilder
クラウドは今回禁句です
pbuilderとは
● debootstrapで作成される最小のDebian chroot環境でパッケージをビルドするための仕組み
● chroot環境は使い捨て● chrootの支援+クリーンルームでのビルド
パッケージのビルド
% apt-get source foo# apt-get build-dep foo% cd foo-x.x% ...% debuild -rfakeroot -us -uc
Build-Depends: ビルド依存パッケージのインストールが必要
pbuilderとは
base.tgz (chrootを固めたtarball) を作成:# pbuilder --create [options]
base.tgz を展開して chroot してビルド:# pbuilder --build [options] foo_X.X-X.dsc
あるいは# pdebuild [options] -- -rfakeroot -uc -us
pbuilderとは
● Debian chroot環境をふだんはtarballに固めて保持
● ビルド時にtarballを展開してchrootし、その中にBuild-Dependsをインストール、そしてパッケージをビルドする
● ビルド完了するとバイナリパッケージを残してビルド環境はまるごと削除される
● FTBFSを検出できる● パッケージ開発者のためのツール?● いいえ、シェルが使えます!
pbulder --login
base.tgzを展開、chrootした中でシェルを起動
シェルを抜けるとchroot環境は破棄される# pbuilder --login
シェルを抜けたあとbase.tgzに書き戻すこともできる# pbuilder --login --save-after-login
base.tgzのアップデート# pbuilder --update
pbuilder: デモ
pbsetup.sh
pbuilder --login後に、いつもの使いなれた道具をそろえる● 一般ユーザー作成● ロケール生成● zsh, vim● etckeeper, git● その他いろいろ
をセットアップするシェルスクリプトを生成するシェルスクリプト
pbsetup.sh デモ
pbuilderからcowbuilderへ
これだけでも十分便利だけれど、tarballの展開や、tarballの書き戻しをCOW(Copy On Write)で置き換えて高速化するcowbuilderというものもある
むしろ普段はcowbuilderを常用している
cowbuilder
baseを作成:
# cowbuilder --create [options]
ビルド:# cowbuilder --build [options] foo_X.X-X.dsc
あるいは# pdebuild --pbuilder cowbuilder -- -rfakeroot -uc -us
cowbuilder
しくみ:● 初回はdebootstrapでbaseを作成● ビルドするときはbaseをbase.NNNNNにcp -al
(ハードリンク)● base.NNNNNにchroot● LD_PRELOADにlibcowdancer.soが指定され
たプロセスがビルドする● libcowdancer.soがファイルのWriteを検知して
新しいファイルにすりかえる● ビルドがおわったらbase.NNNNNを破棄
cowbuilder
もちろんビルドだけじゃなくシェルも使える:# cowbuilder --login [options]
破棄せずにbaseを書き戻す:# cowbuilder --login --save-after-login [options]
baseを更新する# cowbuilder --update
cowbuilder デモ
pbuilder, cowbuilder -> lxc
● pbuilder: tarballなので使わないときのサイズは小さい
● cowbuilder: 起動が早いのでpbuilderよりもっと気楽に使える
● どちらも結局chroot。それ以上のことはできない(カーネル、ネットワーク、リソース制御...)
そこでlxc
lxc
● Linuxコンテナ● 仮想化方式のひとつ● chroot + α● ネットワークやプロセスが分離できる● カーネルは共有
lxcで実験できるようにする
cowbuilder で使っている base を
コピーしてきてlxcのrootfsにする
● /etc 以下はごにょごにょと変更する● /dev 以下をちょっとmknodする
あとはlxcのconfigを書く
lxcsetup.sh デモ
まとめ
● pbuilderはパッケージをクリーンルームでビルドしてFTBFSを検出するツール
● シェルを起動してやると気軽に実験できるサンドボックスのようにも使える
● cowbuilderを使ってもっと気軽に実験● cowbuilderのbasepathからlxcのrootfsを作って
lxcで実験するなんてことも