VIVER CORE Server 0.0.5
VIVER CORE Serverのバージョン0.0.5をリリースします。
ルートファイルシステムにNFS+unionfsを使えるようになりました。実験的にaufsと9p2000.u(Plan9 Resource Sharing Protocol)もサポートしています。
また、TFTPサーバーで、クライアント要求されたファイル名を変換する機能に対応しました。クライアントのIPアドレスやMACアドレスによって、ルートファイルシステムやpostbootパッチを変更することができます。
VIVER CORE Server 0.0.5
viver-core-server.0.0.5.i386.tar.gz
viver-core-server.0.0.5.src.tar.gz
viver-core-root.0.0.5.i386.tar.gz
- 新しいプロトコルを追加
- TFTPのファイル名変換に対応
NFS+unionfs, NFS+aufs
NFSを読み込み専用としてマウントし、その上にtmpfsをかぶせてルートファイルシステムとして使います。いわゆるCopy-on-Writeで、書き込みはtmpfsに行われます。
rooturl=nfs+unionfs://192.168.0.1/path/to/root
rooturl=nfs+aufs://192.168.0.1/path/to/root
nfs+unionfsには、unionfsのパッチが当たったカーネルが必要です。
nfs+aufsには、aufsのlhashパッチが当たったカーネルと、aufsのカーネルモジュールが必要です。
ブート後にネットワークがダウンするとクライアントがハングアップしてしまうので、注意が必要です。起動するディストリビューション側でも、起動時にネットワークが再起動されないようにしておく必要があります。
…ちなみに、nfs+aufsはまだ1回もテストが成功していないので、動くかどうか分かりません ^_^;)
(特に/sbin/mount.aufsがシェルスクリプトで書いてあり、これがbusyboxのashで動くかどうか不明)
※2007/10/16追記:nfs+aufsもうまく動きました。
9p, 9p+unionfs, 9p+aufs, 9p+cp
rooturl=9p://host:port/pathは、v9fsを書き込み可能でマウントして、ルートファイルシステムとして使います。
unionfs、aufs、cpは、それぞれNFSと同じです。
Linuxで動く9p2000.uサーバーの実装にはどうやら3種類あるのですが(おそらくどれもv9fsプロジェクトのもの)、どうもうまく動きません。ファイルに書き込んだだけで固まってしまっり、mknodすると固まってしまったり。カーネル(サーバー)側の問題なのかサーバー側の問題なのかは良く分かりませんが。うーむ。
※追加:
JStyx(Java)
rstyx(Ruby)
libixp(Cでライブラリのみ)
9pは直接ルートファイルシステムとして使えるのに、NFSは使えないのは、NFSを(安全に)書き込み可能でマウントするにはlockdが必要だからです。lockdをinitramfsに入れれば良いのですが、それは難しい仕事になりそうです。
※どうやらlockdではなくて、portmapかもしれません。調査中…
TFTPのファイル名変換
VIVER CORE Serverでは、PXEのNBP(Network Bootstrap Program、ブートローダ的なもの)としてpxelinuxを使っています。pxelinuxは、TFTPサーバーから設定ファイル取得するのですが、このときにIPアドレスとMACアドレスを使って別の設定ファイルを使ってくれます。
As an example, if the boot file name is /mybootdir/pxelinux.0, the UUID is b8945908-d6a6-41a9-611d-74a6ab80b83d, the Ethernet MAC address is 88:99:AA:BB:CC:DD and the IP address 192.0.2.91, it will try: /mybootdir/pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d /mybootdir/pxelinux.cfg/01-88-99-aa-bb-cc-dd /mybootdir/pxelinux.cfg/C000025B /mybootdir/pxelinux.cfg/C000025 /mybootdir/pxelinux.cfg/C00002 /mybootdir/pxelinux.cfg/C0000 /mybootdir/pxelinux.cfg/C000 /mybootdir/pxelinux.cfg/C00 /mybootdir/pxelinux.cfg/C0 /mybootdir/pxelinux.cfg/C /mybootdir/pxelinux.cfg/default ... in that order.
これでクライアントごとに別の設定ファイルを渡すことができる(→カーネルやブートパラメータを変えられる)のですが、IPアドレスが16進数だったりと、少々分かりにくいです。
そこで、VIVER CORE ServerはTFTPサーバーの実装にtftp-hpaを使っているのですが、tftp-hpaは、クライアントから要求されたファイル名を正規表現を使って変換することができます。
VIVER CORE Serverではデフォルトで↓このような正規表現が設定しています。(tftpboot/remapファイル)
# <operation> <pattern> <replace> # IP address Hex => Num r pxelinux.cfg/[0-9A-F]{8}$ ipaddr4/\i r pxelinux.cfg/[0-9A-F]{6}$ ipaddr3/\i r pxelinux.cfg/[0-9A-F]{4}$ ipaddr2/\i r pxelinux.cfg/[0-9A-F]{2}$ ipaddr1/\i r ipaddr4/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+) pxelinux.cfg/\1 r ipaddr3/([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+ pxelinux.cfg/\1 r ipaddr2/([0-9]+\.[0-9]+)\.[0-9]+\.[0-9]+ pxelinux.cfg/\1 r ipaddr1/([0-9]+)\.[0-9]+\.[0-9]+\.[0-9]+ pxelinux.cfg/\1 # ARP Type 1 => 0 r pxelinux.cfg/01-([0-9a-f]-[0-9a-f]-[0-9a-f]-[0-9a-f]-[0-9a-f]-[0-9a-f]) pxelinux.cfg/00-\1
これによって、先ほどのpxelinuxのアクセスは、
/mybootdir/pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d /mybootdir/pxelinux.cfg/00-88-99-aa-bb-cc-dd /mybootdir/pxelinux.cfg/192.0.2.91 /mybootdir/pxelinux.cfg/C000025 /mybootdir/pxelinux.cfg/192.0.2 /mybootdir/pxelinux.cfg/C0000 /mybootdir/pxelinux.cfg/192.0 /mybootdir/pxelinux.cfg/C00 /mybootdir/pxelinux.cfg/192 /mybootdir/pxelinux.cfg/C /mybootdir/pxelinux.cfg/default
に変換されます。
ただIPアドレスを使う場合は、DHCPサーバーでMACアドレスを元に配布するIPアドレス固定しておかないと、あまり意味がありません。