/diskless/boot を作る
clone_root のコメント行にも記述されているが、ディスクレスクライアント用のカーネルとして FreeBSD 8.3 GENERIC カーネルを流用しても、クライアントに必要なドライバーが含まれていないため、起動出来ない。
# create a kernel config file in /sys/i386/conf/DISKLESS with # options MD_ROOT # options BOOTP # options BOOTP_NFSROOT # options BOOTP_COMPAT # and do a full build of the kernel.
/sys/i386/conf/GENERIC をDISKLESS としてコピーし、クライアント用のコンフィグファイルを作る。
/sys/i386/conf> diff GENERIC DISKLESS 24c24 < ident GENERIC --- > ident DISKLESS 77a78,81 > options BOOTP > options BOOTP_NFSROOT > options BOOTP_COMPAT
次は、/diskless/boot の下に、このDISKLESSカーネルを構築するためのコマンドを発行する。
# cd /usr/src # make kernel DESTDIR=/diskless KERNCONF=DISKLESS
/diskless/boot 下に /boot の下と同じように kernel などのファイルがコピーされたら カーネルに関しては準備完了。
/conf ディレクトリのファイルを作る
大物が終了したので、あとは小物ファイルを準備する。
</conf/default/etc/fstab> 192.168.1.4:/diskless / nfs ro 0 0 192.168.1.4:/usr /usr nfs ro 0 0 192.168.1.4:/home /home nfs rw 0 0 md /tmp mfs -s=30m,rw 0 0 md /var mfs -s=30m,rw 0 0 proc /proc procfs rw 0 0
</conf/default/etc/rc.conf> keymap="us.pc-ctrl" ifconfig_re0="dhcp" #NICのタイプに合わせて修正すること sshd_enable="YES" ntpdate_enable="YES" ntpdate_hosts="asia.pool.ntp.org" ntpd_enable="YES" inetd_enable="YES" inetd_flags="-wWl -C 6"
</conf/base/etc/diskless_remount> /etc
</conf/base/etc/md_size> 30000
</conf/base/var/md_size> 200000
> ls -lR /conf/base/var/log/ total 0 -rw-r--r-- 1 root wheel 0 Sep 11 13:20 auth.log -rw-r--r-- 1 root wheel 0 Sep 11 13:20 console.log -rw-r--r-- 1 root wheel 0 Sep 11 13:20 cron -rw-r--r-- 1 root wheel 0 Sep 11 13:20 debug.log -rw-r--r-- 1 root wheel 0 Sep 11 13:20 local7.log -rw-r--r-- 1 root wheel 0 Sep 11 13:20 lpd-errs -rw-r--r-- 1 root wheel 0 Sep 11 13:20 maillog -rw-r--r-- 1 root wheel 0 Sep 11 13:20 messages -rw-r--r-- 1 root wheel 0 Sep 11 13:20 ppp.log -rw-r--r-- 1 root wheel 0 Sep 11 13:20 security -rw-r--r-- 1 root wheel 0 Sep 11 13:20 userlog -rw-r--r-- 1 root wheel 0 Sep 11 13:20 xferlog
この設定では /var はメモリファイルシステムの上に作成されて電源を切ったら全て消えてしまうので真面目に設定しても意味がないが、/diskless/etc/syslog.conf によりログが吐き出されてしまうので、とりあえずエラーが出ないように空のファイルを置いておく。ログを残したいなら、syslog ホストを使う事で解決出来る。今の時点でこのディスクレスクライアントを外部に公開する予定はないので、リブート毎にログは消滅してしまう設定になっている。
続いて、ASRock AD2700-ITX をテスト用ディスクレスクライアントとして使うので、その為の設定を追加する。ad2700 は 192.168.1.41 を割り当てることにし、/conf/192.168.1.41 ディレクトリを作成し、その下にad2700専用設定ファイルを置く。当然DHCPサーバーには、このクライアント用の設定をする必要がある。
</conf/192.168.1.41/etc/rc.conf> keymap="us.pc-ctrl" ifconfig_re0="dhcp" hostname="pc41" sshd_enable="YES" ntpdate_enable="YES" ntpdate_hosts="asia.pool.ntp.org" ntpd_enable="YES" inetd_enable="YES" inetd_flags="-wWl -C 6" usbd_enable="YES" nfs_client_enable="YES" rpcbind_enable="YES" rpc_lockd_enable="YES" rpc_statd_enable="YES"
以下のファイルは、管理者ログインしたときに、初期化を行うための設定を置いてある。これがないと、毎回いらっと来るハメにおちいるので。
</conf/192.168.1.41/root/ .cshrc .login .profile
/conf の下の設定が終わったら、clone_root コマンドを発行して/diskless/conf をアップ更新する。
# clone_root update
サーバー側でディスクレスクライアント起動のためのプロセスが全て起動しているなら、これでディスクレスクライアントが起動する準備完了。NFSサーバー関係のファイルを編集した後なら、一度リブートした方が簡単かも。
注意事項
この手順でディスクレスシステムを構築する場合、/usr がサーバーとクライアントで共通になるため同じバイナリーシステムである必要がある。サーバーが 32bit FreeBSD(i386)でクライアントが64bit FreeBSD(amd64, x64) で動かす事は出来ない。仮に、サーバーを atom d525 ボードに64bit FreeBSDをインストールすると、クライアントに ad2700 を使う事は出来ないということになる。1台のサーバーに対し、複数のディスクレスクライアントが、32bit であったり 64bit であったり、混在で使う事も出来ない。