2010年7月21日水曜日

PXE ブートによるネットワークインストール(CentOS 5.5)


このエントリーをはてなブックマークに追加


Kindleばっかりいじってないで、ちゃんとストレージ関連の勉強もせねば。ということで、hadoop

Hadoopのためには複数ノードが必要になるので、今後のためにもネットワークインストール環境を構築しておく。

ホストはCentOS 5.5(192.168.1.71)
インストール対象はCentOS 5.5(インストールOSはなんでも良い)


PXEブートはNICとBIOSが対応している必要があるが、最近のマシンならほぼ大丈夫。仮想マシンも対応している。

PXEの動き

.クライアントはDHCPサーバにアドレスを問い合わせる。

.DHCPサーバから、IPと合わせてブートサーバの情報を返す。

.クライアントは貰ったIPをセットし、tftpでブートサーバへブートイメージと設定ファイルを取りに行く。

.無事イメージが取得できれば、それを次のブートプロセスに渡す。

.イメージと設定ファイルを読み込んで、設定に従い、NFSやHTTPサーバからOSのデータを取得し、ネットワークブートや、インストールを行う。

というわけで、必要なものはtftpと、dhcpサーバ、そしてインストールイメージを配布するNFSサーバになる。


1.tftpサーバの構築

サーバと動作確認用のクライアントをインストール
[root@centos55 ~]# yum install tftp*
[root@centos55 ~]# rpm -qa |grep tftp
tftp-server-0.49-2.el5.centos
tftp-0.49-2.el5.centos

起動する(xinetd経由で起動される)
[root@centos55 ~]# chkconfig --list |grep tftp
        tftp:           off

[root@centos55 ~]# chkconfig tftp on
[root@centos55 ~]# chkconfig --list |grep tftp
        tftp:           on

テスト
[root@centos55 ~]# cp /etc/hosts /tftpboot/
[root@centos55 ~]# cd /tmp/
[root@centos55 tmp]# ls -l hosts
ls: hosts: そのようなファイルやディレクトリはありません

[root@centos55 tmp]# tftp 192.168.1.71 -c get hosts
[root@centos55 tmp]# ls -l hosts
-rw-r--r-- 1 root root 240  7月 21 22:05 hosts
設定はこれだけ。


2.DHCPサーバの構築

これもyumからインストール。

[root@centos55 tmp]# yum install dhcp

ここでちょっと問題。我が家の環境はNECのAtermルータでDHCPを提供しており、iPhoneやPSPなんかは全部そっちを使っている。

同じセグメント内でDHCPサーバがかぶると、いろいろ厄介なので、CentOS側のDHCPは特定MACのマシンのみにDHCPを提供するように構成する。

まだ起動しない
[root@centos55 tmp]# chkconfig --list |grep dhcp
dhcpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
*複数インターフェースがあるマシンでは、DHCPが待ち受けるifを指定すること。そうしないと余計なセグメントにDHCPが流れてしまう。

設定サンプルから設定した方が早い。
[root@centos55 tmp]# cp -p /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
[root@centos55 tmp]# vi /etc/dhcp.conf
ddns-update-style interim;
ignore client-updates;
# --- MACでホスト名を割り当てる(後述のhostセグメント)
use-host-decl-names on;

subnet 192.168.1.0 netmask 255.255.255.0 {

# --- default gateway
        option routers                  192.168.1.254;
        option subnet-mask              255.255.255.0;

        option domain-name              "sol-net.jp";
        option domain-name-servers      192.168.1.254;

        option time-offset              -18000; # Eastern Standard Time

        default-lease-time 21600;
        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address
        host hdp01 {
                next-server 192.168.1.71;
                hardware ethernet 12:34:56:78:AB:CD;
                fixed-address 192.168.1.81;
                filename    "pxelinux.0";
        }

        host hdp02 {
                next-server 192.168.1.71;
                hardware ethernet 12:34:56:78:AB:CD;
                fixed-address 192.168.1.82;
                filename    "pxelinux.0";
        }

        host hdp03 {
                next-server 192.168.1.71;
                hardware ethernet 12:34:56:78:AB:CD;
                fixed-address 192.168.1.83;
                filename    "pxelinux.0";
        }

        host hdp04 {
                next-server 192.168.1.71;
                hardware ethernet 12:34:56:78:AB:CD;
                fixed-address 192.168.1.84;
                filename    "pxelinux.0";
        }

}
この時点で、MACは調べてないので、適当な値を入れている。また、特定MAC以外へはアドレスを割り当てないように、rangeを設定していない。

設定ファイルチェック
[root@centos55 etc]# /etc/init.d/dhcpd configtest
Syntax: OK

起動する。
[root@centos55 etc]# /etc/init.d/dhcpd start
dhcpd を起動中:             [  OK  ]

この状態でインストール対象のマシンをネットワークブート仕様とすると、DHCPに問い合わせが来る。そこにMACが記述されるので、それを設定ファイルへ入れ込む。

MACを書いたら、DHCPデーモンを再起動
[root@centos55 ~]# /etc/init.d/dhcpd restart
dhcpd を停止中:             [  OK  ]
dhcpd を起動中:             [  OK  ]
これで、クライアントは起動時にMACごとにIPが振られ、pxeブートの最初のプロセスが起動する。


3.PXEブートファイルの準備

ブートローダーを引っ張ってきます。pxelinux.0はOSに依存しないブートローダで、Linux以外もブートできます。
[root@centos55 ~]# cp -p /usr/lib/syslinux/pxelinux.0 /tftpboot/

pxeの設定ファイルをおくディレクトリを作成する。
[root@centos55 ~]# mkdir /tftpboot/pxelinux.cfg

設定ファイルを作成する(ここでもMAC制限等がかけられるけど、ここではやらない)
[root@centos55 ~]# vi /tftpboot/pxelinux.cfg/default
default local
prompt  1
timeout 1200

label centos5
  kernel centos5/vmlinuz
  append initrd=centos5/initrd.img

label local
  localboot 0
これで起動時の問い合わせプロンプトで、60秒待つか、何も入力しないか、localと入力すると、ローカルドライブから起動してくる。centos5 と入力すると、centosのインストーラーが起動する。

vmlinuzとinitrdはFTPから持ってくる。
[root@centos55 ~]# mkdir /tftpboot/centos5
[root@centos55 ~]# cd /tftpboot/centos5/
[root@centos55 centos5]# wget ftp://ftp.iij.ad.jp/pub/linux/centos/5.5/os/i386/images/pxeboot/ini
trd.img
[root@centos55 centos5]# wget ftp://ftp.iij.ad.jp/pub/linux/centos/5.5/os/i386/images/pxeboot/vmlinuz

[root@centos55 centos5]# ll
合計 9176
-rw-r--r-- 1 root root 7500081  7月 21 22:52 initrd.img
-rw-r--r-- 1 root root 1875796  7月 21 22:53 vmlinuz

これで、9割の準備が整ったので、マシンを起動してみる。こんな感じでboot:プロンプトが出ればOK。ここでcentos5と入力すると起動する。

これで、9割の準備が整ったので、マシンを起動してみる。

こんな感じでboot:プロンプトが出ればOK。ここでcentos5と入力すると起動する。


4.インストール媒体の提供

最後にインストール媒体をNFS上に準備してやる。これはインストールDVDをループバックマウントして、そのままshareするか、丸ごとコピーしたディレクトリをshareすればよい。

*このNFSサーバだけディスク容量の関係で、Solaris上に構築する。

root@sol10-u24 23:12:46> zfs create spool/pxeimages
root@sol10-u24 23:12:46> zfs set sharenfs='ro,root' spool/pxeimages

root@sol10-u24 23:14:16> lofiadm -a /spool/cifs01/OSimage/CentOS5.5/CentOS-5.5-i386-bin-DVD.iso
/dev/lofi/1

root@sol10-u24 23:14:38> mount -F hsfs -r /dev/lofi/1 /mnt/media01
root@sol10-u24 23:15:09> cp -Rp /mnt/media01/* /spool/pxeimages/centos5.5/

root@sol10-u24 23:16:57> umount /mnt/media01
root@sol10-u24 23:17:46> lofiadm -d /dev/lofi/1

これでOK。後は、インストールの途中で聞かれる、メディアパスに、このNFSサーバを指定すればよい。



これでhadoopの準備OK。まずは4台にインストールしておく(kickstartファイルを用意しておくことで、インストールまで完全自動化できる)

Hadoop 第2版

0 件のコメント:

コメントを投稿