FreeBSDの仮想化環境「ezjail」でのportsツリーのマウント共有利用

 ezjailにより作成された仮想環境でportsツリーを導入する際、個々のjai仮想領域lごとにportsツリーを構成するとHDD容量を圧迫することになる。また、そうした場合にjail環境のportsツリーを更新する手間が増えるデメリットが発生する。 そこでmount_null(8)を使用してjail環境にhost環境のportsツリーをマウントし共有することで、jail環境からもportsツリーを利用できるようにする。

 -FreeBSDのサーバ仮想化技術「ezjail」で構築したjail環境の設定- からのつずきとなる。


インストール環境:
 FreeBSD6 + ezjail-2.0.1

ロリポップならMovableType設置マニュアルも充実。
あなたも月々263円でブログデビューしてみよう!!

ブログをはじめる

jail環境でのportsツリーの導入

 mount_null(8)のオプションにro(リードオンリー)を指定することにより、jail環境へ読み込み専用でマウントすることが可能になる。これによってjail環境からhost環境の/usr/portsを変更できないようにすることが可能である。

マウントポイントの設定

 host環境の/etc/fstabにjail環境のportsツリーのマウントポイントを指定する。

  • jailから書き込みが出来ないようにオプションにroを追加
  • 通常の運用時はportsツリーをマウントしないようにnoautoオプションを指定
  • portsの種類によっては/usr/srcのファイルを必要とするものがある

 また、jail環境のportsとsrcディレクトリは下記のようにリンクになっている

lrwxrwxrwx 1 root wheel 19 1 2 00:52 ports -> /basejail/usr/ports
lrwxrwxrwx 1 root wheel 17 1 2 00:52 src -> /basejail/usr/src

 したがって、/etc/fstab (host)に以下を追記

/usr/ports  /usr/jails/JAILNAME/basejail/usr/ports  nullfs ro,noauto    0   0
/usr/src /usr/jails/JAILNAME/basejail/usr/src nullfs ro,noauto 0 0
JAILNAME : 今回作成したjail名

jail環境のports環境整備

 portsでインストールする際は作業ディレクトリ(WRKDIR)とソース保存ディレクトリ(DISTDIR)への書き込み権限が必要になる為、/usr/portsを読み込み専用でマウントした場合、jail環境の/etc/make.confに以下の指定が必要である。(無い場合make時にエラーとなる)

WRKDIRPREFIX= /var/ports
DISTDIR= /var/ports/distfiles
PACKAGES= /var/ports/packages

 現在上記の記述はデ゙フオルトで入っているので、このままでよければこのデイレクトリを作成してやればよい。

jail# mkdir /var/ports
jail# mkdir /var/ports/distfiles
jail# mkdir /var/ports/packages


portsツリーのマウント

 設定が完了したら実際にjail環境にportsツリーをマウントする。

host# mount /usr/jails/JAILNAME/basejail/usr/ports
host# mount /usr/jails/JAILNAME/basejail/usr/src

 これでjail環境でportsツリーを使ってhost環境と同様にソフトをインストールしたりアップデートすることができる。


運用時によく使うコマンド

- jail環境のリストを表示 -

host# jls

- host環境からjail環境へ入る -

host# jexec 1 /bin/tcsh

1 : jail_JAILNAME.id
/bin/tcsh :シェルがshでいい人は/bin/sh

- 起動と停止 -

host# /usr/local/etc/rc.d/ezjail.sh xxx yyy

xxx: start,stop,restart
yyy: JAILNAME

注意:yyyを指定しないとすべてのjail環境が対象となる(複数のjail環境がある場合は要注意)


参考: