CentOSにネットワークインストール環境を構築してkickstartでインストール

複数のサーバを構築するときに一つずつDVDドライブを接続してインストールするなんて作業はしたくないいっぺんにやってしまいたい。そういうときの為にpxebootからosのネットワークインストールを行う為の環境を構築。今回は起動イメージだけじゃなくインストールするosのDVDイメージも同サーバ内に展開しての作業。


空っぽのサーバ用マシンが一台・・・今回はこれをネットワークインストール環境用マシンとして使用。
まずはosのインストールからでもちろんosはだいたい何でもok。


CentOSのインストール(ここでは普通にインストール用DVDから)
・日本語を選択
・キーボードも日本語
・インストール元はローカルのディスク
・ドライバは手動選択にして、mass ... linux ... を選択(あんまりよく覚えてない・・・)
パーティションとかの細かい設定に関しては今回は全部デフォルトのままで
とまあ何となくの気持ちでokなんでまずはインストール。


で、ここからが本番な訳でさっきインストールしたCentOSマシン上での作業。


tftp-serverとdhcpのインストール

yum install tftp-server dhcp


「/etc/xinetd.d/tftp」の以下のdisableをnoに変更する

service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}


ホストosインストール時に同時にインストールされるpxelinux.0ファイルをtftpbootディレクトリ以下にコピー。
今後、複数のosをネットワークインストールする為、今回はtftpbootディレクトリ以下にもう一つディレクトリを作成。

mkdir /tftpboot/centos-5.3-x86_64
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/centos-5.3-x86_64/


ネットワークブート用のイメージをダウンロード

cd /tftpboot/centos-5.3-x86_64
wget http://ftp.iij.ad.jp/pub/linux/centos/5.3/os/x86_64/images/pxeboot/initrd.img
wget http://ftp.iij.ad.jp/pub/linux/centos/5.3/os/x86_64/images/pxeboot/vmlinuz


pxeブート用の設定ファイルを作成

mkdir /tftpboot/centos-5.3-x86_64/pxelinux.cfg


「/tftpboot/centos-5.3-x86_64/pxelinux.cfg/default」を作成して以下に編集。

default centos-5.3-x86_64
prompt 1
timeout 15

label centos-5.3-x86_64
kernel vmlinuz
append load initrd=initrd.img noipv6 devfs=nomount


dhcpの設定。ファイルは「/etc/dhcpd.conf」。

ddns-update-style interim;
ignore client-updates;

subnet 192.168.10.0 netmask 255.255.255.0 {
        option routers                  192.168.10.1;
        option subnet-mask              255.255.255.0;

        option domain-name              "dev.local";
        option domain-name-servers      192.168.10.1;

        next-server                     192.168.10.1;

        option time-offset              -18000; # Eastern Standard Time

        range dynamic-bootp             192.168.10.80 192.168.10.99;
        default-lease-time              21600;
        max-lease-time                  43200;

        filename                        "centos-5.3-x86_64/pxelinux.0";
}


「/etc/sysconfig/dhcpd」も編集。

# Command line options here
DHCPDARGS=eth0


固定ipの設定(可能であればcuiツールを利用するsetupコマンドから行う)
「/etc/sysconfig/network-scripts/ifcfg-eth0」を編集。

# eth0の設定
# Broadcom Corporation NetXtreme BCM5721 Gigabit Ethernet PCI Express
DEVICE=eth0
BOOTPROTO=none
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.10.1
TYPE=Ethernet


ネットワークの再起動

service network restart


tftpサービスの起動

/etc/init.d/xinetd start


dhcpサービスの起動

/etc/init.d/dhcpd start


これで基本的な準備は完了。
サーバとなるpcと新規インストール対象のpcを接続してpxeブートを選択すればネットワークインストールが始まる。
pxe-e32 tftp open timeout」など、問題が発生する場合はselinuxfirewallの設定を確認。
サービスを止めておくと確実。


firewallの停止

service iptables stop


selinuxを無効にする場合はファイル「/etc/sysconfig/selinux」を編集。

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled   #ここをdisabledに変更
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted


selinuxの設定を変更した場合は再起動しましょう。

reboot


今のままじゃ、ネットワークインストールの起動は出来るが、インストール対象のosのイメージをweb上に探しに行かないといけない。ので、osイメージも同サーバpcで取得可能なようにする。


httpdサービスのインストール

yum install httpd


他のpcにてダウンロード済みのイメージ等がある場合はファイル共有用にvsftpをインストール。

yum install vsftpd


匿名ユーザにてディレクトリの作成やファイルの書き込みを行いたい場合は「/etc/vsftpd/vsftpd.conf」を編集して以下の設定を行う。

anon_mkdir_write_enable=YES
anon_upload_enable=YES


vsftpサービスの起動

/etc/init.d/vsftpd start


osイメージファイルマウント用に、webサーバのドキュメントルート配下にディレクトリを作成

mkdir /var/www/html/centos-5.3-x86_64


現在イメージファイルが/var/ftp/pub/CentOS-5.3-x86_64-bin-DVD.isoにあるとして、webサーバ配下にマウント
今回はマウントのみしているが、展開したファイルをwebサーバ配下に置いておくと、毎回マウントする手間も無くなる。

mount -t iso9660 -o loop /var/ftp/pub/CentOS-5.3-x86_64-bin-DVD.iso /var/www/html/centos-5.3-x86_64


httpdサービスの起動

/etc/init.d/httpd start


毎回同じ設定のosをインストールするのであれば、kickstartインストールの環境を作成しておくと便利。

kickstartファイルの準備
サーバpcにosをインストールした際に作成されているkickstartファイルをテンプレートとして利用する。

cp /root/anaconda-ks.cfg /var/www/html/centos-5.3-x86_64/ks.cfg


用意したkickstart設定ファイルを好みに合わせて変更
今回のインストール元はcdなどではないので、2行目の「cdrom」と記述されている行を以下の通りに変更。

url --url http://192.168.10.1/centos-5.3-x86_64


その他の設定に関しては以下のサイトが参考になる。(参考にさせて頂きました。)


pxeブート用の設定ファイルを変更(ksの設定を追記)。ファイルは「/tftpboot/centos-5.3-x86_64/pxelinux.cfg/default」。

default centos-5.3-x86_64
prompt 1
timeout 15

label centos-5.3-x86_64
kernel vmlinuz
append load ks=http://192.168.10.1/centos-5.3-x86_64/ks.cfg initrd=initrd.img noipv6 devfs=nomount


あとは通常のネットワークインストールと同様、新規インストール対象のpcを接続して電源を入れてpxeブートするのみ。


尚3HFDY、これらの環境をvirtualbox等の仮想環境上で行っている場合はゲストosとかホストosとかのネットワーク設定が必要。
virtualboxの場合のみ参考程度に以下に記述。

  • ゲストosの設定画面にて、ネットワークのアダプタタイプを「PCnet-FAST3(Am79C973)」に指定。
  • 割り当てを「Bridged Adapter」に指定。
  • 名前を「MACブリッジミニポート」に指定。
  • ホストos(windows想定)のネットワーク接続画面にて、「ローカルエリア接続」と「VirtualBox Host-Only Network」を選択し、「ブリッジへ追加」を選択。
  • 無線LAN等、今回使わない他のネットワークがある場合には切っておいたほうが確実です。

で、virtualboxのネットワーク設定は以上。


以後、立ち上げたばかりのサーバをネットワークインストールokの状態にするには以下のコマンドを打つのみでok。

/etc/init.d/iptables stop
/etc/init.d/xinetd start
/etc/init.d/dhcpd start
/etc/init.d/httpd start


セキュリティやDHCPサーバの重複等の問題が無いなら全部chkconfigとかで起動設定しておいてもok。


以上!


ちなみに今回は「pxelinux.cfg/default」でネットワークインストール用のファイルを直接していしたけど、「menu.c32」をはさめばインタラクティブで階層構造を持ったメニュー画面を表示する事が可能けどそれはまた別の機会に。