10.0-BETA1でezjailが息してない→qjailに乗り換えた。

Pocket

 

せっかく覚えたezjailが息してない

jailの設定ファイルが、rc.conf,/etc/rc.d/jailからjail.confに変わる。

https://twitter.com/m_bird/status/386369822751076352

そのせいか10.0-BETA1にしたら、ezjail使うたび怒られるようになった。
具体的にはezjail-adminでjailをうまく起動できない。
ezjail覚えたばっかなのに…。

「手動でなんとかしろよ」とエラーメッセージが出るのだが、jailの仕組みはとても複雑で、jail.confの書式も良くわからないしsampleもない。
「rc.d, rc.confをそのままコピー&ペーストしたらいいんだよ」とは言うのだけど、そもそもrc.d, rc.confを自分で書くのが嫌でezjail使ってたのに。

しょうがないんで、あんまり深く追いかけずに別のラッパーであるqjailを試した。

なかなか独特のテイストが感じられるのだが、思ったより手軽で、ドキュメントも(時にはウンザリするくらい)充実している。
もちろんjail.confにも安心対応。

数十個ものjailを作ることも出来たり、一度作成したjailをテンプレートにする機能もあったりして驚く。

ググった感触でいうとあんまり人気ないみたいだけど、結構いい。
細けえ事はどうでもいいからjailを使わせろという諸兄にはおすすめである。

qjailのインストール

2013/10/18時点で2.2と3.2がある。
jail.confに対応しているのは3.2。

話は前後するが、qjail3.2のman qjail(8)から抜粋すると;

This version of qjail has been converted from using the legacy rc.d
rc.conf method of jail definition as used in all pervious versions of
qjail, to using the jail(8) jail.conf method which became available in
9.1-RELEASE.

よって3.2をインストール。
なお、以下でqjailをインストールするFreeBSDは10.0-BETA1でございますので、pkgngを使います。

 

qjailでの初期設定

まずはjailのひな形、ベース環境を作る。
qjail installでよい。
ひな形取得先のftpサーバを変更するならオプションで指定する。
書式は以下。

 

RELEASE以外でのqjail install

しかし、ftpサーバからダウンロードできるのはRELEASEのみ。
BETA, RC, ALPHA, STABLE等々だとダメ。
回避方法は二つ。

①なんでもいいのでRELEASEで作っておいてアップグレードする
②ダウンロードしたディスクイメージを使う。

今回は②にした。
①はman qjail参照。
②をもう少し細かく書くと、ディスクイメージをマウントし、base.txzなどのある「ディレクトリ」をqjail install -fに続けて指定する。

「ディレクトリ」とわざわざ書いたのは、cdで行けるところ、というのを強調したかったから。
ディスクイメージの直接指定はできないし、ftpサーバのディレクトリ指定もダメ。
ガッカリ。

(追記)RELEASE以外でのqjail install

「RELEASE以外」というのは、実はRELEASE-p2といったような、パッチレベルが0以外の場合も該当する。
つまりfreebsd-updateでパッチを当てた状態でqjail installすると失敗する。
これは、qjailは自ホストのOSバージョンをもとにディレクトリを移動するから。
OSバージョンが10.1-RELEASE-p16だったら、ftpサーバの10.1-RELEASE-p16などを見に行ってしまう。
しかし、ftpサーバはパッチレベルごとにはディレクトリが作られないので、参照先がなく失敗する。

ところで、ここでのOSバージョンとは、具体的には環境変数UNAME_rである。
ということは、qjail installのときだけUNAME_rを変更すればパッチレベルが変わっていようがよいのである。
以下、10.1-RELEASE-p16で実行した例。

追記ここまで

ダウンロードしたディスクイメージからqjail install

仕方がないので淡々と進める。
10.0-BETA1のイメージダウンロードして、ローカルでマウント。

/mntにマウントしたとすると、/mnt/usr/freebsd-dist/が目的の場所。

qjail install -fで実行。
終わったらマウントも外そう。

 

qjailの構成

/usr/jailsにいくつかのディレクトリが生まれる。
また、設定ファイルが/usr/local/etc/に格納される。

/usr/jails下は以下の通り。

sharedfs:
OSの実行ファイル、ライブラリ。全Jailで共有される。

template:
OS configuration fileがある。設定変えようと思ったらここかな。

archive:
初期状態では空。
qjail archiveコマンドで作成されるアーカイブが格納される。

flavors:
flavorですな。defaultとssh-defaultの二つがある。

そのほか、/usr/local/etc/下に以下のようなファイル、ディレクトリがたくさん出来る。
jailを作ると今度はこのディレクトリの下にjail名でファイルができる。
global, local, vnetの意味が、想像はできるもののよく分からない。

 

jailの作成

書式。代表的なもののみ。

-fと-aは一緒に使えない。

実際に作ってみる。
あっさりと出来上がる。
あっさりしすぎて逆に不安なくらい。

気がつくと、/etc/jail.confが生まれている!

jail起動…の前に、qjail listで確認。

qjail list

作成済みのjailはqjail listで確認できる。

最初のカラムのSTAはStatusの略。

JIDはjail IDのこと。そのほかは見たまま。

qjail start

qjail startでjailを起動。
qjail listの表示も変わり、ネットワークインタフェースへのaliasも実行してくれている。

 

qjail consoleでjailの中へ

qjail consoleでコンソールにアクセスできる。

特に何もしていないけど、/etc/localtimeと/etc/resolv.confは作ってくれた。wall_cmos_clockはなかった。

 

qjail stopで止めて、archiveでアーカイブ、deleteで削除完了

単純にstopしてdeleteするのは面白くないから、deleteの前にarchiveしてみた。
/usr/jails/archiveの下に<jail名>@日付秒.tarというファイルが出来ている。
また、deleteしてもjail.confには記載が残っているようだ。

 

qjail restoreでarchive済みのjailを復活可能ッ!

ためしにrestoreしてみたら何事もなかったかのように復活して驚いた。
これはスナップショット的に使えますね。

 

qjail、便利だよね?

ご覧の通り、qjailはjailをマクロなレベルで扱うことに長けているようで、とても便利に感じる。
qjailにはほかにもqjail configというコマンドがあり、既存のjailの設定(たとえばIPアドレスとか)を変えたりできるし、jailのOSアップデートも手軽にできるようだ。
そのあたりはまた試すとして、しばらくjailはqjailでメンテしようと思った。

 

No tags for this post.

2 comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください