PXEでメニューを表示する。
PXEをインストールするときにに導入するsyslinuxには色々と面白い起動用ソフトがある。これらを利用するためには先ずはsyslinuxパッケージを導入する。
[root@vmserver ~]# yum install syslinux
Linux(Fedora)にPXEサーバをインストールするには2つの方法がある。
1の方法でPXEサーバを実現する際にはsyslinuxのパッケージは既に導入している筈である。2の方法ではsystem-config-netbootというパッケージを導入する時点でPXEサーバもインストールされる。しかし、この場合はsyslinuxのパッケージは導入されないので、PXEでメニューを使いたい場合には別途syslinuxを導入する必要がある。
パッケージを導入したらsyslinuxのファイル群を確認する。
[root@vmserver ~]# ls /usr/lib/syslinux chain.c32 ethersel.c32 mbr.bin pxelinux.0 syslinux-nomtools com32 isolinux.bin memdisk sys2ansi.pl vesamenu.c32 copybs.com isolinux-debug.bin menu.c32 syslinux cpuidtest.c32 keytab-lilo.pl mkdiskimage syslinux.com dmitest.c32 mboot.c32 pcitest.c32 syslinux.exe
このディレクトリの中にはPXEのNBP(ネットワークブートプログラム)である"pxelinux.0"も含まれている。このディレクトリの中にある"menu.c32"がキャラクタベースのメニュー選択を実現するソフトウェアで、"vesamenu.c32"はVESA規格のグラフィックスを使ったメニュを実現するソフトウェアだ。
メニューを出してみる
キャラクタベースのメニューで十分なのでmenu.c32を使う。まず、PXEブートのルートディレクトリ(/tftpboot/linux-install/)の下に"syslinux"というディレクトリを作り、そこへmenu.c32をにコピーする。尚、PXEブートの環境は既に構築されていることを前提として話を進めるので、PXEブートの基本的な環境については「PXEによるディスクレス・クライアント(総集編)」を参照のこと。
[root@vmserver ~]# mkdir /tftpboot/linux-install/syslinux/ [root@vmserver ~]# ls -F /tftpboot/linux-install/ Fedora-8-Diskless/ msgs/ pxelinux.0 pxelinux.cfg/ syslinux/ [root@vmserver ~]# cp /usr/lib/syslinux/menu.c32 /tftpboot/linux-install/syslinux/ [root@vmserver ~]# ls /tftpboot/linux-install/syslinux/ menu.c32
ここでPXEブートのルートディレクトリ"/tftpboot/linux-install/"の下のディレクトリやファイルについて簡単に説明しておく。"Fedora-8-Diskless"というディレクトリにはディスクレス・クライアントを起動するためのLinuxのカーネル(vmlinuz)とRAMイメージ(initrd.img)が入っている。"msgs"ディレクトリには各種メッセージが入っているが今回は使わない。"pxelinux.0"はPXEのブートローダ(NBP)である。
"pxelinux.cfg"ディレクトリにはPXEを利用してブートする際の設定ファイルが入っている。
[root@vmserver ~]# cd /tftpboot/linux-install/pxelinux.cfg/ [root@vmserver pxelinux.cfg]# ls C0A80064 default pxeos.xml
"C0A80064"はIPアドレス192.168.0.100を16進表示したファイル名で、IPアドレス192.168.0.100のマシンをPXEブートする時の設定が記述されている。現在の内容は次のようになっている。
[root@vmserver pxelinux.cfg]# cat C0A80064 default Fedora-8-Diskless label Fedora-8-Diskless kernel Fedora-8-Diskless/vmlinuz append initrd=Fedora-8-Diskless/initrd.img root=/dev/ram0 init=disklessrc NFSROOT=192.168.0.1:/tftpboot/f8 ramdisk_size=20920 ETHERNET=eth0 SNAPSHOT=
これで、自動的に/tftpboot/linux-install/Fedora-8-Disklessの下にあるvmlinuzをカーネルとしてブートすることを指定している。今回はこのファイルを次のように変更する。
[root@vmserver pxelinux.cfg]# cat C0A80064 default syslinux/menu.c32 label Fedora-8-Diskless kernel Fedora-8-Diskless/vmlinuz append initrd=Fedora-8-Diskless/initrd.img root=/dev/ram0 init=disklessrc NFSROOT=192.168.0.1:/tftpboot/f8 ramdisk_size=20920 ETHERNET=eth0 SNAPSHOT=
1行目の"default Fedora-8-Diskless"を"default syslinux/menu.c32"に変更する。つまりPXEブートのルートパス(この場合は、/tftboot/linux-install/)にあるsyslinux/menu.c32を指定している。(".c32"を省略して単に"syslinux/menu"だけでもOK。)
さて、この設定でクライアントをPXEブートしてみると、直ぐに次のような画面が表れる。
キャラクタベースのメニューでどのブート設定を選ぶか可能になっているが、残念ながら今はメニューのエントリーには"Fedora-8-Diskless"だけがある。この状態でタブ(TAB)を押すと"Fedora-8-Diskless"についてのブートのパラメータを変更できる。
メニューで起動するプログラムを選択する
メニューのエントリーが1つでは面白くないので次のような構成にする。
- Fedora-8-Diskless Fedora 8のディスクレスクライアントとして起動
- Fedora-8-Install Fedora 8のインストール用Linuxカーネルを起動
- Memory Test メモリテストプログラムを起動
- Local Boot ローカルなHDDから起動
まず、Fedora 8のインストール用のLinuxカーネルやメモリテスト用のソフトウェアをPXEブートのルートバス/tftpboot/linux-installへコピーする。インストール用カーネルはFedora 8のインストール用DVDの中の"images/pxeboot/"というディレクトリの下にある。ここにあるカーネルとRAMイメージをFedora-8-Installというディレクトリへコピーする。
[root@vmserver ~]# mkdir /tftpboot/linux-install/Fedora-8-Install [root@vmserver ~]# ls -F /media/Fedora\ 8\ x86_64\ DVD/images/pxeboot/ initrd.img README TRANS.TBL vmlinuz [root@vmserver ~]# cp /media/Fedora\ 8\ x86_64\ DVD/images/pxeboot/[iv]* /tftpboot/linux-install/Fedora-8-Install/ [root@vmserver ~]# ls -F /tftpboot/linux-install/Fedora-8-Install/ initrd.img vmlinuz
次にメモリテスト用のソフトウェアはFedora 8のLiveCDの"isolinux/"というディレクトリに入っている。LiveCDの"isolinux/memtest"というソフトウェアをコピーして来る。(新しいサブディレクトリを作ってもいいが、ディレクトリの数が増えるので、Fedora-8-Installへコピーする。)
[root@vmserver ~]# cp /media/Fedora-8-Live-x86_64/isolinux/memtest /tftpboot/linux-install/Fedora-8-Install/ [root@vmserver ~]# ls -F /tftpboot/linux-install/Fedora-8-Install/ initrd.img memtest vmlinuz
起動するソフトウェアが揃ったところで、PXEの設定ファイルを次のように変更する。
[root@vmserver ~]# cat /tftpboot/linux-install/pxelinux.cfg/C0A80064 default syslinux/menu.c32 label Fedora-8-Diskless kernel Fedora-8-Diskless/vmlinuz append initrd=Fedora-8-Diskless/initrd.img root=/dev/ram0 init=disklessrc NFSROOT=192.168.0.1:/tftpboot/f8 ramdisk_size=20920 ETHERNET=eth0 SNAPSHOT= label Fedora-8-Install kernel Fedora-8-Install/vmlinuz append initrd=Fedora-8-Install/initrd.img devfs=nomount label Memory Test kernel Fedora-8-Install/memtest label local localboot 1
"label"の2番目がインストール用のLinuxカーネルを指定してブートする指定、3番目がメモリテスト用ソフトウェアを起動する指定、そして4番目の"local"がローカルHDDからOSをブートする指定となる。これでクライアントPCをPXEブートした画面が次である。
次の画面はこのメニューから"Memory Test"を選んで起動した画面である。
タイムアウトを設定する
コンフィグファイルでは"timeout"で一定時間後入力が無ければ指定したプログラムも起動できる。例えば、上の例にtimeoutを付け加えてみる。
[root@vmserver ~]# cat /tftpboot/linux-install/pxelinux.cfg/C0A80064 default syslinux/menu.c32 timeout 100 ontimeout Memory-Test label Fedora-8-Diskless kernel Fedora-8-Diskless/vmlinuz append initrd=Fedora-8-Diskless/initrd.img root=/dev/ram0 init=disklessrc NFSROOT=192.168.0.1:/tftpboot/f8 ramdisk_size=20920 ETHERNET=eth0 SNAPSHOT= label Fedora-8-Install kernel Fedora-8-Install/vmlinuz append initrd=Fedora-8-Install/initrd.img devfs=nomount label Memory-Test kernel Fedora-8-Install/memtest label local localboot 1
こうすると、10秒後(timeoutの引数は1/10秒単位)に"Memory-Test"を起動する。(ここで先の例と比べて"Memory Test"を"Memory-Test"に変えた。ブランクがあるとontimeoutの指定が上手く出来なかった。)
その他にも
/usr/lib/syslinuxにはCPUやボードをテストするプログラムもあるので必要に応じて使える。
副作用
system-config-netbootユーティリティで生成された /ftfpboot/linux-install/pxelinux.cfg/C0A80064 といったファイルを手動で修正するので、その後、system-config-netbootユーティリティを使って設定し直そうとすると警告メッセージが出て、ファイルの内容が元に戻ってしまう。従って、その後再度、これらのファイルを手動で設定する必要が出てくるのでバックアップをとって置いた方がいい。
PXEサーバが1台あると便利
ネットワークの中の1台(Linuxマシン)にPXEサーバをインストールしておくとイザという時に便利だ。*1 例えば、ネットワークブートを利用して
- マシンの調子が悪くてメモリテストなどをしたい場合
- HDDから起動しなくなって診断用にLinuxをブートしたい場合
- 一時的にOSを変えて使いたい場合
- CD/DVDドライブの無いマシンにLinuxをインストールした場合
などなどである。
syslinuxというパッケージにはPXEブートで使える色々と便利な起動用ソフトウェアがあるので、それを使えばメニュー形式で、ブートするソフトウェアも選択できる。
(PXEのインストールに関しては「PXEによるディスクレス・クライアント(総集編)」や「PXEサーバの設定」を参照のこと。「総集編」の方が後に書いたので、まとまっていると思うが、PXEサーバのインストールというよりはディスレスサーバのインストールについて書いてある。)