unoh.github.com

Linuxをネットワーク経由で自動インストールする方法(前編)

Mon Nov 05 01:43:51 -0800 2007

miyakeです。今回は近頃流行りの、サーバの自動インストール方法をご紹介します。

1エントリにまとめるには内容が多かったので、2回に渡って書きたいと思います。ひとまず今日のところは「ネットワークブートから手動インストール」までです。

自動化の部分を期待された方は申し訳ありませんが、次回のエントリをお待ちください(普段より早めに書きたいとは思います)。

ウノウラボでは「 ベンチャー流サーバ構築のススメ(ソフトウェア編)」と題して、OSをインストールではなくコピーする方法をご紹介しています。両者を簡単に比較してみると、それぞれ以下のような特徴があります。

■OSコピーのメリット

新サーバの環境構築の手間がほとんどない
最低限、IPアドレスの設定だけ変更すればすぐに実践投入できます。
完全に同じ構成のサーバを用意出来る
当然ながら、インストールされたパッケージだけでなく、サーバ内のファイルも同じになります。

既存のサービスで負荷が大きくなった時に即増設、といった用途には非常に便利です。

■自動インストールのメリット

物理的にディスクを移動する必要がない
コピーする場合はHDDを物理的につなぎ換えますが、その必要がありません。
サーバの構成を完全に把握できる
インストールするパッケージを設定ファイルで指定するため、何が入っているかが把握しやすくなります。
違う構成のサーバを立てやすい
設定ファイルを変更すれば、用途に応じたサーバが用意出来ます。

最初の項は、ネットワーク越しにディスクコピーする環境を作ればまた話は違ってきますが、今のところウノウではそうなっていません。

こちらは初期導入で大量のサーバをセットアップする場合や、用途毎にハード構成が異なる場合に有効です。

また、VMwareでテスト環境を作ったり、別のプロジェクトで新しいサーバを立ち上げるのにも便利です。

それぞれに異なる利点がありますので、用途に応じて使い分けが出来ればいいと思います。

■概要

サーバの自動インストールを行うには、以下のような行程をとります。

  1. PXEブート環境の構築
  2. kickstartファイルの作成
  3. サーバをPXEブートする

2番のkickstartファイル(自動インストール用の設定ファイル)は次回に触れるとして、今日は1番のPXEブート環境の構築方法をご紹介します。

なお、OSはCentOS5(x86_64)を使用した場合を例としますが、他のディストリビューションでも基本は同じのはずです。

■tftp-serverの構築

まず、PXEによるネットワークブート環境を構築します。PXEブートを行うには、新規にセットアップするサーバ以外に起動用のサーバが必要になります。

インストール用の環境は、既存のサーバ上に作ってもいいですし、VMwareで専用のサーバを作ってしまうのも手です。ノートPCに VMwareでPXEブート用のサーバを作っておくと、別の場所でサーバを新しく立ち上げるのに便利なので気に入っています。

PXEブートを行うには、tftpサーバとdhcpサーバ、それにインストールするOSの起動イメージが最低限必要となります。まずは以下のようにして、パッケージをインストールします。

sudo yum install tftp-server dhcp

tftp-serverはインストールしただけでは有効にならないので、/etc/xinetd.d/tftpを編集します。「disable = yes」となっている行を「disable = no」と変更します。

次に、PXEブート用のブートローダをコピーします。以下の作業は/tftpboot(tftp-server導入時に作られるディレクトリ)に書き込み権限を持った状態で行ってください。

cd /tftpboot
cp /usr/lib/syslinux/pxelinux.0 .

pxelinux.0がどこにも見当たらない場合はsyslinuxがインストールされていない可能性がありますので、その場合はインストールしてください。CentOSでは最初から入っていました。

そして、インストールするOSの起動イメージを適当なミラーサーバからダウンロードします。

mkdir centos5_64
cd centos5_64
wget http://ftp.iij.ad.jp/pub/linux/centos/5.0/os/x86_64/images/pxeboot/initrd.img
wget http://ftp.iij.ad.jp/pub/linux/centos/5.0/os/x86_64/images/pxeboot/vmlinuz

他のOSをインストールする場合は、それぞれのinitrd.imgとvmlinuzを用意してください。

後は、起動用の設定ファイルが必要になります。以下の内容で、/tftpboot/pxelinux.cfg/defaultを作成します。

default centos5_64
prompt 1
timeout 15

label centos5_64
kernel centos5_64/vmlinuz
append load initrd=centos5_64/initrd.img noipv6 devfs=nomount

以上の設定が完了したら、tftp-serverを起動します。tftp-serverはxinetd上で動作するので、以下のようにします。

sudo /etc/init.d/xinetd start

xinetdはtftp-serverをインストールする時に一緒に入るので、個別に導入する必要はありません(CentOSの場合)。

■dhcpdの構築

インストールはtftp-serverと一緒に済ませたので、こんな感じで設定ファイルを自分の環境に合わせて書き換えます。/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;

        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 "pxelinux.0";
}

IPの設定などは環境に合わせて適宜変更してください。PXEブート用の特別な設定は、最後の「filename」の指定だけです。ここでPXEのブートローダを指定します。

設定が終わったらdhcpdを起動します。

sudp /etc/init.d/dhcpd start

これでPXEブートの環境が整いました。

なお、手元の環境では問題ありませんでしたが、ルータ側のDHCP機能を有効にしている場合、もしかしたらそちらが優先されてしまうことがあるかも知れません。その場合はルータのDHCPをoffにしてください。

■インストール対象のサーバを起動

あとは、新しいサーバに電源を入れて、ネットワークから起動するだけです。BIOSの設定や起動時の操作で、ネットワークから起動してやってください。

そうすれば、PXEブート用のサーバからIPや起動イメージを取得して、Linuxのインストーラが起動するはずです。

PXEブート時のイメージ
PXEブート時のイメージ posted by (C)フォト蔵

インストールに使用するメディアは、公開ミラーのftpやhttpから取得してもいいですし、LAN内で用意してやればより高速です。もちろんローカルの光学ドライブからインストールすることも出来ますが、それだとせっかくPXEブートにした意味がありません。

■まとめと予告

今回の内容で、ネットワークブートからインストーラを起動するところまでは完了です。この時点で、Linuxのインストールに光学ドライブが不要になりました。これだけでもそれなりに便利だとは思いますが、やはりインストールまで自動でやってしまいたいですね。

ということで、次回はこのPXEブート環境を発展させて、OSのインストールを自動化します。

なお、PXEブートの設定は今回最も基本的と思われる内容だけをご紹介しましたが、pxelinux.cfg/以下の設定によって複数の起動イメージを使い分けるなど、様々なことが出来ます。そのあたりも調べてみると面白いかも知れません。

■参考サイト

本エントリを書くに当たって、主に以下のサイトを参考にさせて頂きました。この場を借りてお礼申し上げます。