2013/06/24(月)jail を make world

  • 標準以外の場所に置いたソースから
  • 標準以外の場所でビルドして
  • jail を mergemaster する
標準以外の場所でビルドする場合は、単に MAKEOBJDIRPREFIX を付ける。
ただし、これは make 変数ではなく環境変数なので make.conf や src.conf で指定してはいけない。微妙に変な事になるみたい。

普通に。
cd /data/src/stable/src
sudo env MAKEOBJDIRPREFIX=/data/src/stable/obj make -j 8 buildworld
sudo env MAKEOBJDIRPREFIX=/data/src/stable/obj make -j 8 kernel
sudo env MAKEOBJDIRPREFIX=/data/src/stable/obj make installworld
jail を。DESTDIRはmake変数。
sudo env MAKEOBJDIRPREFIX=/data/src/stable/src make installworld DESTDIR=/data/jail/jail0
sudo mergemaster -UPiF -D /data/jail/jail0 -t /data/jail/jail0/var/tmp/temproot -m /data/src/stable/src

2012/11/21(水)CGI実行のためのアカウント設定

言わずもがなだけど、Userdir で CGI を実行する時に
  • Suexec を使うならプライマリグループは無難なものにする
    • wheel とか operator とかにしない
      • ていうか、sudo が一般的な今、operator に所属するのは割と危険
  • Suexec を使わないなら www に所属しておく、実行ファイルは chmod g+x しておく
Suexec の実行可能なディレクトリはビルトインで指定されているので、public_html 以外のディレクトリを使うならそのようにコンパイルする。

2012/11/20(火)日常環境を jailed にした

日ごろ使う環境を jail 上に構築しなおした。
  • 3年に一度くらい、何かの拍子にシステム構築しなおす機会に出くわすんだけど、めんどくさい
    • jail にしておけば、バックアップから何も考えずに書き戻せば使える
  • /etc をバックアップしたいなぁ
    • ファイルベースでの丸ごとバックアップだとリンクやら flag やらの情報が抜けかねないし、ファイル指定でのバックアップで抜けが出ても嫌だ。
    • /etc を zfs パーティションにしたら簡単なんじゃないか?
    • 生環境だと、/etc が起動パーティションにないと rc.conf とか fstab が読めないのでいちいちシングルユーザーに落ちる
    • jail ならできる
インストールディスクとは別に、でかいディスク2本を zfs でミラーリングしてるので、個人使用ならこれで冗長性は十分。ここに日常環境を入れておく。
  • この jail 専用の zfs パーティションを用意して、子パーティションに全部入れる
    • /etc,/usr/local/etc を別パーティションにする
    • zfs jail でこのパーティションを jail にくれてやる
    • バックアップの必要が無い、ports や src は別のパーティションに入れてもいい
新しくシステムを作るときには、option VIMAGE でカーネルを作り直したらもう完了。
VIMAGE が experimental じゃなくなったら手間なしで完了。


そして、jail.conf(5) や、zfs jail するタイミングをどうすればいいんだ、というねたに続く。

2012/11/20(火)dns/bind99

dns/bind99 を使ってみる。
きっかけは、samba4 を試験環境に入れてみた際に、DLZ が有効で kerberos 関連のライブラリとリンクした bind が必要だったので。

REPLACE_BASE="YES" で入れれば楽なんだけど、mergemaster でグダグダ言われそうなので /usr/local に入ってもらう。
src.conf で WITHOUT_BIND="YES" を設定してから world を入れて、mergemaster まで済ませてからのほうが混乱も少ないと思う。nslookup とか、リゾルバ関連のプログラムやライブラリも bind が提供してるので、2つ入ってると色々面倒が起きそう。

/usr/local/etc/rc.d 以下には起動スクリプトがない。
/etc/rc.d/named から起動しようとすると色々と文句を言われる。

rc.conf に下記を追加。
named_program="/usr/local/sbin/named"
rc スクリプトはこのパラメータから /usr/local を切り出して、このパスを基準に後の事は調整してくれるようだ。


いつからかはわからないけど、jail 環境でも chroot できるようになってた。security.jail.mount_devfs_allowed とかがその調整のために出て来たのかな。
prefix がバイナリに埋め込まれてるようなので、$chrootdir/usr/local 以下におく必要があるファイルがあるけど、mtree ではそこまで考慮してくれてないっぽい。

2012/11/19(月)FreeBSD 9.1 に jail.conf(5) が現れた

jail.conf(5) が追加された。
jail の起動は、rc.d/jail を使うかコマンドラインオプションを指定するかだったけれど、jail.conf に設定をまとめることで、コマンドラインでは jail name だけ指定すれば保存されたオプションで jail が起動してくれる。

vnet jail の設定も保存しておけるので操作がかなり簡単になったし、rc.conf に記述するよりもスマートだ。

でも、exec.prestart と exec.start の間に任意の操作を行うインタフェースはないようだ。
zfs jail $jailname $zfs をしたければ、
  • jail -c $jailname persist
  • zfs jail $jailname $zfs
  • jexec $jailname sh /etc/rc
とするしかない。

zfs jail が $jid じゃなくて $jailname を理解してくれるとうれしい。

追記: 9.2では zfs jail が $jailname を理解するようになった。