at_yasu's blog

ロード的なことを

devfsとchroot

namedをchrootで動かしているのだが、どうもFreeBSD 8.0-R からはdevice管理が変わったようで、ここにメモ書き。


FreeBSD 8.0-R から、デバイス管理はdevfs(8)というやつに移動して、mount_dev はなくなりました(少なくとも手元の箱では)

このdevfs(8)は、ルールを書いてデバイスファイルを作って行くという品物で、linuxのudevとはまたざっと見た感じ*1違うようで。

devfsの設定ファイル

主にユーザレベルでは、「/etc/devfs.rules」に記述します。

devfs.rules は、rule_setという仕組みがあります。基本的な文法は他の設定と同じで、空白行と「#」以降の行は無視されます。

ルールセットの開始は、ブラケット([ ])内に名前を定義して、以下にルールを書いていきます。

以下ルールのコマンド。

  • add [spec]
    • デバイスを追加するコマンド
    • specs
      • path
        • マッチパターンに合うパスを記述
        • 例:add path null
      • type
        • ディスクタイプなど。ほとんどは、disk,mem,tape,tty のいずれからしい。
        • 例:add type disk*2
      • include [ ruleset ]
        • 他のルールセットを読み込む。
        • 注意:add を記述しているrulesetと混同して記入した場合、includeが優先になり、addで記述したデバイスが作成されないみたいです。混同する場合はルールセットごと、切り分けた方がいい。

以下、追加オプション。
例:add path snp* mode 660 group snoopers

      • user uid
        • ユーザパーミッションを設定
      • group gid
        • グループパーミッションを設定
      • mode
        • 権限の設定。0660などに注意
      • hide
        • 作成したデバイスファイルを隠した状態で生成
      • unhide
        • 作成したデバイスファイルを見える状態で生成

起動の仕組みとシステムの設定

起動時にdevfs(8)コマンドが処理を始める気配。

処理手順では、/etc/defaults/rc.conf をいじくっとらん限り、

  • /etc/defaults/devfs.rules
  • /etc/devfs.rules

の順番。


システムが使うデバイスファイルと、それ以外(chrootやjail)などで使うが、chrootやjailでの設定方法。rc.confには、下記のように記述するだけのようです。複数ある場合は、スペース区切りで。

devfs_set_rulesets='/var/named/chroot/dev=named_rulesets /var/named/chroot2/dev=named_rulesets'

と言う感じで記述するそうです。




jailの場合、/path/to/jail=devfsrules_jail をdevfs_set_rulesetsに追加するだけでよさげ。Jail用のsetは始めから記述されてます。