いきなり始めちゃうかも
キョロキョロ…
あ、再開するとかいって1年経ってるじゃんアホだね〜。いやまぁ独自ドメイン取って別の所でブログツール使ってやるかな〜とか考えてもいたんで…考えてただけで結局始めませんでしたが。
今日はアレです、始めることを決意したんじゃなくて…ちょっとノウハウ的に描きたいことが出来たのでどっか場所ないかな〜と探していて思い出したんです、ここのことを。しょ〜がないねこいつは…。
まぁいいや、ちょいと書き留めときましょうか。
PXEブート環境を作る
さて、ここからの作業は全てサーバ用PCで行います。
PXEブート用の環境構築ですが、以下のものが必要になります。
このうち、DHCPサーバはもうネットワーク内に立ち上がってるかもしれませんね。その場合、もしかしたらそちらのDHCPのサービスは切ってもらう必要があるかもしれません。特にルータ内蔵のは。
ここからはほぼrootとしての作業しかありませんので、まずはsudoしときましょう。
$ sudo -s
まずは以下のようにしてパッケージをインストールしてください。
# aptitude install dhcp3-server tftpd-hpa tftp-hpa syslinux nfs-kernel-server
DHCPが既にサービスされていて、サービスしているサーバの設定を変更出来るなら、dhcp3-serverはいりません。
サーバのTips(Ubuntu 9.10〜)
設定を始める前に、サーバの起動・停止についてひとつ書いておきます。
実は、9.10から…かどうかははっきりしないんですが、RedHat系のような方法が可能になっています。
# service SERVICENAME [start|stop|restart|reload]
SERVICENAMEは/etc/init.d/ 下にあるファイル名そのままです。bashではTAB補完が効きます。いちいち/etc/init.d下のスクリプトを直接起動しなくてよくなったのはいいですねぇ。
各種サーバは設定を変更したらこれで再起動を行って下さい。
DHCPサーバの設定
まずDHCPから行きます。一般的なDHCPの設定内容は割愛しまして、PXEブートに必要なところだけ。恐らくDHCPでリースするIPの範囲を指定するrange行があるセクションがあるはずです。そこにPXEブートに必要な設定を1〜2行追加します。
next-server IPADDRESS; filename "pxelinux.0";
もしTFTPサーバをこのDHCPサーバと同一のマシンで起動する場合は、next-serverの行はいりません。別のサーバの時だけ追加してください。その時は必ずIPADDESSにIPアドレスを指定すること。hostnameは×。なぜならPXEブートするマシンではこの情報を使う時点ではまだDNSを引けないからです。
また、WindowsサーバでDHCPサービスを起動している場合は、スコープオプション66(next-server)と67(filename)を追加してそれぞれ指定して下さい。
TFTPサーバの設定
TFTPサーバはインストールするだけでほぼ問題なく使えると思います。ただし、/etc/default/tftpd-hpaを一応確認しておいて下さい。
- デーモン起動させるかどうかはお好みで(私はyesにしてます)
- TFTPサーバの / は /var/lib/tftpboot/ です。
- 動作確認のために、-vオプションを指定しておくことをオススメします。
PXEブートイメージを用意する
/usr/lib/syslinux にある各種ブートイメージを /var/lib/tftpboot にコピーします(シンボリックリンクではTFTPサーバがうまく認識してくれませんでした)
# cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot # cp /usr/lib/syslinux/menu.c32 /var/lib/tftpboot
次に、UbuntuのLiveCDのISOイメージをマウントしてファイルを取り出しておきます(ISOイメージは/tmpに置いてあると仮定)
# mkdir /var/lib/tftpboot/mnt # mkdir /var/lib/tftpboot/ubuntu # mount -o loop,ro /tmp/Ubuntu-9.10-Desktop-i386.iso /var/lib/tftpboot/mnt # cp -pr /var/lib/tftpboot/mnt/casper /var/lib/tftpboot/ubuntu/casper # cp -pr /var/lib/tftpboot/mnt/preseed /var/lib/tftpboot/ubuntu/preseed # umount /var/lib/tftpboot/mnt # rmdir /var/lib/tftpboot/mnt
NFSサーバの設定
ここでやっとNFSサーバの設定です。LiveCDのブートではカーネル以外のイメージをNFS経由で用意してあげる必要があります。そのために/etc/exportsに以下の設定を追加して下さい。
/var/lib/tftpboot/ubuntu *(ro,no_subtree_check)
実は()内の設定についてはこれで十分なのかイマイチ自信がないです…が、ウチではこれで動いているのでよしとします(おい)
ブートイメージ用設定ファイルを作る
そして、ブートイメージ用設定ファイルを作成します。
mkdir /var/lib/tftpboot/pxelinux.cfg touch /var/lib/tftpboot/pxelinux.cfg/default
このdefaultというファイルを編集します。とりあえず以下のように書いてみて下さい。
DEFAULT menu.c32 PROMPT 0 NOESCAPE 0 TIMEOUT 150 TOTALTIMEOUT 600 MENU TITLE PXE Boot Menu LABEL Boot from Storage LOCALBOOT 0 LABEL [LIVE] Ubuntu 9.10 Desktop KERNEL /ubuntu/casper/vmlinuz APPEND initrd=/ubuntu/casper/initrd.lz file=/ubuntu/preseed/ubuntu.seed boot=casper netboot=nfs nfsroot=IPADDRESS:/var/lib/tftpboot/ubuntu quiet splash --
Ubuntu9.10 DesktopのLiveCDを日本環境にしてPXEブートする
日本環境にカスタマイズする
さて、無事にLiveCDでのOS起動に成功したでしょうか?そうしたら次に日本環境にカスタマイズしましょう。
syslinuxのカスタマイズ
PXE Boot Menuで項目を選択しTABキーを押すと、定義されているコマンドラインを編集することが出来ますが、この環境でのキーボードレイアウトは英語配列になっています。日本語キーボードで使っていると記号の入力で苦労しますよね?これをカスタマイズしてしまいましょう。
それには、以下のページからjp106.kbdというファイルをダウンロードして/var/lib/tftpboot/ に置きます。otherにread属性を与えることを忘れずに。
http://sourceforge.jp/projects/jambuilder/releases/8054
そして、/var/lib/tftpboot/pxelinux.cfg/defaultに以下の一行を追加します。DEFAULT行のすぐ下辺りがいいでしょう。
KBDMAP jp106.kbd
これでPXE Boot Menu上で日本語キーボードが有効になるはずです。"@"などを入力して確認して下さい。
LiveCDイメージのカスタマイズ
一度起動してもらったのでお分かりかと思いますが、メニューなどが英語表記になっていること以外に、以下のような利用上の不都合があります。
これらを解決するために、LiveCDイメージをカスタマイズします。まずは以下のパッケージをインストールしてください。
# aptitude install squashfs-tools
イメージの展開
LiveCDのイメージはsquashfsという読み出し専用のファイルシステムのイメージになっていて、どこかにマウントして弄って書き戻す、ということが出来ません。必ず展開してから再圧縮、という手順になります。
まずはイメージを展開します。展開したファイル群は/tmp/squashfs-rootに格納されます。
# cd /tmp # unsquashfs /var/lib/tftpboot/ubuntu/casper/filesystem.squashfs
それなりに時間がかかります。尚、この作業は必ずroot環境で行って下さい。でないとキャラクタデバイスの展開に失敗します。
設定ファイルの変更
イメージの展開が完了したら、設定ファイルを編集します。
キーレイアウトの変更
/tmp/squashfs-root/etc/default/console-setupの下の方にある設定を以下のように変更します。
XKBMODEL="jp106" XKBLAYOUT="jp"
イメージを再圧縮する
変更を反映したイメージを作成するために再圧縮しましょう。
# cd /tmp # mksquashfs squashfs-root filesystem.squashfs
展開よりも数倍の時間がかかります。気長に待ちましょう。
イメージを再配置する
さて、再圧縮が完了したイメージを再配置しましょう。一応オリジナルは取っておいた方がいいですね。一緒にファイル属性も変更しておきます。
# mv /var/lib/tftpboot/ubuntu/casper/filesystem.squashfs /var/lib/tftpboot/ubuntu/casper/filesystem.squashfs.orig # chmod 444 /tmp/filesystem.squashfs # mv /tmp/filesystem.squashfs /var/lib/tftpboot/ubuntu/casper/filesystem.squashfs
これで完了しました!もう一度ブート用PCをブートしてみてください。変更が反映されているはずです。
おまけ
LiveCDをマウントすると、installディレクトリにMemtest86+のブートイメージ、mt86plusなどがあります。これを/var/lib/tftpbootにコピーして、/var/lib/tftpboot/pxelinux.cfg/defaultへ以下を追加してやるとブートできます。
LABEL Memtest86+ KERNEL mt86plus
ブート後いきなりメモリチェックが始まります。動作が怪しいマシンをチェックする時などに重宝しますよ。
同じような方法でTrueImageなんかも起動できるようです。HDDのデュプリケートやリストアなどに便利かも。