26
pbuilder, cowbuilder, lxcで作るお手軽サンド ボックス 第1回福岡Debian勉強会 (2012-07-28) やまだつよし

pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

Embed Size (px)

Citation preview

Page 1: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

pbuilder, cowbuilder, lxcで作るお手軽サンド

ボックス

第1回福岡Debian勉強会 (2012-07-28) やまだつよし

Page 2: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

自己紹介

やまだつよし● twitter: @minimum2scp● fb: fb.me/minimum2scp● インフラエンジニア● Debian,Rubyとかが好き

Page 3: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

もっと自己紹介: 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で作るお手軽サンドボックス

もっと自己紹介: 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で作るお手軽サンドボックス

もっと自己紹介: 最近

最近やったこと(Debianネタ)● 会社のプロジェクトでperlモジュールを中心に

パッケージたくさん作った● ファイルサーバに置いて、必要なときはdpkg -i

で入れる。面倒だし管理できない● repreproで会社で作ったパッケージのリポジトリ

を実験的にたててみた● できたような気がするけどこれから会社のメン

バーにどう伝えていこうかなというところ

Page 6: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

今日のお題

● サンドボックス● pbuilder● cowbuilder● lxc

ゆるーく話すので適当にその場でつっこみ入れてください

Page 7: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

サンドボックスがほしい

● experimentalのApache2.4を試してみたい● lsyncdおもしろそう● 最新のRubyをソースからビルドしてみたい● とりあえずインストールしてみたい● いろいろ試行錯誤してみたい

そして、なかったことにしたい

ということありますよね…?

Page 8: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

サンドボックスがほしい

「なかったことにしたい」ができるととても気が楽になる

XenやKVMで仮想化するのは大袈裟

そこでpbuilderとcowbuilder

クラウドは今回禁句です

Page 9: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

pbuilderとは

● debootstrapで作成される最小のDebian chroot環境でパッケージをビルドするための仕組み

● chroot環境は使い捨て● chrootの支援+クリーンルームでのビルド

Page 10: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

パッケージのビルド

% apt-get source foo# apt-get build-dep foo% cd foo-x.x% ...% debuild -rfakeroot -us -uc

Build-Depends: ビルド依存パッケージのインストールが必要

Page 11: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

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で作るお手軽サンドボックス

pbuilderとは

● Debian chroot環境をふだんはtarballに固めて保持

● ビルド時にtarballを展開してchrootし、その中にBuild-Dependsをインストール、そしてパッケージをビルドする

● ビルド完了するとバイナリパッケージを残してビルド環境はまるごと削除される

● FTBFSを検出できる● パッケージ開発者のためのツール?● いいえ、シェルが使えます!

Page 13: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

pbulder --login

base.tgzを展開、chrootした中でシェルを起動

シェルを抜けるとchroot環境は破棄される# pbuilder --login

シェルを抜けたあとbase.tgzに書き戻すこともできる# pbuilder --login --save-after-login

base.tgzのアップデート# pbuilder --update

Page 14: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

pbuilder: デモ

Page 15: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

pbsetup.sh

pbuilder --login後に、いつもの使いなれた道具をそろえる● 一般ユーザー作成● ロケール生成● zsh, vim● etckeeper, git● その他いろいろ

をセットアップするシェルスクリプトを生成するシェルスクリプト

Page 16: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

pbsetup.sh デモ

Page 17: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

pbuilderからcowbuilderへ

これだけでも十分便利だけれど、tarballの展開や、tarballの書き戻しをCOW(Copy On Write)で置き換えて高速化するcowbuilderというものもある

むしろ普段はcowbuilderを常用している

Page 18: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

cowbuilder

baseを作成:

# cowbuilder --create [options]

ビルド:# cowbuilder --build [options] foo_X.X-X.dsc

あるいは# pdebuild --pbuilder cowbuilder -- -rfakeroot -uc -us

Page 19: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

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で作るお手軽サンドボックス

cowbuilder

もちろんビルドだけじゃなくシェルも使える:# cowbuilder --login [options]

破棄せずにbaseを書き戻す:# cowbuilder --login --save-after-login [options]

baseを更新する# cowbuilder --update

Page 21: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

cowbuilder デモ

Page 22: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

pbuilder, cowbuilder -> lxc

● pbuilder: tarballなので使わないときのサイズは小さい

● cowbuilder: 起動が早いのでpbuilderよりもっと気楽に使える

● どちらも結局chroot。それ以上のことはできない(カーネル、ネットワーク、リソース制御...)

そこでlxc

Page 23: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

lxc

● Linuxコンテナ● 仮想化方式のひとつ● chroot + α● ネットワークやプロセスが分離できる● カーネルは共有

Page 24: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

lxcで実験できるようにする

cowbuilder で使っている base を

コピーしてきてlxcのrootfsにする

● /etc 以下はごにょごにょと変更する● /dev 以下をちょっとmknodする

あとはlxcのconfigを書く

Page 25: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

lxcsetup.sh デモ

Page 26: pbuilder, cowbuilder, lxcで作るお手軽サンドボックス

まとめ

● pbuilderはパッケージをクリーンルームでビルドしてFTBFSを検出するツール

● シェルを起動してやると気軽に実験できるサンドボックスのようにも使える

● cowbuilderを使ってもっと気軽に実験● cowbuilderのbasepathからlxcのrootfsを作って

lxcで実験するなんてことも