今日はベニヤサーバにOSを入れてみた(my homebrewed cluster part.2)

  1. 今日はOSを入れるぜ

前回まででハードウェアは大体組めた。現状は以下のような構成になっている。

draw100104-1

まずはCentOSでpxeboot&kickstartでOSのインストールをできるだけ省力化しようと努力してみた。

  1. インストールサーバの準備

2.1. CentOS5.4をVirtualBox上の仮想サーバとして作る

Macbookから、“ssh -X user@opensolaris"としてログインし、VirtualBoxを起動してXをMacbookに飛ばしてくる。Mac超便利!とりあえずディスクサイズは最大20GBの可変サイズで作成。

作成後は一旦シャットダウン。ネットワークデバイスをブリッジ接続にしてブート。

2.2. インストール用リポジトリを展開する

インストールできたら、インストールに使用したDVDから、ネットワークインストール用に内容をコピーする。

mount -o ro /dev/cdrom /media/cdrom # mkdir -p /var/www/html/dist # cd /media/cdrom # tar cf - . | ( cd /var/www/html/dist ; tar xvf - ) ブラウザからhttp://virtualserver/dist/で内容が見れることを確認。

2.3. TFTPサーバを構成する

Red Hat(CentOS)にはsystem-config-netbootというGUIツールで比較的容易にTFTPサーバを構成できるツールがあるのでこれを使ってみる。

yum –disablerepo=* –enablerepo=c5-media install system-config-netboot* で、インストールしたら"system-config-netboot"で起動。

sc100104-1

“Network Install"を選択。

sc100104-2

[Operating system identifier], [Description]には識別可能な文字列 [Select protocol for installation]は"HTTP” [kickstart]は(とりあえず今は)空欄 [Server IP Address]にはHTTPサーバのIPアドレス(この場合は172.16.0.1)※OKボタンを押した時点でここにHTTPで到達可能なようにしておくこと。 [Location]はDocumentRootからの相対アドレス

を書く。で、OK。

次はクライアント側。

sc100104-3

ここはクライアント側のIPアドレスだけ入れてOK。

できあがったtftpdの設定は以下のようになっている。

cat /tftpboot/linux-install/pxelinux.cfg/default default local timeout 100 prompt 1 display msgs/boot.msg F1 msgs/boot.msg F2 msgs/general.msg F3 msgs/expert.msg F4 msgs/param.msg F5 msgs/rescue.msg F7 msgs/snake.msg label local localboot 1 label 0 localboot 1 label 1 kernel nodeA/vmlinuz append initrd=nodeA/initrd.img ramdisk_size=8419 method=http://172.16.0.1/dist ip=dhcp ここにある"nodeA/vmlinuz”, “nodeA/initrd.img"はそれぞれ”/tftpboot/linux-install"からの相対パスになっている。

2.4. DHCPサーバを構成する

次にDHCPサーバを構成する。まずはインストール。

yum –disablerepo=* –enablerepo=c5-media install dhcp # cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf cp: overwrite `/etc/dhcpd.conf’? y /etc/dhcpd.confを編集する。赤字部分がpxebootに関係する部分。

ddns-update-style interim; ignore client-updates; allow booting; allow bootp; default-lease-time 21600; max-lease-time 43200; subnet 172.16.0.0 netmask 255.255.0.0 { option routers 172.16.0.1; option subnet-mask 255.255.0.0; range 172.16.10.1 172.16.10.254; default-lease-time 21600; max-lease-time 43200; class “pxeclients” { match if substring(option vendor-class-identifier, 0, 9) = “PXEClient”; next-server 172.16.0.1; filename “linux-install/pxelinux.0”; } } ここまできたら、dhcpdとtftpdを動かす。

chkconfig dhcpd on # /etc/init.d/dhcpd start # chkconfig tftp on # chkconfig xinetd on # /etc/init.d/xinetd restart クライアント側は事前にPXE起動できるようBIOS設定しておく。キーボード、ネットワークケーブル、VGAモニタをつけて電源を入れる。以下のような画面が出れば成功。[1]キーをタイプして"nodeA"のブートプロセスに移行する。

cimg1358

ただしこのままブートプロセスを進めると、以下のように通常のインストールになってしまうので、次はkickstartの設定を追加する。

cimg1359

2.5. kickstartファイルを用意する

kickstartファイルはインストールサーバをインストールした時に/rootにできているanaconda-ks.cfgをベースに少し変更する。赤字部分が変更したところ。

Kickstart file automatically generated by anaconda. install #cdrom url –url http://172.16.0.1/dist lang en_US.UTF-8 keyboard jp106 network –device eth0 –bootproto dhcp #rootpw –iscrypted $1$J1wcQuxw$sfIj335v9EAHSm1Kct9UU1 rootpw password firewall –enabled –port=22:tcp authconfig –enableshadow –enablemd5 selinux –disabled timezone Asia/Tokyo bootloader –location=mbr –driveorder=hda # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work #clearpart –all –drives=hda clearpart –all –drives=sda part /boot –fstype ext3 –size=100 –ondisk=sda part pv.2 –size=0 –grow –ondisk=sda volgroup VolGroup00 –pesize=32768 pv.2 logvol swap –fstype swap –name=LogVol01 –vgname=VolGroup00 –size=768 –grow –maxsize=1536 logvol / –fstype ext3 –name=LogVol00 –vgname=VolGroup00 –size=1024 –grow %packages @admin-tools @base @core @dns-server @development-libs @development-tools @editors @ftp-server @java @java-development @legacy-network-server @legacy-software-development @legacy-software-support @mail-server @network-server @ruby @server-cfg @system-tools @text-internet @web-server @smb-server keyutils kexec-tools trousers fipscheck device-mapper-multipath perl-Convert-ASN1 imake audit で、これを/var/www/html以下におく。

mv ks_cent54.cfg /var/www/html # chmod 644 /var/www/html/ks_cent54.cfg で、/tftpboot/linux-install/pxelinux.cfg/defaultを編集する。赤字が変更部分。

default local timeout 100 prompt 1 display msgs/boot.msg F1 msgs/boot.msg F2 msgs/general.msg F3 msgs/expert.msg F4 msgs/param.msg F5 msgs/rescue.msg F7 msgs/snake.msg label local localboot 1 label 0 localboot 1 label 1 kernel nodeA/vmlinuz # append initrd=nodeA/initrd.img ramdisk_size=8419 method=http://172.16.0.1/dist ip=dhcp append initrd=nodeA/initrd.img ramdisk_size=8419 ksdevice=eth0 ks=http://172.16.0.1/ks_cent54.cfg devfs=nomount ip=dhcp これで変更はおわり。クライアント側をもう一度起動してみる。

  1. じゃあクライアントにインストールしてみる→失敗する訳だがorz

で、クライアントを起動してみると、kickstartファイルの読み込みに失敗する。(ハードウェアの構成によってはここで読み込める人もいるかもしれない。その人はここで終わり。Enjoy!)

cimg1361

で、[Alt]+[F4]キーでログを見てみると、ネットワークデバイスドライバが読み込めていないのでネットワークに繫げられていないことがわかる。

そういえば前回、ネットワークカードの設定をしながら「これってAtherosのネットワークチップなんだ・・・」と思っていたが。で、マザーボード(P5KPL-AM EPL)のメーカーAsusのホームページを見てみると、Linux用にドライバが用意されている。おお!これ組み込めばいいんじゃね?となる。

  1. ネットワークドライバをpxebootで使用するinitrd.imgに追加する

以下さらっと書いてますがかなり試行錯誤しました・・・。

まずASUSのページからダウンロードしたドライバをインストールサーバにおいて、展開する。

mac$ scp LinuxDrivers.zip root@instserver:/root root@instserver’s password: LinuxDrivers.zip 100% 4586KB 4.5MB/s 00:01 mac$ ssh root@instserver root@instserver’s password: Last login: Mon Jan 4 22:53:51 2010 from mac # ls anaconda-ks.cfg install.log install.log.syslog LinuxDrivers.zip # unzip LinuxDrivers.zip 展開先のディレクトリに移動し、ドライバをmakeする。本来は不要なmake installまでやってるが、ここで変更される内容を後で参照するため。もしかしたらmake installしなくてもいい方法があるのかもしれないがよくわかんない。

cd LinuxDrivers/Lan/src # make make -C /lib/modules/2.6.18-164.el5/build SUBDIRS=/root/LinuxDrivers/Lan/src modules make[1]: Entering directory /usr/src/kernels/2.6.18-164.el5-i686' CC [M] /root/LinuxDrivers/Lan/src/at\_main.o CC [M] /root/LinuxDrivers/Lan/src/at\_hw.o CC [M] /root/LinuxDrivers/Lan/src/at\_param.o CC [M] /root/LinuxDrivers/Lan/src/at\_ethtool.o CC [M] /root/LinuxDrivers/Lan/src/kcompat.o LD [M] /root/LinuxDrivers/Lan/src/atl1e.o Building modules, stage 2. MODPOST CC /root/LinuxDrivers/Lan/src/atl1e.mod.o LD [M] /root/LinuxDrivers/Lan/src/atl1e.ko make[1]: Leaving directory /usr/src/kernels/2.6.18-164.el5-i686’ # make install make -C /lib/modules/2.6.18-164.el5/build SUBDIRS=/root/LinuxDrivers/Lan/src modules make[1]: Entering directory /usr/src/kernels/2.6.18-164.el5-i686' Building modules, stage 2. MODPOST make[1]: Leaving directory /usr/src/kernels/2.6.18-164.el5-i686’ gzip -c ../atl1e.7 > atl1e.7.gz # remove all old versions of the driver find /lib/modules/2.6.18-164.el5 -name atl1e.ko -exec rm -f {} ; || true find /lib/modules/2.6.18-164.el5 -name atl1e.ko.gz -exec rm -f {} ; || true install -D -m 644 atl1e.ko /lib/modules/2.6.18-164.el5/kernel/drivers/net/atl1e/atl1e.ko /sbin/depmod -a || true install -D -m 644 atl1e.7.gz /usr/share/man/man7/atl1e.7.gz man -c -P’cat > /dev/null’ atl1e || true # 次にpxebootで使われるinitrd.imgをほどく。

cd /tftpboot/linux-install/nodeA/ # mkdir initrd # cd initrd # zcat ../initrd.img | cpio -i -c # ls bin dev etc init modules proc sbin selinux sys tmp var # さらにmodules以下にある、各ファイルに変更をくわえる。 まずはドライバ本体(atl1e.ko)をmodules.cgzアーカイブにくわえる。

cd modules # ls module-info modules.alias modules.cgz modules.dep pci.ids # mkdir modulesdir # cd modulesdir # zcat ../modules.cgz | cpio -idv # ls 2.6.18-164.el5 # cd 2.6.18-164.el5/i686/ # cp /root/LinuxDrivers/Lan/src/atl1e.ko . # chmod 744 atl1e.ko # cd ../.. # find .| cpio -c -o | gzip -c9 > ../modules.cgz 27112 blocks # cd .. # rm -rf ./modulesdir # 次に、module-info, modules.alias, modules.dep, pci.idsの各ファイルに適切なエントリを追加する。何が適切かってのは参照するところがあるので以下参照。

まずはmodule-info。赤字が追加内容。インデントのスペースは実際にはタブです。追加の3行目はどんな文字でもいいのかもしれない。よくわかんない。

(前略) ata_piix scsi “Intel PIIX/ICH ATA controllers” atl1e eth “Atheros Gigabit Ethernet” atmel_cs eth “Atmel at76c50x 802.11 PCMCIA wireless ethernet” (後略) 次にmodules.alias。まずは追加する内容を以下のように確認する。赤字部分がそれ。

grep atl1e /lib/modules/2.6.18-164.el5/modules.alias alias pci:v00001969d00001026svsdbcsci* atl1e # で、pxeboot側のmodules.aliasを編集。赤字が追加内容。

alias pci:v00008086d00007010svsdbcsci* ata_piix alias pci:v00001969d00001026svsdbcsci* atl1e alias pcmcia:mcffnpfnpaB474D43Apb6B1FEC94pcpd* atmel_cs 次にmodules.dep。まずは確認。赤字部分がそれ。

grep atl1e /lib/modules/2.6.18-164.el5/modules.dep /lib/modules/2.6.18-164.el5/kernel/drivers/net/atl1e/atl1e.ko: 依存モジュールはないという意味だと思われたので、pxeboot側のmodules.depは特に変更せず。

最後にpci.ids。まずは確認。赤字部分がそれ。

grep atl1e /lib/modules/2.6.18-164.el5/modules.pcimap atl1e 0x00001969 0x00001026 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0 赤字部分を以下のように追加する。インデントのスペースは実際にはタブです。

(前略) 18ca XGI Technology Inc. (eXtreme Graphics Innovation) 0020 Z7/Z9 (XG20 core) 0040 Volari V3XT/V5/V8 1969 Atheros Corp. 1026 Atheros Gigabit Ethernet 197b JMicron Technology Corp. (後略) 最後にinitrd.imgを再作成する。

find .| cpio -c -o | gzip -c9 > ../initrd.img 27809 blocks # これでおしまい。

  1. クライアントインストール再挑戦→成功!

クライアントを再度poweronして、pxebootする。うまく行けばanacondaのStage2まで移行して、インストールが開始される。

cimg1369

後は再起動を促す表示が出たら、再起動。

ただしpxebootを有効にしておくと、再起動後またインストール前の画面になり、通常であれば10秒待てばHDDからブートするはずだがブートしない。これはよくわかんなかった。要調査。とりあえずはdhcpdのpxeclients部を無効にしておけばいい。こんな感じ。/etc/init.d/dhcpd restartも忘れずに。

ddns-update-style interim; ignore client-updates; #allow booting; #allow bootp; default-lease-time 21600; max-lease-time 43200; subnet 172.16.0.0 netmask 255.255.0.0 { option routers 172.16.0.1; option subnet-mask 255.255.0.0; range 172.16.10.1 172.16.10.254; default-lease-time 21600; max-lease-time 43200; # class “pxeclients” { # match if substring(option vendor-class-identifier, 0, 9) = “PXEClient”; # next-server 172.16.0.1; # filename “linux-install/pxelinux.0”; # } } クライアントがインストールしたOSでブートすれば完了。

  1. 報告書作成

これ書いた。

  1. 脳内反省会

  • 疲れた・・・
  • 世の中に情報あんまりないですね・・・
  • HDDブートできるようにしたいなあ・・・
  • インストール時にatl1eドライバも入れたい
  • 他のリポジトリも同時にインストールできるようにしたいなあ こんな感じ!?
comments powered by Disqus