いきなり始めちゃうかも

キョロキョロ…

あ、再開するとかいって1年経ってるじゃんアホだね〜。いやまぁ独自ドメイン取って別の所でブログツール使ってやるかな〜とか考えてもいたんで…考えてただけで結局始めませんでしたが。

今日はアレです、始めることを決意したんじゃなくて…ちょっとノウハウ的に描きたいことが出来たのでどっか場所ないかな〜と探していて思い出したんです、ここのことを。しょ〜がないねこいつは…。

まぁいいや、ちょいと書き留めときましょうか。

PXEブート環境を作る

さて、ここからの作業は全てサーバ用PCで行います。

PXEブート用の環境構築ですが、以下のものが必要になります。

  • DHCPサーバ
  • TFTPサーバ
  • NFSサーバ
  • syslinux
  • Ubuntu LiveCDのISOイメージ(マウントしたCD-ROMでも可)

このうち、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オプションを指定しておくことをオススメします。

NFSサーバ

この時点では特にNFSサーバでする設定はないですが、この後の便宜上、TFTPサーバを動かすマシンと同一のマシンで動かして下さい。PXEブートに必要なものが揃ってから触ります。

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 --

IPADDRESSはNFSサーバを動かすマシンのIPアドレスを指定して下さい。

最終確認

最後に、/var/lib/tftpboot下にあるファイル(マウントディレクトubuntu以下を除く)にotherのread権限がついていることを確認して下さい(この権限がないとTFTPサーバでファイルにアクセスできません)

# chmod o+r FILENAME

これでPXEサーバの設定は完了です。ブート用PCでネットワークブートしてみてください。Boot Menuが表示されるはずです。ちなみに"Boot from Storage"を選択するとローカルストレージにインストールされたOSが起動しますよ。

Ubuntu9.10 DesktopのLiveCDを日本環境にしてPXEブートする

ということでこんなことやってました。

UbuntuのインストールCDってLiveCDにもなってて、CD入れて直接ブートできるんですよね。それをPXEブート環境に持ってって簡単にブート出来ちゃいます。

でも日本の環境には必ずしも合っていなくて…カスタマイズすると幸せになれるんですが、本気で日本語化とかすると手間ばかりかかって幸せがすり減るので、最低限に留めて楽に幸せを掴もう!って寸法です。

ちなみに日本語化ではありません。あくまで日本化です。以下の方針で。

ちなみに想定する環境は以下の通り。

  • サーバ用PC
    • OSはUbuntu(9.10推奨)
    • sudo出来るアカウント
  • ブート用PC
    • 日本向けPC
    • 日本で使う
    • ネットワークブート可能なBIOSを搭載している

日本環境にカスタマイズする

さて、無事に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イメージのカスタマイズ

一度起動してもらったのでお分かりかと思いますが、メニューなどが英語表記になっていること以外に、以下のような利用上の不都合があります。

  • キーレイアウトが英語配列
  • ブート用PCを元々Windowsで使っていた場合
    • 時刻が9時間ずれている
    • 正しい時刻に変更して終了すると、Windows起動時に時間が9時間ずれている

これらを解決するために、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"
タイムゾーンの変更

以下のようにして、タイムゾーンを東京にします。

# cp /tmp/squashfs-root/usr/share/zoneinfo/Asia/Tokyo /tmp/squashfs-root/etc/localtime

また、このままだとシャットダウン時にUTC時間をハードウェアクロックに設定してしまいます(これがWindowsで時間がずれた原因です)ので、これを抑止します。/tmp/squashfs-root/etc/default/rcSの以下の設定を変更して下さい。

UTC=no

これで設定の変更は完了です。

イメージを再圧縮する

変更を反映したイメージを作成するために再圧縮しましょう。

# 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のデュプリケートやリストアなどに便利かも。

最後に

というわけで、極力簡単に日本環境化してみました。日本環境化ではないのは…面倒なんですよ、パッケージの追加とかしなきゃならないので。chrootして実際にaptでインストールとかしなきゃいけませんから…。

興味がある人、余力のある人はチャレンジしてみて下さい。ググればそれなりに情報はあります。