NetBSDを利用する上で、netboot出来ると非常に便利です。OSのInstallにも、debugにも
利用でき、その上、いきなり電源を切ることも出来るわけです。
しかし、私の場合、マーフィーの法則かわかりませんが、うまくnetboot出来るようにな
るのにかなり時間がかかりました。
ここでは、NetBSDをInstallしたマシンが少なくとも1台ある環境において、いかにして
NetBSDをnetbootできるような環境を作るかを主眼にメモを残しておきます。
なお、この記事を見てnetbootに失敗しようと、Diskを壊そうと、その他一切の被害に関
する責任は取れません。At your own Riskでお願いします。
Netbootは、以下のような流れで行なわれます。
ここでは、以下のarchitectureに関しての話をします。これは、手元で試せる機器が 以下のものだけだからです。
事前に準備するべきものは以下の通りです。
このうち、DHCPとbootpは同一のportを使用するため、同時には動作しません。architecture | Vendor | Machine | 備考 |
---|---|---|---|
sun4m | Sun Microsystems | SparcStation20 | |
alpha | Digital Equipment Corporation | AlphaStation255 | |
macppc | Apple Computer | Machintosh G4 Cube | Currently not tested |
macppc | Apple Computer | Machintosh PowerBook G4 | netboot-server, NetBSD-current |
bootparamdやNFSはrpcを使用します。つまり、netboot-server上でrpc関連の設定を
行なう必要があります。
rpc関連の設定は特に難しいことはなく、/etc/rc.confで
rpcbind=YES rpcbind_flag="-l"としておいて、
sh /etc/rc.d/rpcbind startとするだけです。
ついでに、/etc/ethersも設定しておきましょう。そのためには各
機器のMAC Addressも調べておきましょう。この辺りは、bootした
時に表示されたり、openfirmwareなどで調べれば判ります。
なお、判らない場合にむりやり調べる方法として、何も設定せずnetbootして、
tcpdumpやetherealなどでbootpメッセージを送
る際のMAC Addressを記録する方法があります。
/etc/ethersの書き方は簡単です。
MAC-ADDRESS IP-ADDRESSと書くだけです。例えば、
% cat /etc/ethers 08:00:20:7c:41:7e 10.0.0.2 00:00:F8:25:42:F1 10.0.0.3 00:30:65:d6:01:96 10.0.0.4のようになります。名前解決の問題があると面倒なので、netboot-server上で /etc/hostsの設定もしましょう。
% cat /etc/hosts 10.0.0.1 netboot-server 10.0.0.2 ss20 10.0.0.3 alpha 10.0.0.4 g4cubeこれでOKです。
% su Password: ultrasecret # /usr/sbin/rarpd -l gm0 #なお、/etc/rc.confでrarpd=YES rarpd_flag="gm0" としておけばboot時に自動的にrarpdが立ち上がります。gm0の部分は、ご自分の環境の Network Interfaceを指定して下さい。 これでOKです。
bootparamdは/etc/bootparamsを参照します。
sun root=laysner-b:/export/sun/root \ swap=laysner-b:/export/sun/swap \ dump=laysner-b:/export/sun/swap alpha root=laysner-b:/export/alpha/root \ swap=laysner-b:/export/alpha/swap \ dump=laysner-b:/export/alpha/swap g4cube root=laysner-b:/export/macppc/root \ swap=laysner-b:/export/macppc/swap \ dump=laysner-b:/export/macppc/swap
上記を設定したら、bootparamdを動かしましょう。
% su Password: ultrasecret # /usr/sbin/rpc.bootparamd #これでOKです。
なお、/etc/rc.confで bootparamd=YES bootparamd_flag="gm0" としておけばboot時に自動的にbootparamdが立ち上がります。gm0の部分は、ご自分の環境の Network Interfaceを指定して下さい。
次は bootpd に関する設定を行ないます。
bootpd は inetd から起動されます。その設定ファイルは、/etc/bootptab です。
まず、bootptabを設定しましょう。
ss20:\ :ha=0800207c417e:\ :bf=sparc/boot.net:\ :rp=/export/sparc:\ :ip=10.0.0.2:\ :sm=255.255.255.0:\ :ht=ethernet alpha:\ :ha=0000F82542F1:\ :bf=Alpha/netboot:\ :rp=/export/alpha:\ :ip=10.0.0.3:\ :sm=255.255.255.0:\ :ht=ethernet g4cube:\ :ha=003065d60196:\ :bf=macppc/boot.net:\ :rp=/export/macppc:\ :ip=10.0.0.4:\ :sm=255.255.255.0:\ :ht=ethernet要素を説明します。
keyword | 意味 |
---|---|
ha | ハードウェアアドレス(MAC Address) |
bf | tftpで読み出すプログラム(Netboot用boot loader) |
rp | Mount point(NFS時のroot filesystem) |
ip | IP Address |
sm | サブネットマスク |
ht | ハードウェアタイプ(Ethernet) |
#bootps dgram udp wait root /usr/sbin/bootpd bootpdとなっていますが、これを
bootps dgram udp wait root /usr/sbin/bootpd bootpdとします。その後、inetdを再起動して下さい。
% su Password: UltraSecret # kill -HUP `cat /var/run/inetd.pid` # exit %
これで bootpd 関連の設定も終りました。
bootpd の代わりに dhcpd を利用する場合について記載します。
まだ試していないので、ミスがあるかも知れません。
NetBSDには標準でISC DHCPdがついているので、それを利用します。
また、基本的な設定はできるものとします。
host ss20 { hardware ethernet 8:0:29:7c:41:7e; fixed-address 10.0.0.2; option host-name "ss20"; filename "sparc/boot.net"; option root-path "/export/sparc"; option broadcast-address 255.255.255.0; } host alpha { hardware ethernet 0:0:f8:25:42:f1; fixed-address 10.0.0.3; option host-name "alpha"; filename "alpha/netboot"; option root-path "/export/alpha"; option broadcast-address 255.255.255.0; } host g4cube { hardware ethernet 0:30:65:d6:01:96; fixed-address 10.0.0.4; option host-name "g4cube"; filename "macppc/boot.net"; option root-path "/export/macppc"; option broadcast-address 255.255.255.0; }その後、dhcpdを再起動します。
% su Password: UltraSecret # kill -HUP `cat /var/run/dhcpd.pid` # exit %
tftp関係の設定をしましょう。
Netbootにおいてtftpは、boot-loaderを送る役割を担います。
tftpで配送するためのboot-loaderを置くディレクトリを作成し、必要なファイルを置いて
下さい。今回は、/tftpboot以下に置く場合の例です。
% su Password: UltraSecret # mkdir /tftpboot # mkdir /tftpboot/sparc # mkdir /tftpboot/alpha # mkdir /tftpboot/macppc # chmod -R 555 /tftpboot # cp netboot /tftpboot/alpha;chmod 444 /tftpboot/alpha/netboot # cp boot.net /tftpboot/sparc;chmod 444 /tftpboot/sparc/boot.net # cp ofwboot.elf /tftpboot/macppc;chmod 444 /tftpboot/macppc/ofwboot.elf # exit %次に、inetd.confを書き換えて、tftpdが動作するようにします。
#tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpbootとなっていますが、これを
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpbootと修正し、inetdを再起動して下さい。
% su Password: UltraSecret # kill -HUP `cat /var/run/inetd.pid` # exit %これでtftp関連の設定も終了です。
最後にNFS関係の設定をしましょう。
NFSでfilesystemをmountできるようにするには、/etc/exportsを編集する必要があります。
以下にsampleを挙げておきます。
/export -network 10.0.0.0 -mask 255.255.255.0その後、mountdとnfsdを立ち上げます。
% su Password: UltraSecret # mountd # nfsd # exit %
boot時にNFSをenableするには、/etc/rc.confで
mountd=YES mountd_flags="" # NFS mount requests daemon nfs_server=YESとしておけば良いでしょう。
最後に、各機器からnetbootをします。
今回は、基本的にInstall kernelを立ち上げることだけを考えます。Disklessでbootして
運用するのであれば、/export の下に各マシン毎のfilesystemを作成し、その上で、各マ
シン用の設定を行なう必要がありますが、これに関しては割愛します。
まず、install用kernelを準備します。これは、
JNUG ftp serverなどに置かれてい
るNetBSD distributionから持ってくると良いでしょう。
例えば、NetBSD-1.5.1のalpha用なら、
ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-1.5.1/sparc/installation/instkernel/netbsd.gz
を/export/alphaの下に置いて下さい。
NetBSD-1.5.1のsparc用なら、
ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-1.5.1/sparc/installation/netboot/rootfs.tgz
を/exports/sparcの下で展開して下さい。
NetBSD-1.5.1のmacppc用なら、
ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-1.5.1/sparc/installation/netbsd.ram.gz
を/exports/macppcの下に置いて下さい。
そうして、各マシンのBIOS/Openboot/OpenFirmwareから以下のようにbootして下さい。
ALPHA:
>>> set ewa0_protocols bootp
>>>boot -proto bootp ewa0
SPARC:
ok boot net boot.net
MACPPC:
> boot enet:0,ofwboot.elf enet0:netbsd.ram.gz
alphaやsparcなどは基本的にbootpでnetbootできますが、macppcはopenfirmwareの制約上 dhcpからしかnetbootできないようです。そのため、macppcではbootpdのかわりにdhcpdを 使用する必要があります。
Sparcでnetbootする場合、boot.netをMAC-Address.SUN4Mなどと変更する必要があるかもし れません。その場合、bootしたいマシンのMAC-Addressを調べ、lnして試して下さい。