ディスクレスサーバを構築する
「DHCPサーバーとtftpサーバーを設定する」の続きです。
PXEブート用にカーネルを構築することとsyslinuxの設定、ルートファイルシステムの作成を行います。
ディスクレスでブートさせるパソコンはATOM330を搭載した45CTDというマザーボードです。
ルートファイルシステムの作成
NFSで共有されているディスクをマウントしてルートファイルシステムを展開します。
こちらはRaspberry Piではなく適当なamd64マシンで展開しました。
nfsの共有領域をマウントしてdebootstrapでファイルシステムを作成します。
# mkdir -p /mnt/nfs # mount -o nolock 192.168.10.13:/mnt/zMANA/nfs /mnt/nfs # apt-get install debootstrap # debootstrap --arch amd64 wheezy /mnt/nfs http://ftp.riken.jp/Linux/debian/debian
hostsなんかも書き込んで置いた方がよさそうです。
# nano -w /mnt/nfs/etc/hostname 45CTD # /mnt/nfs/etc/hosts 127.0.0.1 localhost 45CTD
chrootしてrootユーザーのパスワードを設定しておきます。
# mount -t proc none /mnt/nfs/proc # chroot /mnt/nfs/ /bin/bash $ passwd
カーネルの再構築
適当に走っていたamd64のカーネルでPXEブートしようとしたらファイルシステムが認識できなくてカーネルパニックがおきてしまいました。
カーネルコンフィグを確認するとNFSのサポートがモジュールになっていたのでその辺をビルトインに変更して再構築します。
こちらもRaspberry Piではなく適当なamd64マシンで再構築しています。
# apt-get install linux-source-3.2 # sudo -s # cd /usr/src # tar jxvf linux-source-3.2.tar.bz2 # cd ./linux-source-3.2
コンフィグファイルは標準のものを流用して一部変更します。
# cp /boot/config-3.2.0-4-amd64 ./.config # make oldconfig # nano -w ./.config
とりあえず以下の設定に変更を加えました。
CONFIG_UNIX=y CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=n CONFIG_IP_PNP_RARP=n CONFIG_NFS_FS=y CONFIG_ROOT_NFS=y
make menuconfigでNICのドライバを片っ端からビルトインにします。
# make menuconfig
設定変更がおわったらカーネルをmakeします。
# make # cp arch/x86/bzImage ./vmlinuz-3.2.0-4-amd64-nb
元のカーネルがvmlinuz-3.2.0-4-amd64だったのでファイル名をネットワークブート対応ということでvmlinuz-3.2.0-4-amd64-nbにしてみました。
カーネルができあがったらvmlinuz-3.2.0-4-amd64-nbを適当な方法でRaspberry Piに転送します。
PXEブートの設定
ここからまたRaspberry Piでの作業です。syslinuxを入れてtftpのディレクトリに配置して設定ファイルを記述します。
# apt-get install syslinux-common # cp /usr/lib/syslinux/pxelinux.0 /srv/tftp # cp /usr/lib/syslinux/menu.c32 /srv/tftp # cp /usr/lib/syslinux/vesamenu.c32 /srv/tftp # mkdir -p /srv/tftp/pxelinux.cfg # touch /srv/tftp/pxelinux.cfg/default # nano -w /srv/tftp/pxelinux.cfg/default DEFAULT linux LABEL linux KERNEL Linux/boot/vmlinuz-3.2.0-4-amd64-nb APPEND root=/dev/nfs nfsroot=192.168.10.13:/mnt/zMANA/nfs/Linux rw ip=dhcp IPAPPEND 0 # mkdir -p /srv/tftp/boot # cp ~/vmlinuz-3.2.0-4-amd64-nb /srv/tftp/boot
ちなみに/srv/tftp/pxelinux.cfg/defaultを/srv/tftp/pxelinux.cfg/%MACアドレス%にするとアクセスしてきたマシンのNICに割り当てられているMACアドレスごとに違う設定を与えることができるようです。