[FreeBSD] ezjailを試そう の続き

以下、「ホスト」とはjailを動かすおおもとのマシンを表す。親。
「Jailホスト」はjail環境で動くホストを表す。子。

ezjailにはflavoursという仕組みがある。

ezjailのflavoursとは。

以下より意訳。
http://erdgeist.org/arts/software/ezjail/#Flavours

新しいJailは、真っ新(まっさら)のFreeBSDとして作られる。ezjailは、Jailホストの面倒な設定作業を簡素化する仕組みがある。これがflavoursである。
flavoursでは、予め設定された内容に従って、ファイルをコピーしたり、パッケージをインストールしたり、スクリプトを実行できる。
たとえば、rc.conf, make.conf, periodic.confやsudoersなどである。

“flavour"ではない基本の味付け

flavourとは言ってみれば「風味」のこと。
新しいjailを作る時の「風味づけ」に使われるものだから、逆に言うと基本の味付けには不適切である。
具体的に言うと、新しいjailを作る際に必ず設定したいものは、flavoursではなく、基本設定に含めるべき、ということになる。

では基本設定はどこでするのか、というと、まずezjailの仕組みを確認してから。

ezjailの仕組み

/usr/jails/basejailというディレクトリがある。
これはFreeBSD環境のコピーで、ホスト上で作られたJailが使う。
共有して使うので、読み取り専用でマウントしている。

これとは別に/usr/jails/newjailというディレクトリがある。
こちらは、新しいjailを作るときのテンプレートである。

ということは、セキュリティパッチの適用やOSアップグレードはbasejailに対して行い、新しいjailホストを作る時の基本設定はnewjailに対して行えばよい。

基本の味付けに必要なものは?

パターンは二つある。
何らかのファイルを追加する場合と、ファイルを書き換える場合。

追加するファイルには、/etc/resolv.conf、/etc/localtime、/etc/wall_cmos_clockは必須。
ただし、ホストの時刻がUTCなら/etc/wall_cmos_clock不要。

resolv.confは名前解決(リゾルバ)のためのファイル、localtime, wall_cmos_clockはタイムゾーン関連ファイル。

そのほか、/etc/hosts, /etc/nsswitch.confも必要であれば。

ファイル書き換えの場合には、例えばportsnap.confを国内のportsnapサーバに向けておきたいとか、rootの.cshrcに手を入れておきたいとか、そういったもの。
ユーザの追加や、pkgの追加はbasejailにはできない(と思う)。
こういうのはflavoursで。

基本味付け

前章で挙げたファイルは、端からnewjailに放り込んでいけばよい。
ID, group, パーミッションを保持するために-pオプションはつけましょう。

$ sudo cp -p /etc/resolv.conf /etc/localtime /etc/wall_cmos_clock /usr/jails/newjail/etc/
$

書き換え系は、newjail/etcの下のファイルをご自由に
例えば、/usr/jails/newjail/etc/portsnap.confのSERVERNAMEを以下のように。

SERVERNAME=portsnap.allbsd.org

試してみよう

example01というjailを作ってみる。

$ sudo ezjail-admin create example01 'em0|192.168.200.1'

$ sudo ezjail-admin start example01
Configuring jails:.
Starting jails: example01.
$
$ sudo ezjail-admin console example01

コンソールログインして試してみると、日付もJSTになっているし、resolv.confも正しく設定されている。

root@example01:~ # date
Tue Oct 1 12:52:38 JST 2013

root@example01:~ # cat /etc/resolv.conf
# Generated by resolvconf
search localdomain
nameserver 192.168.154.2

root@example01:/ # grep SERVER /etc/portsnap.conf
SERVERNAME=portsnap.allbsd.org
root@example01:/ #

flavoursの使い方はまた今度。

ezjailのflavoursを使ってみよう その1

ezjailのflavoursを使ってみよう その2