Debian 6.0 Live イメージを PXE 経由でブート

さいきんの DebianLive 起動用イメージも用意しているらしい。

んで,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.cfgPXE ブート用の設定が書いてある。

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 行のファイルパスは適宜書き換えること。

*1:GNOME 版できちんと GNOME があがったので手順として間違ってないことを確認した。しかしいまや Debian も Live 環境からインストールできるのね。怖くてためしてないけど。