ホーム > PC > FreeBSDでPXE boot環境構築

FreeBSDでPXE boot環境構築

2009 年 9 月 23 日 コメントをどうぞ コメント

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つのサーバソフトウェアが必要。

  1. DHCPサーバ → ISC DHCPサーバを使用した
  2. TFTPサーバ → baseに付属しているものを使用した
  3. 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/

カテゴリー: PC タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。