Debian 6.0 Live イメージを PXE 経由でブート
さいきんの Debian は Live 起動用イメージも用意しているらしい。
んで,Live 起動イメージはネットワークブート用のイメージも用意されている。
たとえば,http://ftp.jaist.ac.jp/pub/Linux/Debian-CD/6.0.0-live/i386/net/ をみるといくつかの種類 (GNOME 環境とか Rescue 環境とか) のネットブート用 Live イメージ (*.tar.gz) がおいてあることがわかる。
そこで,CentOS で作った PXE ブート環境に,選択肢のひとつとして Debian 6.0 Live を追加してみた。index.rb [nofuture.tv] が参考になる。
なお PXE 環境自体の構築については今回触れない。
ライブイメージディストリビューションのなかから debian-live-6.0.0-i386-standard.tar.gz を選択してみた。standard といいつつほとんど何も入ってないプレーンな状態だけど。
取得して展開すると,だいたい下記のようなディレクトリツリーになってる。
+ debian-live/ + tftpboot/ + tftpboot/debian-live/ + tftpboot/debian-install/
おおまかにいうと,tftpboot/
フォルダ以下が TFTP による初期ブートに必要なファイル群 (カーネルとか initramfs とか)。debian-live/
は initramfs が起動したあとに NFS 経由で読み込むルートイメージ。NFS 経由といっても生ルートツリーを NFS マウントするわけじゃなくてルートイメージが SquashFS 形式でおいてあるんでそれを NFS 経由で読み込んでマウントする感じ。
なお tftpboot/debian-install/
のほうは,Debian をネットワークインストールする際に使う TFTP ブートイメージで,今回は使用しなかった。
NFS 用ルートイメージの用意
前述のとおり debian-live/
以下が NFS 経由のルートイメージになるので適当な場所において NFS で公開する。
# cp -R debian-live /pub/linux/debian/squeeze
別にディレクトリはこの名前にする必要があるわけじゃない。自分の環境では上記のようにしているだけ。
上記例だと exports
はこんな感じ。
# cat /etc/exports /pub/linux/debian *(ro,all_squash,no_subtree_check,crossmnt) /pub/linux/debian/squeeze *(ro,all_squash,no_subtree_check,crossmnt)
んで NFS デーモンを再起動。
# service nfs restart
PXE用ファイルの用意
こんどは TFTP ブート用ファイルを /tftpboot/
以下の適当なディレクトリにコピー。
# cp -R tftpboot/debian-live /tftpboot/debian-squeeze
んで,Debian のドキュメントとかだと付属する pxelinux.cfg
をそのまま使うような形で紹介されてるんだけど,そうするといままで使用していた他の PXE ブート環境がなくなってしまってもったいないので要所だけコピーする。
Debian Live の場合,たとえば debian-live/i386/boot-screens/live.cfg
に PXE ブート用の設定が書いてある。
label live menu label Live kernel debian-live/i386/vmlinuz-2.6.32-5-486 append initrd=debian-live/i386/initrd.img-2.6.32-5-486 boot=live config netboot=nfs nfsroot=192.168.1.1:/srv/debian-live quiet
改行いれちゃってるけど,append 行のとこは1行で書く必要があると思う (以下も同様)。これをもとに,自分の pxelinux.cfg
に書き足す。
今回の例示だと以下のような内容。/tftpboot/
の下とか NFS 用ディレクトリに好き勝手な名前をつけたので,対応する部分を変更してある。
LABEL squeezelive MENU LABEL Debian 6.0 Live KERNEL debian-squeeze/i386/vmlinuz-2.6.32-5-486 APPEND initrd=debian-squeeze/i386/initrd.img-2.6.32-5-486 boot=live config netboot=nfs nfsroot=<NFS Server Address>:/pub/linux/debian/squeeze quiet
以上で無事 Debian 6.0 Squeeze の Live 環境が立ち上がった。あまりにプレーンなのでほんとにうまく動いてるか自信がないので今 GNOME 版の Live イメージをダウンロード中*1。
なお,Ubuntu でも同じようにすれば Live 環境の PXE 起動はできる。つっても違うところはいろいろあって
- TFTP ブート用のファイルは netboot.tar.gz というのをとってくる
- NFS 用ルートイメージは,Ubuntu インストール DVD をマウントしたものを NFS エクスポートすればそのまま使える
pxelinux.cfg
まわりは preseed とか casper まわりとかをAPPEND
行でいろいろ指定する必要がある
いろいろたいへんそうだけど,たいていの人は Ubuntu のライブイメージを手元に持ってるだろうから,ハードルは Debian より高くない。
Ubuntu の場合の pxelinux.cfg
例を下記においとく。
LABEL mavericklive MENU LABEL Ubuntu 10.10 Live KERNEL ubuntu-maverick/i386/casper/vmlinuz APPEND initrd=ubuntu-maverick/i386/casper/initrd.lz file=ubuntu-maverick/i386/preseed/ubuntu.seed boot=casper netboot=nfs nfsroot=<NFS Server Address>:/pub/linux/ubuntu/maverick quiet splash --
TFTP 用ファイルは /tftpboot/ubuntu-maverick/
においており,NFS 用ルートイメージが /pub/linux/ubuntu/maverick/
においてあるという前提だけど。当然ながら KERNEL 行や APPEND 行のファイルパスは適宜書き換えること。