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