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して試して下さい。