クライアントがホスト名を認識しない

【症状】
/tftpboot/DIR/snapshotの下にクライアント毎のサブディレクトリが作られるが、system-config-netbootで明示的にクライアント名でサブディレクトリを指定しても、ディスクレスを立ち上げると(ディスクレスがホスト名を認識できないため)IPアドレス名のディレクトリ(例えば /tftpboot/DIR/snapshot/192.168.0.128 )が作られてしまう。
また、ディスクレスが立ち上がってhostnameコマンドで確かめると"localhost"になっている。

【解決策】
DHCPで"use-host-decl-names"オプションを"on"にするか、"option host-name"オプションでホスト名を指定しておかないとディスクレス・クライアントがホスト名を識別できない場合がある。(必ずしも認識できないわけではない。現在、実運用系と実験系の2つの環境でディスクレスを実現しているが、実運用系ではこのオプションを指定してないないが問題ない。ディスクレスの雛形となるOSの設定に依るのかも知れないが、基本的には(ディスクレスDHCPを使うわけなので)これらのオプションを設定するのが正論だろう。)

/etc/dhcpd.config で次のように設定する:

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample  
#
ddns-update-style       none;
ignore                  client-updates;
use-host-decl-names     on;

もしくは:

host client-01 {
        hardware ethernet       00:0C:29:EB:31:F6;
        fixed-address           client-01;
        option host-name        "client-01";
        next-server             server-01;
        filename                "/linux-install/pxelinux.0";
        default-lease-time      1296000; # 2 weeks
        max-lease-time          2592000; # 4 weeks
}

(前者の解が正解だろう。後者はホスト名を変更した場合、あちこちで修正が必要となり設定ミスの原因になりかねない。)

【参考】

can't open '/dev/console'

【症状】
ディスクレス・クライアントがブートの途中で

switch_root: can't open '/dev/console': No such file or directory
Kernel panic - not syncing: Attempted to kill init!

というメッセージで止まってしまう。

【解決策】
ディスクレス・クライアントの雛形となるファイルシステムをシステム停止状態でコピーすると/devの下が空のままコピーされる。/devの下のデバイスファイルは動的に作られるが、netbootによるディスクレスを構成する場合には、最低限consoleデバイスが必要となる。(現在、Fedora 8で確認。)
雛形のdevディレクトリ(/tftpboot/DIR/root/dev/)でconsoleを作成してからクライアントのsnapshotを作成する、もしくはクライアントのsnapshotのdevディレクトリ(/tftpboot/DIR/snapshot/CLIENT/dev/)でconsoleを作成する。(前者の方が理想的。)consoleの作成は以下の通り。

[root@server-01 dev]# pwd
/tftpboot/f8/root/dev
[root@server-01 dev]# ls -l
total 0
[root@server-01 dev]# mknod console c 5 1
[root@server-01 dev]# chmod 600 console
[root@server-01 dev]# ls -l
total 4
crw------- 1 root root 5, 1 2008-02-09 17:04 console
[root@server-01 dev]# 

最終的にはクライアント側で /dev/ はtmpfsにマウントされ、そこで動的にデバイスファイルが生成される。このconsoleはそれまでの間、一時的に必要(と推測できる)。次のサンプルはクライアント側で/devに対するマウント状況を調べたところ:

[root@client-01 ~]# mount | grep '/dev '
192.168.0.7:/tftpboot/f8/snapshot on /dev type nfs (rw,relatime,vers=3,rsize=32768,wsize=32768,hard,intr,nolock,nosharecache,proto=tcp,timeo=600,retrans=2,sec=sys,addr=192.168.0.7)
none on /dev type tmpfs (rw,relatime)
[root@client-01 ~]# df /dev
Filesystem           1K-blocks      Used Available Use% Mounted on
none                    514340        56    514284   1% /dev
[root@client-01 ~]# 

一旦NFSでsnapshotをマウントしてから、最終的にはtmpfs(メモリのキャッシュを使う)として再マウントしている。その後、デバイスファイルを生成している。

雛形ファイルシステムでpatch不能のファイルがある

【症状】
system-config-netbootで雛形のファイルシステム(/tftpboot/DIR/root/)を作成するときにpatchが当てられないファイルが幾つかあった。(Fedora 8、2.6.23.14-115.fc8 にて確認。)

[root@server-01 log]# find /tftpboot/f8/root/ -name \*.rej -print
/tftpboot/f8/root/etc/rc.d/rc.sysinit.rej
/tftpboot/f8/root/etc/rc.d/init.d/netfs.rej
/tftpboot/f8/root/etc/rc.d/init.d/halt.rej
[root@server-01 log]# 

今のところ特に不具合はないが注意が必要。
【解決策】
一つ一つrejファイルを確認しながら手でパッチを当てるしかない。無理してパッチを当てなくても不具合らしい不具合はないので、時期のアップデートで修正されるのを待った方が良いと思う。(haltは簡単に直せるがnetfsとrc.sysinitはプログラムの構造がかなり変わってしまっているので修正するのは手間がかかる。system-config-netbootはどのバージョンはベースしているのだろう? 元のパッチファイル(/usr/share/system-config-netboot/diskless/*.patch)とか見ると2003年とかになっているが。メンテされてないのかな?)