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は単に最初の実行ファイルをブールするのに利用して、インストーラ自身はNFSやFTP、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からの読み込みとした。