Linux Tips

PXEでディスクレス・クライアントを実現するには

北浦訓行
2007/4/11

 PXE(Preboot eXecution Environment)は、Intelが開発したネットワークブートの規格である。PXEを利用すると「PXEネットワークブート用サーバを構築するには」および「PXEネットワークブートでLinuxをインストールするには」の方法で光ディスクドライブが接続されていないPCでも、ネットワークブートでLinuxをインストールできる。

 さらに、PXEサーバにクライアントのファイルを用意すれば、ハードディスクを搭載していないPC(ディスクレスPC)でもLinuxを使用できる。ここでは、Fedora Core 6(FC6)でPXEサーバを構築して、ディスクレス・クライアントを実現する方法を紹介する。

 まず、サーバ上に保存するクライアントのファイルを用意する。稼働しているLinux(ここでは、FC6)を用意して、そこから全ファイルをコピーするのが一番簡単な方法だ。ただし、ディスクレス・クライアント用に「busybox-anaconda」というファイルをインストールする必要がある。FC6の場合、yumコマンドでインストール可能だ。

# yum install busybox-anaconda

 次に、PXEサーバ側の作業を行う。

 ディスクレス・クライアントのサーバとなるPXEサーバには、DHCP、TFTP、NFSの各サーバプログラムが必要となる。また、PXEサーバ「syslinux」とネットワークブートの設定ツール「system-config-netboot」もインストールする。

 上記のプログラムがインストールされていない場合は、yumコマンドでインストールする(注)

注:TFTPサーバは、system-config-netbootのインストール時にインストールされる。

# yum install dhcp
# yum install nfs-utils
# yum install system-config-netboot

 そして、以下の方法でsyslinuxがインストール済みかどうかを確認する。

$ rpm -qa | grep syslinux
syslinux-2.11-1

 syslinuxという項目が表示されない場合は、yumコマンドでインストールする。

 インストールが完了したら各種設定を行う。TFTPサーバは、xinetd経由で起動される。FC6の場合、デフォルトでは起動しないため、/etc/xinetd.d/tftpを以下のように修正する。

service tftp
{
(省略)
        disable                 = no ←「yes」を「no」に変更
(省略)
}

 修正したら、xinetdを起動する(起動している場合は再起動)。

# service xinetd restart

 そして、クライアントのファイルを格納するディレクトリを/tftpbootの下に作成して、ファイルをPXEサーバ上にコピーする。ここでは、/tftpboot/fc6/rootという名前にした(注)

注:クライアントのファイルを格納するディレクトリ名は、最初が/tftpbootで、最後がrootでなければならない。このルールに従わないと、後述するsystem-config-netbootでの設定が行えない。

# mkdir -p /tftpboot/fc6/root
# cd /tftpboot/fc6/root
# rsync -v -a -e ssh --exclude='/proc/*' --exclude=
'/sys/*' クライアント用のLinuxが起動しているPCのIPアドレス:/ .
The authenticity of host '192.168.0.X (192.168.0.X)' can't
 be established.
RSA key fingerprint is 20:ea:f8:a0:02:48:22:5f:b9:57:d4:43:
bd:44:d6:33.
Are you sure you want to continue connecting (yes/no)?
 yes ←「yes」と入力して[Enter]キーを押す
Warning: Permanently added '192.168.0.X' (RSA) to the list
 of known hosts.
root@192.168.0.X's password: ←クライアントのrootパスワードを入力する
receiving file list ...
(省略)

 次に、DHCPの設定を行う。/etc/dhcpd.confに以下の記述を追加する。

allow booting;
allow bootp;
class "pxeclients" {
        match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
        next-server PXEサーバのIPアドレス;
        filename "/linux-install/pxelinux.0";
}

 修正したらdhcpdを起動する(起動している場合は再起動)。

# service dhcpd restart

 続いて、NFSの設定を行う。/etc/exportsに以下の記述を追加する。ちなみに、この時点では/tftpboot/fc6/shapshotは存在しないが、後でsystem-config-netbootによって作成される。

/tftpboot/fc6/root  192.168.0.0/255.255.255.0(ro,sync,no_root_squash)
/tftpboot/fc6/shapshot  192.168.0.0/255.255.255.0(rw,sync,
no_root_squash)

 修正したらnfsを起動する(起動している場合は再起動)。

# service nfs restart

 次に、/tftpboot/fc6/snapshotというディレクトリを作成して、そこにfiles.customというファイルを作成する。

# mkdir -p /tftpboot/fc6/snapshot
# vi /tftpboot/fc6/snapshot/files.custom

 追加する内容は以下のとおりだ。これで/homeディレクトリが書き込み可能になり、GNOMEなどが起動可能になる。

/home/

 PXEサーバでは、クライアントのファイルは原則として書き込み禁止である。しかし、書き込み禁止にしているとLinuxの動作に影響を与えるファイルも存在するため、一部のファイルやサブディレクトリを書き込み可能なサブディレクトリ(ここでは/tftpboot/fc6/snapshot)に置くことになる。そのファイルやサブディレクトリを指定しているのが、/tftpboot/fc6/snapshot/filesというファイルだ。しかし、このファイルの変更は禁止されているため、追加設定は/tftpboot/fc6/snapshot/files.customに記述する。なお、この時点では/tftpboot/fc6/snapshot/filesは作成されていないが、後述するsystem-config-netbootを設定することで自動的に作成される。

 次に、system-config-netbootでPXEサーバの設定を行う。GNOMEメニューの[システム]メニューの[管理]−[サーバー設定]−[Network Booting Service]を選択すると、[初めてのFruid]というウィンドウが表示される。

[初めてのFruid]ウィンドウ

 [ディスクレス]ボタンをクリックすると、[ディスクレス環境の更新]というウィザード形式のダイアログボックスが表示されるので、[進む]ボタンをクリックする。

 [ディスクレス識別子]の項目に[名前]と[説明]を入力する。この[名前]は、クライアント起動用のイメージファイルを保存するサブディレクトリ名として使用される。

[ディスクレス識別子]を設定するダイアログボックス

 [進む]ボタンをクリックすると、[NFS情報を入力します。]という画面が表示される。[サーバーIPアドレス]には、PXEサーバのIPアドレスを入力。[ディレクトリ]には、クライアントのファイルを保存したディレクトリ名を入力する。

[NFS情報を入力します。]という画面

 [進む]ボタンをクリックすると、[ディスクレスクライアント用のカーネルを選択します。]という画面が表示される。ここでは、使用するカーネル(最新のものをお勧めする)を選択する。

[ディスクレスクライアント用のカーネルを選択します。]という画面

 [進む]ボタンをクリックすると、[ディスクレス環境設定の完了]という画面が表示されるので[適用]ボタンをクリックし、[新規]ウィンドウを表示する。このダイアログボックスで設定する項目は[ホスト名またはIPアドレス/サブネット]と[スナップショット名]だ。

 [ホスト名またはIPアドレス/サブネット]には、クライアントのホスト名かIPアドレス、もしくは接続しているネットワークのサブネットを指定する。ホスト名またはIPアドレスを指定すると、保存可能なデータ(スナップショット)がクライアントごとに保存される。サブネットを指定すると、接続を許可されたクライアントが同じスナップショットを使用することになる(ここでは、サブネットを指定した)。

 [スナップショット名]には、クライアントから読み書き可能なファイルを保存するディレクトリ名を指定する。

 設定が完了したら、[Generate]チェックボックスがオンになっていることを確認して、[OK]ボタンをクリックする。

[新規]ウィンドウ

 サーバの設定が完了すると、画面に[ネットワークインストールとディスクレス環境]ウィンドウが現れ、登録したホスト名が表示される。

ホスト名が表示された[ネットワークインストールとディスクレス環境]ウィンドウ

 次に、クライアントが起動する際に使用する設定ファイル(カーネルの場所などが記述されている)を変更して、各クライアント用のシンボリックリンクを作成する。

# cd /tftpboot/linux-install/pxelinux.cfg

 今回は、system-config-netbootで[ホスト名またはIPアドレス/サブネット]にサブネットを指定した。そのため、/tftpboot/linux-install/pxelinux.cfg/FFFFFF00というファイルが作成されている。これが、カーネルの場所などが記述されたファイルだ。

 このファイルのappendの行に「ramdisk_blocksize=1024」を追加する。この設定を行わないと、クライアントの起動時にKernel Panicが発生する。

default FC6-PXE

label FC6-PXE
    kernel FC6-PXE/vmlinuz
    append  initrd=FC6-PXE/initrd.img root=/dev/ram0 init=disklessrc NFSROOT=192.168.0.30:
/tftpboot/fc6 ramdisk_size=18972 ETHERNET=eth0 SNAPSHOT=vm01
 ramdisk_blocksize=1024

 そして、接続するクライアントのNICのMacアドレスを調べる。例えば、Macアドレスが「00-0c-29-f0-d8-a9」の場合には、先頭に「01-」を付けて、以下のようにシンボリックリンクを作成する。

# ln -s FFFFFF00 01-00-0c-29-f0-d8-a9

 クライアント起動用のイメージファイルにmount.nfsを追加する。この作業を行わないと、クライアントがNFSでのマウントに失敗する。編集方法は「ブート用のイメージファイルを編集するには」を参照のこと。念のため、作業用のディレクトリにinitrd.imgをコピーする。一連の手順は以下のとおりだ。

# cp /tftpboot/linux-install/FC6-PXE/initrd.img /tmp
# cd /tmp
# zcat initrd.img > initrd.dat
# mount -o loop initrd.dat /mnt
# cp /sbin/mount.nfs /mnt/sbin/
# cp /sbin/umount.nfs /mnt/sbin/
# cp /sbin/mount.nfs4 /mnt/sbin/
# cp /sbin/umount.nfs4 /mnt/sbin/
# umount /mnt
# gzip -c9 initrd.dat > initrd.img
# cd /tftpboot/linux-install/FC6-PXE/
# mv initrd.img initrd.img.org
# cp /tmp/initrd.img .

 以上でPXEサーバの準備は完了だ。クライアントを起動して、BIOS設定でネットワークブートを最優先にすると、自動的にPXEサーバに接続してFC6が起動する。

Linux Tips Index



 Linux Squareフォーラム Linux Tipsカテゴリ別インデックス
インストール/RPM ブート/ブートローダ
ファイル操作 環境設定
ユーザー管理 コンソール/ターミナル
X Window System セキュリティ
トラブルシューティング 他OS関係
ネットワーク ハードウェア
Webサーバ Samba
GNOME KDE
OpenOffice.org エミュレータ
ソフトウェア そのほか/FAQ
全Tips公開順インデックス Linux Tips月間ランキング
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間