差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
memo:freebsd_jail [2016-06-10 19:15] Decomo |
memo:freebsd_jail [2018-11-14 13:59] Decomo 削除 |
||
---|---|---|---|
行 4: | 行 4: | ||
? jail [監獄] | ? jail [監獄] | ||
- | : FreeBSDのjail機能そのものを指したり、同機能を用いて構築された(仮想)システム[=prisoner]を指したりする。要はサンドボックス。 | + | : FreeBSDのjail機能そのものを指したり、同機能を用いて構築された(仮想)システム[=hosted/prisoner]を指したりする。要はサンドボックス。 |
- | ? jailer [看守] | + | ? hosted |
- | : (仮想)システム[=prisoner/ | + | : jailシステムで隔離されたシステム、プロセス、サービスを表す。 |
+ | ? host | ||
+ | : jailシステムが動いているシステム、プロセス、サービスを表す。名前の通りの意味。 | ||
? prisoner [囚人] | ? prisoner [囚人] | ||
- | : jail機能で構築され動いている(仮想)システム。要は仮想マシン・・・と言いたい所だが、一般的な意味である所の" | + | : hostedに同じ |
+ | ? jailer [看守] | ||
+ | : hostに同じ | ||
+ | |||
+ | ===== 試した環境 ===== | ||
+ | |||
+ | * FreeBSD 10.1-RELEASE | ||
+ | * FreeBSD 11.1-RELEASE | ||
===== 種jailの準備 ===== | ===== 種jailの準備 ===== | ||
行 22: | 行 31: | ||
==== jailのインストール ==== | ==== jailのインストール ==== | ||
- | jail環境は'' | + | ZFSでjail用のFSを作り''/ |
< | < | ||
- | # cd /usr/home | + | # zfs create zdata/ROOT/jail -o mountpoint=/ |
- | # mkdir jail | + | # cd /jails |
</ | </ | ||
+ | |||
+ | jailディレクトリに展開されたシステムファイル群でしかないので、他のjailの種となるjailを1個用意しておけば、ただのディレクトリコピーで簡単にjailを増やすことができるのだ。ZFSのsnapshotなどと組み合わせれば、言わずもがな超高速かつ無駄を省いたjail環境を作ることも可能となる。 | ||
+ | |||
+ | というわけで、種jailを作る。 | ||
'' | '' | ||
< | < | ||
- | # bsdinstall jail jail/ | + | # bsdinstall jail _seed |
</ | </ | ||
{{ : | {{ : | ||
- | これまたお馴染みのFreeBSD Installerの画面が出てくる。lib32, portsだけ入れとけば問題ないと思う。packagesしか使わねーぜ!!ってんならportsすら不要。その他設定は以下のとおりだが、種jailなのでなるべくクリーンな状態の方針で。 | + | これまたお馴染みのFreeBSD Installerの画面が出てくる。lib32だけ入れとけば問題ないと思う。portsはnullfsでjailerのツリーを共用すれば容量の節約になる。packagesしか使わねーぜ!!ってんならportsすら不要。その他設定は以下のとおりだが、種jailなのでなるべくクリーンな状態の方針で。 |
* rootのパスワード | * rootのパスワード | ||
行 55: | 行 69: | ||
exec.clean; | exec.clean; | ||
mount.devfs; | mount.devfs; | ||
- | path = "/home/ | + | path = "/ |
host.hostname = $name; | host.hostname = $name; | ||
- | jseed20160101 | + | _seed { |
| | ||
| | ||
行 67: | 行 81: | ||
jail環境を起動。 | jail環境を起動。 | ||
< | < | ||
- | # service jail start jseed20160101 | + | # service jail start _seed |
- | Starting jails: | + | Starting jails: |
</ | </ | ||
行 83: | 行 97: | ||
$ uname -a | $ uname -a | ||
FreeBSD jail.example.com 10.1-RELEASE-p10 FreeBSD 10.1-RELEASE-p10 #0: Wed May 13 06:54:13 UTC 2015 | FreeBSD jail.example.com 10.1-RELEASE-p10 FreeBSD 10.1-RELEASE-p10 #0: Wed May 13 06:54:13 UTC 2015 | ||
- | # jexec jseed20160101 | + | # jexec _seed /bin/sh |
# uname -a | # uname -a | ||
- | FreeBSD | + | FreeBSD |
</ | </ | ||
行 100: | 行 114: | ||
4 packets transmitted, | 4 packets transmitted, | ||
round-trip min/ | round-trip min/ | ||
+ | </ | ||
+ | |||
+ | jailから抜けてjailを止める | ||
+ | < | ||
+ | # exit | ||
+ | # service jail stop _seed | ||
+ | Stopping jails: _seed. | ||
+ | </ | ||
+ | |||
+ | ==== portsツリーの共有設定 ==== | ||
+ | |||
+ | 各jailでportsツリーを持つのは無駄なので、jail外に共有portsツリーを作りnullfsでマウントするようにする。 | ||
+ | |||
+ | 共有リソース用のFSを作る | ||
+ | < | ||
+ | # zfs create -o compression=gzip-5 zdata/ | ||
+ | </ | ||
+ | |||
+ | 共有portsツリーを展開 | ||
+ | < | ||
+ | $ cd / | ||
+ | # mkdir ports | ||
+ | # portsnap -p ports fetch | ||
+ | # portsnap -p ports extract | ||
+ | # portsnap -p ports update | ||
+ | </ | ||
+ | |||
+ | jail起動時に共有portsツリーのマウント、終了時にアンマウントするようにjail.confを修正。 | ||
+ | |||
+ | < | ||
+ | exec.prestart += "mount -t nullfs -o ro / | ||
+ | exec.prestart += "mount -t nullfs -o rw / | ||
+ | exec.start = "/ | ||
+ | exec.stop | ||
+ | exec.poststop += " | ||
+ | exec.poststop += " | ||
+ | |||
+ | exec.clean; | ||
+ | mount.devfs; | ||
+ | path = "/ | ||
+ | host.hostname = $name; | ||
+ | |||
+ | _seed { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | portsの作業ディレクトリの設定 | ||
+ | < | ||
+ | # mkdir / | ||
+ | # mkdir -p / | ||
+ | # mkdir -p / | ||
+ | </ | ||
+ | |||
+ | make.confに作業ディレクトリの指定を追加。ついでに、Xなどの使わないであろう機能のビルドオプションをデフォルトオフにしておく。 | ||
+ | / | ||
+ | < | ||
+ | WRKDIRPREFIX = /var/ports/ | ||
+ | DISTDIR = / | ||
+ | PACKAGES = / | ||
+ | |||
+ | OPTIONS_UNSET=CUPS DEBUG DOCS FONTCONFIG NLS X11 | ||
+ | WITHOUT_MODULES=sound ntfs linux | ||
+ | WITHOUT_X11=yes | ||
</ | </ | ||
==== 種jailの設定 ==== | ==== 種jailの設定 ==== | ||
+ | |||
+ | 再び種jailの中に入り、諸々設定する。 | ||
'' | '' | ||
行 115: | 行 197: | ||
</ | </ | ||
- | どのprisonerでもpkgは使うことになると思うので、種に仕込んでおく。他に同様のパッケージがあれば、この段階でインストールしておいても良いだろう(bashとかemacsとか…) | + | どのprisonerでもportmaster/pkgは使うことになると思うので、種に仕込んでおく。 |
< | < | ||
# pkg | # pkg | ||
行 122: | 行 204: | ||
Bootstrapping pkg from pkg+http:// | Bootstrapping pkg from pkg+http:// | ||
(略) | (略) | ||
+ | # pkg install portmaster | ||
</ | </ | ||
- | prisoner間でUID, GIDが被らないように設定。 | + | 他に同様のパッケージがあれば、この段階でインストールしておくと便利。参考までに自分が仕込んだのは以下の通り:autoconf automake bash emacs-nox gmake m4 perl texinfo |
+ | |||
+ | 一応、hostとjailでUID, GIDが被らないように設定。といっても、システムが自動で作るユーザー/ | ||
<file conf / | <file conf / | ||
- | minuid | + | minuid |
- | maxuid 65500 | + | mingid |
- | mingid | + | |
- | maxgid 65500 | + | |
</ | </ | ||
+ | ===== 種jailから本番jailを生やす ===== | ||
+ | |||
+ | ZFSのスナップショット&クローンを活用すれば、一瞬で種jailから本番jail環境を複製する事ができる。 | ||
+ | |||
+ | まずはスナップショットを作る。 | ||
+ | < | ||
+ | # zfs snapshot zdata/ | ||
+ | </ | ||
+ | |||
+ | スナップショットは読み込み専用なので、cloneしてFSを作る。 | ||
+ | < | ||
+ | # zfs clone zdata/ | ||
+ | </ | ||
+ | |||
+ | こんな感じで本番jail環境が出来上がる。 | ||
+ | < | ||
+ | $ zfs list | ||
+ | zfs list | ||
+ | NAME | ||
+ | zdata | ||
+ | zdata/ | ||
+ | zdata/ | ||
+ | zdata/ | ||
+ | zdata/ | ||
+ | zdata/ | ||
+ | zdata/ | ||
+ | </ | ||
+ | |||
+ | あとは/ | ||
- | $ service jail status | ||
- | | ||
- | | ||
- | $ jls | ||
- | | ||
- | | ||
- | |||
- | http:// |