FreeBSDでPXE boot環境構築
FreeBSDでPXEサーバ構築
自分用のメモ。
一度、PXEサーバを作っておけばFreeBSDに限らず色々なOSをネットワーク経由でブート出来て便利。IPアドレスは適宜自分の環境に合わせて変更する。
環境
- FreeBSD 7 stable(2009/9/22 のレポジトリをビルドしたもの)
KernelはGENERIC。
カスタムカーネルを使う場合は、必要なパラメータが入っているか確認しておく。
NFSを使う為に、
options NFSCLIENT
options NFSSERVER
options NFS_ROOT
とか、
device bpf
とかが必要。
FreeBSDをPXEブートでインストールするには以下の3つのサーバソフトウェアが必要。
- DHCPサーバ → ISC DHCPサーバを使用した
- TFTPサーバ → baseに付属しているものを使用した
- NFSサーバ → baseに付属しているものを使用した
このうち、NFSサーバはFTPサーバやHTTPサーバでも代替できるみたいだけど、試していない。
以下個別に設定していく。
DHCPサーバの設定
まずはportsからインストール。
# cd /usr/ports/net/isc-dhcp31-server
# make config-recursive
# make install clean
# cd /usr/local/etc/
# cp dhcpd.conf.sample dhcpd.conf
以下、dhcpd.confを編集する。
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "example.local";←ドメイン名(DHCPサーバをあくまでもPXEブート時にだけ使用するなら、なんでもいいと思う)
option domain-name-servers 192.168.0.1;←DNSサーバのIPアドレス(自分の環境に合わせる)
default-lease-time 600;
max-lease-time 7200;
default-lease-time 600;
max-lease-time 7200;
# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# ad-hoc DNS update scheme - set to "none" to disable dynamic DNS updates.
ddns-update-style ad-hoc;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# A slightly different configuration for an internal subnet.
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.70 192.168.0.100; ←DHCPサーバで割り振るIPアドレスの範囲(DHCPサーバをあくまでもPXEブート時にだけ使用するなら他と重複しないようにして、他の機器と同一セグメントならばなんでもいいと思う)
option domain-name-servers 192.168.0.1; ←DNSサーバのIPアドレス(自分の環境に合わせる)
option domain-name "example.local"; ←ドメイン名(DHCPサーバをあくまでもPXEブート時にだけ使用するなら、なんでもいいと思う)
option routers 192.168.0.1; ←デフォルトゲートウェイ(自分の環境に合わせる)
option broadcast-address 192.168.0.255; ←ブロードキャストアドレス(自分の環境に合わせる)
default-lease-time 600;
max-lease-time 7200;
}
host pxeboot {
hardware ethernet xx:xx:xx:xx:xx:xx; ←クライアントとなるPCのNICのMACアドレス。調べ方はifconfig -aするなり、ひとまずPXEブートをしてみて、表示されるMACアドレスを読み取るなりする。
fixed-address 192.168.0.101; ←クライアントに割り振るIPアドレス(適当に他と重複しないような値)
filename "pxeboot"; ←tftpでロードするファイル名
option root-path "192.168.0.6:/pxeroot"; ←NFS経由で読み込む場合のルートディレクトリ(IPアドレスはPXEブートサーバのものにする)
}
「/etc/rc.conf」に以下を追記。
dhcpd_enable="YES"
dhcpd_chuser_enable="NO"
起動。
/usr/local/etc/rc.d/isc-dhcpd start
TFTPサーバの設定
TFTPはinetd経由で起動する様に設定する。
/etc/inetd.confを以下のように変更する。
#tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /home/tftp
これでtftpサーバは/home/tftpをルートディレクトリとして起動する。
続いて、FreeBSDのpxeブートイメージをCDからコピーする。
# cp -p /cdrom/boot/pxeboot /home/tftp/
「/etc/rc.conf」に以下の記述を追加する。
inetd_enable="YES"
起動。
/etc/rc.d/inetd start
/etc/hosts.allow に
ALL : ALL : allow
と記述されている場合は、特に問題ないが、特定のサービスのみinetd経由でサーバを起動する設定になっている場合は、tftpdの起動を許可する設定をする必要がある。
tftpd : 192.168.0.0/255.255.255.0 : allow
こんな感じで。
NFSサーバの設定
NFSサーバのルートディレクトリを作成する。
# mkdir /pxeroot
ここにkernel/mfsroot等のファイルをコピーする。
cp -Rp /cdrom/boot /pxeroot/
次に、コピーしたmfsrootをルートに配置するために、「/pxeroot/boot/loader.conf」に以下の記述を追加する。
vfs.root.mountfrom="ufs:/dev/md0c"
2009/12/3 追記
8.0 Releaseではloader.confの記述を変更しないと、起動時にno initと言われてパニックになってしまう。
vfs.root.mountfrom="ufs:/dev/md0"
参考
http://d.hatena.ne.jp/seer/20091025
NFSマウントを許可するIPアドレスを設定するために、「/etc/exports」に以下の記述を追加する。(ファイルが無ければ新規に作成する)
/pxeroot -network 192.168.0.0 -mask 255.255.255.0
「/etc/rc.conf」に以下の記述を追加する。
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4"
mountd_enable="YES"
mountd_flags="-r"
rpcbind_enable="YES"
起動。
/etc/rc.d/nfsd start
後は起動させたいクライアントマシンをPXEブートさせるだけ。
Linuxの場合
dhcpd.confのfilenameを各ディストリビューションが指定するものに変更する。
ディストリビューションによってはNFSサーバはいらないかも。(Debianは不要だった)
更に一部のディストリビューションではブートローダsyslinuxを別途導入する必要があるので、
/usr/ports/sysutils/syslinux をインストールして、/usr/local/share/syslinux/pxelinux.0をコピーして使用する。
OpenBSD(4.6)の場合
OpenBSDのPXE Bootは簡単で、サイトからブートローダpxebootとRAMイメージbsd.rdを持ってきて、
tftpのホーム(上記の例では/home/tftp)に置く。
注意点として、dhcpd.confにnext-server tftpサーバのIPアドレス; を記載する必要があったこと。
http://bsdsupport.org/2007/01/q-why-do-i-get-read-text-unknown-error-code-60-failed60-when-trying-to-pxe-boot-openbsd/
最近のコメント