EeePC 900-x に CentOS5.3 をPXEブートでインストール #1
自宅サーバにしてるThinkpad t23の液晶パネルが完全死亡したので、EeePC 900-xに移行しました。
EeePC 900-xいいね。小さい、省電力、SSD、安い。自宅サーバにぴったりだ。
入れるOSは今使ってるのと同じCentOS5.3。900-xには光学ドライブなんてついてないので、普通はUSB外付けドライブからブートしてインストールするんだろうけど、今回は気合でPXEブートでインストールしてみた。いや、外付けドライブを持っていないわけではないんだけど、単にやってみたかったんだ。
CentOSに900-xのNICドライバが入っていないので、正直めんどくさいよ。動かしたいだけだったらここからの作業はお勧めしない。おとなしく外付けドライブ使いましょう。
- 構成
pxeサーバ(現サーバ): thinkpad23, CentOS5.3, 192.168.11.10
インストール先(新サーバ): EeePC 900-X
ブロードバンドルータを中心にした、192.168.11.0/24 なLAN内でやってます。
- 前準備
現サーバの方は、カーネルが既に2回ほど上がっているので、一番古いカーネル(最初にDVDインストールイメージにはいってたやつ)で再起動しておく。
新サーバはBIOSの設定を変更。OnBoard LAN Boot ROM: Disable > Enable。Boot Booster,Quick Boot: Enable > Disable。ブートデバイスシーケンスの先頭をネットワークブートに変更。
- pxeサーバの準備
dhcpdとかtftpdいれたりとか。この辺はググればいくらでも出てくるので書かない。
tftpの公開ディレクトリは以下のようにした。
/tftpboot/ |-- CentOS-5.3 |-- pxelinux.0 |-- pxelinux.cfg | `-- default `-- syslinux `-- menu.c32
menu.c32は/usr/lib/syslinux/にあるのをコピってます。ブート画面がテキストのメニューになるので素敵です。
pxelinux.cfg/defaultはこんな感じ。ローカルブート出来るようにてしておくと、後々便利。
default syslinux/menu.c32 label CentOS-5.3 kernel CentOS-5.3/vmlinuz append load initrd=CentOS-5.3/initrd-atl2plus_inst.img devfs=CentOS-5.3/nomount end label Local LOCALBOOT 0
インストールイメージは、現サーバ作成時に使ったDVDイメージをt23の内臓ドライブからマウントして、apacheで公開。
# mkdir /mnt/iso # mount -o loop -t iso9660 /dev/cdrom /mnt/iso # cat<<EOT > /etc/httpd/conf.d/pxeboot.conf >Alias /CentOS-5.3 "/mnt/iso" ><Directory /mnt/iso> > Options MultiViews Indexes FollowSymLinks > Order deny,allow > Deny from all > Allow from 192.168.11.0/24 127.0.0.1 ></Directory> >EOT # service httpd restart
- initrdの準備
普通なら、ここで
# cp /mnt/iso/images/pxeboot/{initrd.img,vmlinuz} /tftpboot/CentOS-5.3/
とやって、クライアントをブートさせれば終了〜。なんだけど、initrdに900-XのNICのドライバが入ってないので、作り直さないといけない。
900-xのNICは、Attansic L2。ドライバのソースはここに落ちてる > http://ubuntuforums.org/showthread.php?t=429845。
まずは、現サーバ上でインストール。
# cd /usr/local/src/ # unzip L2-linux-driver # cd L2-linux-driver/ # make && make install
次に、DVDに入ってるpxeブート用のinitrdを展開。
# cd /usr/local/src # mkdir -p myimages/initrd_pxeboot # cd myimages/initrd_pxeboot # gzip -dc /mnt/iso/images/pxeboot/initrd.img | cpio -iuvmd # ls bin dev etc init modules proc sbin selinux sys tmp var
んで、中を弄る。ここは結構ハマった。最近のinitrdって造りが大分昔と違うので、ググっても役に立たない情報ばかり。結局、職場の先輩に助けを求めたら一瞬で調べてくれた。
まず、modules/modules.cgzの中にドライバが閉じ込められてるらしいので、これも展開。
# gzip -dc modules/modules.cgz | cpio -iuvmd ~ snip ~ 2.6.18-128.el5/i686/atp870u.ko 2.6.18-128.el5/i686/bnx2.ko 24300 blocks #
この中に、さっきコンパイルしたドライバを追加する。
# cp /lib/modules/`uname -r`/kernel/drivers/net/atl2/atl2.ko ./`uname -r`/i686/
で、固めなおす。
# find `uname -r` | cpio --quiet -c -o | gzip -c > modules/modules.cgz # rm -rf `uname -r`
コンフィグを編集する。編集するのはmodules/{module-info,modules.alias}の2つ。
modules-infoの方は大した内容じゃない。
# cat <<EOT >> modules/module-info >atl2 > eth > "Attansic L2 ethernet driver" >EOT #
modules.aliasはPCIのid(?)を書きこまないといけないので、それを調べて。
# depmod -a # modinfo atl2 ~ snip ~ alias: pci:v00001969d00002048sv*sd*bc*sc*i* ~ snip ~ # echo 'alias pci:v00001969d00002048sv*sd*bc*sc*i* atl2' >> modules/modules.alias
これで工事は終わり。
固めて、tftpの公開ディレクトリにつっこみます。カーネルも。
# find . | cpio --quiet -c -o| gzip -c > /tftpboot/CentOS-5.3/initrd-atl2plus_inst.img # cp /mnt/iso/images/pxeboot/vmlinuz /tftpboot/CentOS-5.3/
お疲れ様(というか疲れた)。これで準備は完了。
ブロードバンドルータのDHCP機能をoffって、新サーバを起動したらブートメニューが出るので、CentOS-5.3を選択。インストーラが起動するので、現サーバに置いたパッケージをHTTPで引っ張ってインストールです。
だがしかし、実はこれで終わりではない。新サーバにインストールしたOSには当然atl2ドライバが入って無いので、起動してもnetworkが立ち上がらないのだ。改めてインストールする必要がある。
ここでも、当然ながら外付け光学ドライブは使わない。ここで使ってしまっては負けだ。
続く。