How to diskless boot


付属のhandbook を見ればだいたいのことは書いてある。しかし、一部間違いと思われる箇所もあり、 第一、NFSサーバとしてSUNかHPのWSを使うことを前提に書かれている。

このページではNFSサーバにもFreeBSDを利用し、/usr以下も共用することを 目標とする。つまり、diskless機が/usr以下にある共有ライブラリを必要とする コマンドでNFSアクセスしようとしたり(ドアの鍵がドアの向こう状態)、 diskless機側がlockしたためにNFSサーバ機側がblockedされたりしないように 気を付ける必要がある。また双方の設定が異なるため共用できないファイル等を 共用してしまわないようにもしなければならない。

初めに調べておくこと

diskless機側のLANカードの
MACアドレス
##:##:##:##:##:##
I/Oポートアドレス
240H
IRQ番号
9
ちなみに上に挙げた値は、DATABOOKなる プロサイド safari互換機と思われるマシンの on board NICの初期値です。 こいつは小さいし、割合に静か(SONG CHEER TS600なんかより)で良いです。

ただし当然のことながら、netbootコードが対応しているNICでないとだめです。 /sys/i386/boot/netboot/を見れば分かりますが、現在の所Western Digital/SMC 8003, 8013, 8216 とその互換ボード, NE1000/NE2000 とその互換カードがサポートされています。

NFSサーバ機側の設定

handbookを見て/etc/bootptab,/tftpboot/cfg.${IPアドレス}を設定します。 /etc/inetd.conf中のbootps,tftpの項を有効にしてkill -HUP `cat /var/run/inetd.pid`するのを忘れないように。

bootp

例:
/etc/bootptab:
.default:\
	:sm=255.255.255.0:\
	:ds=192.168.0.1:\
	:gw=192.168.0.1:\
	:hn:\
	:ts=server:\
	:vm=rfc1048:

client:ip=192.168.0.2:ht=ether:ha=############:tc=.default:

tftp

/tftpboot/cfg.IPアドレスというfileを作ります。例:
/tftpboot/cfg.192.168.0.2:

rootfs 192.168.0.1:/.rootfs/client
swapfs 192.168.0.1:/var/swapfs
swapsize 32768
hostname client.your.domain

NFS exports

client側ファイルシステムをFSマウントできるようにします。maprootが必要 なんですがセキュリティ上の危険を孕んでいるので、必ず myclientを指定する ようにしましょう。

スワップ用のファイルは、handbookではtouchで作るように書いてあり ますがこれでは駄目です。/tftpboot/cfg.${IPアドレス}で指定した大きさの ファイルを作りましょう。

# dd if=/dev/zero of=/var/swapfs/swap.${IPアドレス} bs=1k count=${swapsize}
# chmod 0600 /var/swapfs/swap.${IPアドレス}
スワップファイルにはプロセスの情報が含まれているので、丸見えにならぬよう chmodしておきます。

やっかいなのが/(root)ファイルシステムです。なるべくハード リンクを活用 して容量を節約したい所ですが、/etcのように共有不可能なものも あります。/{bin,lkm,sbin,stand}はリンクし、残りのディレクトリは個々に 作っていきます。

/dev

/devはmkdirでディレクトリを作成した後、MAKEDEV,MAKEDEV.local ファイルだけリンク。/.rootfs/${client}/dev/に移動した後、 ./MAKEDEVを実行しておきます。本当はclient側でデバドラの構成が 異なる可能性がありますが、まあいいでしょう。後でclient側からMAKEDEVし 直せばよいでしょう。

/etc

cp -pRした後、sysconfig等を編集します。sysconfigのlocal_startupに /usr以下のディレクトリを含めない方が良いでしょう。ウチでは/etc/rc.dだけ 指定しています(まるでLinux slackwareだ)。

/root

ドット ファイルをcp -pすればOKです。

/var

これ以下のディレクトリを掘っておきます。また/var/log/以下に messages,wtmp等のファイルをtouchで作成しておきます。

/usr,/tmp,/home,/kern,/proc,/mnt

NFSマウントできるようにmkdirしておきます。/tmpは (/var/tmpも)chmod 1777しておくのを忘れないように。

diskless機側の設定

netboot作成

diskless client起動の為のファイルを作成します。作業自体は /sys/i386/boot/netboot/ディレクトリに移り、client機側の LANカードに合わせてMakefileを書き換え、makeします。netboot.com, netboot.romというファイルができるので、DOSフロッピーに書くか (EMM386の類をCONFIG.SYSから外すこと)、ROMに焼くか します。

kernel作成(optional)

client機側のハードウェアに合わせたカーネルを作ります。出来たカーネル はmake installせずに cp kernel /.rootfs/${client}/します。

実用性向上のための know how

メモリをガンガン積みましょう。かつて diskless WSはネットワークの嫌われ 者でした。と言うのも、当時のdisklessモデルはdiskが無いだけでなく、メモリも 少なく頻繁にswapし、その度にネットワークを混雑させたからです。

その頃と較べて現在はメモリが劇的に安くなりました。かつての swapパーティション 以上の容量のメモリを積むことも夢ではなくなっています。 diskに swapパーティションを用意する代わりになるくらいメモリを積んでしまい ましょう。

disklessで便利なのは、パッケージ ソフトのinstallをNFSサーバ側で1回だけ 行なえば diskless側では何もしなくて済むことです。もっとも、何かしようにも 不揮発性の記憶メディアを持ってないので、何も出来ないのですが…。

それでは、ウルサくて、電気食いで、そのために電源fanも更にウルサくなる 2重の騒音源であるHDDを自分の机の上から追い出して、静かで平和な 計算機環境を構築できますように!

Powered by FreeBSD
For questions or comments, please send mail to: nkazushi@highway.or.jp