連載
» 2014年07月17日 18時00分 公開

PXE+Kickstartで動かすVirtualBox+CentOS環境自動構築サーバーの作り方新人インフラ技術者のためのサーバー構築/運用自動化入門(2)(3/5 ページ)

[菅原亮, 鈴木繁成,NTT OSSセンタ]

コラム「一括でPXE設定」

 筆者は複数のブートローダーを使い分けている都合で、今回のようにPXE関連の設定(hostのfilenameとnext-server)をホストと関連付けて個別設定するようにしていますが、特定のブートローダーが使えればいい場合は、PXE関連の設定を一括で設定することもできます。

 この場合、前述のhostスコープはなくても問題ありません。ブート時に構成をメニューで選択する場合などで有効でしょう。設定方法はsubnetスコープの中に、以下のclassを追加します。

class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    filename       "/pxeboot_cent65/pxelinux.0";
    next-server     192.168.1.2;
}

 設定の意味は以下の通りです。

matchif substring (option vendor-class-identifier, 0, 9) = "PXEClient"

 PXEクライアントからのリクエストの場合のみ、classスコープでの設定を有効にします。

filename

 hostスコープで設定したものと同じです。

next-serve

 hostスコープで設定したものと同じです。


TFTPサーバーの設定

 TFTPはファイルを転送するという意味でFTPと似ていますが、認証機能がなくUDPを使用するなど、FTPと比べて単純で軽量なプロトコルです。TFTPサーバーは「xinetd」というサービスを通して通信しますので、TFTPサーバーを利用する場合はxinetdサービスが起動していなくてはなりません(下図参照)。追加パッケージ導入後の起動設定で、xinetdをonにしていたのを思い出してください。

図 TFTPサーバーの通信イメージ

 それではTFTPサーバーの設定をしましょう。最初にTFTPサーバーのルートディレクトリ(/var/lib/tftpboot/)に移動します。

# cd /var/lib/tftpboot/

 このディレクトリがTFTPでアクセスしてきた時のルートディレクトリになります。前述の通りTFTPは認証がありませんので、取得されるとセキュリティ上の問題があるようなファイルは絶対に置かないでください。

 次にブートローダーを配置するディレクトリを作成します。ここではディレクトリ名を「pxeboot_cent65」とします。

# mkdir pxeboot_cent65

 ここで気付かれた方もいるかもしれませんが、先ほどDHCPサーバーの設定で、このディレクトリ名が出てきています。hostスコープのfilenameで指定したものですね。

 もし、このディレクトリ名を変更する場合は、hostスコープのfilenameで指定しているブートローダーのパス名も同じく変更し、DHCPサーバーを再起動する必要があります。また、複数のブートローダーを配置したい場合は、同じようにディレクトリを作成してDHCPサーバーの設定で使い分けることもできます。

 ここまでできましたら、次はブートローダーの中身を準備しましょう。先に作成したディレクトリの中に必要なファイルをコピーします。CentOSのインストール用DVDからコピーするファイルもありますので、CentOSのインストール用DVDをあらかじめマウントしておくか、先にコピーしたYumリポジトリの中身からコピーしてください。

 以下のコマンド例はCentOSのインストール用DVDを/mediaにマウントした場合です。

# cp /media/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/pxeboot_cent65/
# cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/pxeboot_cent65/
# touch /var/lib/tftpboot/pxeboot_cent65/boot.msg
# mkdir /var/lib/tftpboot/pxeboot_cent65/pxelinux.cfg

 コピーおよび作成するファイルは以下の通りです。

  • initrd.img
    ブート時に使うRAMディスクのイメージファイル。CentOSのインストール用DVDの/isolinuxからコピー
  • vmlinuz
    Linuxカーネルイメージ。CentOSのインストール用DVDの/isolinuxからコピー
  • pxelinux.0
    PXE用ブートローダー。/usr/share/syslinuxからコピー
  • menu.c32
    メニュー選択画面を表示するためのソフトウェア。/usr/share/syslinuxからコピー
  • boot.msg
    ブート直後のコンソール画面に表示するメッセージ。今回はメニュー画面を使うため、コンソールに表示するメッセージは必要ない。そのため、先のコマンド例では空ファイルを作成している
  • pxelinux.cfg
    ブートする際に使う設定ファイルを格納するディレクトリ。この後、説明

 ブートする際に使う設定ファイルは「01-{ハイフン区切りのMACアドレス}」というファイル名にすることで、サーバー個別の設定を割り当てられます。例えばサーバーのMACアドレスがa1:a2:a3:a4:a5:a6(架空です)の場合は、「01-a1-a2-a3-a4-a5-a6」というファイル名にします。

 また、自身のMACアドレスに該当する設定ファイルが見つからない場合は「default」というファイル名の設定ファイルを使用します。今回はサーバー個別の設定をメニューで選択できるようにしますので、ここではdefaultファイルだけ作成しましょう。

 以下のような内容のdefaultファイルを、先ほど作成したpxelinux.cfgディレクトリ配下に作成しましょう。

prompt 0
default menu.c32
timeout 300
menu title === PXE Boot Menu ===
menu tabmsg Please Select a Number
ontimeout centos65_core
label centos65_core
    menu label ^1 CentOS 6.5 core
    kernel vmlinuz
    append initrd=initrd.img ks=http://{自動構築サーバーのIPアドレス}/ks/default.cfg ksdevice=bootif
    ipappend 2

 設定の意味は以下の通りです。

  • prompt
    ブートプロンプト表示フラグ(1:表示、0:非表示)
  • default
    デフォルトで起動するラベル名、もしくはソフトウェアを指定。例ではメニューを表示するソフトウェアmenu.c32を指定している
  • menu title
    選択メニューのタイトルで表示する文字列
  • menu tabmsg
    選択メニューの下部に表示する文字列
  • timeout
    ブートプロンプトの表示時間。0.1秒単位で指定。例では300なので30秒になる。また0を指定すると、タイムアウトが無効になる
  • ontimeout
    タイムアウトした時に選択されるラベル名
  • label
    起動する際の情報エントリへのラベル。用意する構成の数だけこのエントリを作成します。ここで指定する文字列がラベル名になる。エントリの内容は以下のように記述
    • menu
      選択メニューに表示する文字列。"^1"と記述すると1キーを押下して選択できるようになる
    • kernel
      起動するカーネルイメージのファイル名。ここではvmlinuzを指定している
    • append
      起動パラメーターを記述。"ks="の部分で、この後説明するKickstartファイルへのURLを指定
    • ipappend 2
      2を指定すると、起動パラメーターの"BOOTIF={ブートしたNICのMAC}"に置き換えられる

 パラメーターの意味について詳細は「SYSLINUX - Syslinux Wiki」を参照してください。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。