PXEブート環境を作る

さて、ここからの作業は全てサーバ用PCで行います。

PXEブート用の環境構築ですが、以下のものが必要になります。

  • DHCPサーバ
  • TFTPサーバ
  • NFSサーバ
  • syslinux
  • Ubuntu LiveCDのISOイメージ(マウントしたCD-ROMでも可)

このうち、DHCPサーバはもうネットワーク内に立ち上がってるかもしれませんね。その場合、もしかしたらそちらのDHCPのサービスは切ってもらう必要があるかもしれません。特にルータ内蔵のは。

ここからはほぼrootとしての作業しかありませんので、まずはsudoしときましょう。

$ sudo -s


まずは以下のようにしてパッケージをインストールしてください。

# aptitude install dhcp3-server tftpd-hpa tftp-hpa syslinux nfs-kernel-server

DHCPが既にサービスされていて、サービスしているサーバの設定を変更出来るなら、dhcp3-serverはいりません。

サーバのTips(Ubuntu 9.10〜)

設定を始める前に、サーバの起動・停止についてひとつ書いておきます。

実は、9.10から…かどうかははっきりしないんですが、RedHat系のような方法が可能になっています。

# service SERVICENAME [start|stop|restart|reload]

SERVICENAMEは/etc/init.d/ 下にあるファイル名そのままです。bashではTAB補完が効きます。いちいち/etc/init.d下のスクリプトを直接起動しなくてよくなったのはいいですねぇ。

各種サーバは設定を変更したらこれで再起動を行って下さい。

DHCPサーバの設定

まずDHCPから行きます。一般的なDHCPの設定内容は割愛しまして、PXEブートに必要なところだけ。恐らくDHCPでリースするIPの範囲を指定するrange行があるセクションがあるはずです。そこにPXEブートに必要な設定を1〜2行追加します。

   next-server IPADDRESS;
   filename "pxelinux.0";

もしTFTPサーバをこのDHCPサーバと同一のマシンで起動する場合は、next-serverの行はいりません。別のサーバの時だけ追加してください。その時は必ずIPADDESSにIPアドレスを指定すること。hostnameは×。なぜならPXEブートするマシンではこの情報を使う時点ではまだDNSを引けないからです。

また、WindowsサーバでDHCPサービスを起動している場合は、スコープオプション66(next-server)と67(filename)を追加してそれぞれ指定して下さい。

TFTPサーバの設定

TFTPサーバはインストールするだけでほぼ問題なく使えると思います。ただし、/etc/default/tftpd-hpaを一応確認しておいて下さい。

  • デーモン起動させるかどうかはお好みで(私はyesにしてます)
  • TFTPサーバの / は /var/lib/tftpboot/ です。
  • 動作確認のために、-vオプションを指定しておくことをオススメします。

NFSサーバ

この時点では特にNFSサーバでする設定はないですが、この後の便宜上、TFTPサーバを動かすマシンと同一のマシンで動かして下さい。PXEブートに必要なものが揃ってから触ります。

PXEブートイメージを用意する

/usr/lib/syslinux にある各種ブートイメージを /var/lib/tftpboot にコピーします(シンボリックリンクではTFTPサーバがうまく認識してくれませんでした)

# cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot
# cp /usr/lib/syslinux/menu.c32 /var/lib/tftpboot

次に、UbuntuのLiveCDのISOイメージをマウントしてファイルを取り出しておきます(ISOイメージは/tmpに置いてあると仮定)

# mkdir /var/lib/tftpboot/mnt
# mkdir /var/lib/tftpboot/ubuntu
# mount -o loop,ro /tmp/Ubuntu-9.10-Desktop-i386.iso /var/lib/tftpboot/mnt
# cp -pr /var/lib/tftpboot/mnt/casper /var/lib/tftpboot/ubuntu/casper
# cp -pr /var/lib/tftpboot/mnt/preseed /var/lib/tftpboot/ubuntu/preseed
# umount /var/lib/tftpboot/mnt
# rmdir /var/lib/tftpboot/mnt

NFSサーバの設定

ここでやっとNFSサーバの設定です。LiveCDのブートではカーネル以外のイメージをNFS経由で用意してあげる必要があります。そのために/etc/exportsに以下の設定を追加して下さい。

/var/lib/tftpboot/ubuntu        *(ro,no_subtree_check)

実は()内の設定についてはこれで十分なのかイマイチ自信がないです…が、ウチではこれで動いているのでよしとします(おい)

ブートイメージ用設定ファイルを作る

そして、ブートイメージ用設定ファイルを作成します。

mkdir /var/lib/tftpboot/pxelinux.cfg
touch /var/lib/tftpboot/pxelinux.cfg/default

このdefaultというファイルを編集します。とりあえず以下のように書いてみて下さい。

DEFAULT menu.c32
PROMPT 0
NOESCAPE 0
TIMEOUT 150
TOTALTIMEOUT 600

MENU TITLE PXE Boot Menu

LABEL Boot from Storage
        LOCALBOOT 0

LABEL [LIVE] Ubuntu 9.10 Desktop
        KERNEL /ubuntu/casper/vmlinuz
        APPEND initrd=/ubuntu/casper/initrd.lz file=/ubuntu/preseed/ubuntu.seed boot=casper netboot=nfs nfsroot=IPADDRESS:/var/lib/tftpboot/ubuntu quiet splash --

IPADDRESSはNFSサーバを動かすマシンのIPアドレスを指定して下さい。

最終確認

最後に、/var/lib/tftpboot下にあるファイル(マウントディレクトubuntu以下を除く)にotherのread権限がついていることを確認して下さい(この権限がないとTFTPサーバでファイルにアクセスできません)

# chmod o+r FILENAME

これでPXEサーバの設定は完了です。ブート用PCでネットワークブートしてみてください。Boot Menuが表示されるはずです。ちなみに"Boot from Storage"を選択するとローカルストレージにインストールされたOSが起動しますよ。