PXEにハマッタ

追記(2009/02/06)
このページを書いた頃とはLinuxの環境も大分変ったが、最近のUbuntuであれば、いとも簡単にネットワークブートできる。(参考:“ライブUbuntuをネットワークブートする − ディスクレスサーバ構築”、更に参考:“UbuntuとVMwareでThin Clientを作ってみた”)


追記(2008/01/29)
PXEによるディスクレス・クライアント(総集編)」にまとめた。もう一度、最初からやってみた。


追記(2008/01/21)
PXEサーバの設定」で更に詳しくトライしたので、PXE全般についてはそちらを参照してください。PXEを使ったLinuxのインストールに関してはこのページの方がいいかも。

今まで数多くのマシンにOSをインストールはしてきたが、ネットワーク経由のブートでOSをインストールしたことは無かった、というか必要もなかったし、出来るだけ避けてきた。まずはPXE(pixie、ピクシーと発音する、ということも今回初めて知った)を調べてみた。

PXEは基本的にはtftpを使ってブートするファイルをダウンロードしてマシンを立ち上げる仕組みだ。PXEを使うにはtftpは勿論だがDHCPサーバ、PXEサーバが必要になる。
また、PXEは単に最初の実行ファイルをブールするのに利用して、インストーラ自身はNFSFTP、HTTPを使ってネットからファイルをダウンロードするので、これらのインストールまでLAN経由で行うためにはNFSサーバやFTPサーバなどを立てる必要がある。思ったよりも大がかりである。

ただ、今回の場合は、インストール用のカーネル/ファイルシステムさえブートできれば、あとはUSBにCDドライブをつないでおいて、インストーラ本体の作業はCDから行えるのでNFSサーバやFTPサーバを立てる必要はなさそうだ。要はDHCPサーバとtftpサーバ、PXEサーバの設定さえすれば何とかなるか。

DHCPに関してはブロードバンドルータで既にサービスをしているので、これはパスできるのか、と思っていたら、DHCPサーバ自身がPXEクライアントに対してtftpでダウンロードするファイルの情報を渡す、という必要がありこれも(一旦ブロードバンドルータDHCPサービスを止めて)別途、Linuxでサービスする必要があった。

手順とすれば:
1. DHCPサーバのインストール/設定/起動
2. PXE(syslinux)のインストール
3. tftpサーバのインストール/設定/起動
となる。

DHCPサーバは通常の設定ほとんど同じ。/etc/dhcp.confにオマジナイを数行追加するだけ。dhcp.confは最初は空なので /usr/share/doc//dhcp-3.0.5/dhcpd.conf.sample からサンプルを/etcにコピーして次の「##### 追加 #####」の部分を追加した。

# cp /usr/share/doc//dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {

# --- default gateway
        option routers                  192.168.1.1;
        option subnet-mask              255.255.255.0;

        option nis-domain               "localdomain";
        option domain-name              "localdomain";
        option domain-name-servers      192.168.1.1;

        option time-offset              -18000; # Eastern Standard Time
#       option ntp-servers              192.168.1.1;
#       option netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;

        range dynamic-bootp 192.168.1.128 192.168.1.254;
        default-lease-time 21600;
        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address
#       host ns {
#               next-server marvin.redhat.com;
#               hardware ethernet 12:34:56:78:AB:CD;
#               fixed-address 207.175.42.254;
#       }

##### 追加 #####
        allow booting;
        allow bootp;
        class "pxeclients" {
                match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
                next-server 192.168.1.123;
                filename "/linux-install/pxelinux.0";
        }
##### 追加 #####
}
# service dhcpd restart

次はtftpサーバーの設定。
まず、/etc/xinetd.d/tftp を編集して

        disable                 = no

にしてからxinetdを再起動する。

# service xinetd restart

次にPXEブート用のカーネルをFC6のDVDから持ってきて /tftpboot/linux-install に置く。

# cp /cdrom/images/pxeboot/vmlinuz /tftpboot/linux-install
# cp /cdrom/images/pxeboot/initrd.img /tftpboot/linux-install

当たり前の話だがここで使うイメージはこれからインストールしようとするマシンのアーキテクチャにあったものを持ってくる。(Inspironはx86_64だが、これからインストールするのはDynabookSSなのでi386を予めネットワークからダウンロードしてDVDを作っておいた。)

/tftpboot/inux-install/pxelinux.cfg/default を作成する。

default fc6
# prompt 1
# timeout 100

label fc6
kernel vmlinuz
append load initrd=initrd.img devfs=nomount

これでクライアント(DynabookSS 3480)の方でBIOS設定でPXEブートを設定すればLinuxのブートができる。

PXEでインストール用のLinuxが立ち上がった後、ネットワークだけでインストールするためにはインストールDVDをネットワーク経由で見えるようにNFSサーバやWebサーバを立てる必要があるが、今回は、インストール用Linuxさえブート出来れば、あとはUSB経由のDVDドライブが認識できるので、以降の手順はDVDからの読み込みとした。