[CentOS][Linux] CentOS6.2をPXEサーバー化してmemtest86+を起動

近々自宅で主に使っているデスクトップPCのメモリを増設しようと思い、メモリチェック用に自宅サーバーをPXEサーバーとして使えるようにしてみました。
ついでにDHCPサーバーにもなりました。

今回使用した環境は以下のとおりです。

  • OS: CentOS6.2
  • LAN: 192.168.0.0/24


手順は以下の通り。

  1. 必要なパッケージ(tftp, syslinux, dhcp)をインストールする
  2. tftpの設定をする
  3. memtest86+の起動ファイルを取得する
  4. dhcpdの設定をする
  5. 起動!

ブロードバンドルーターのDHCP機能を使っている場合は必ず無効にしてください。IPアドレスを正しく取得できなくなる可能性があります!

ファイアーウォールを使っている人は次のポートを開けておいてくださいね。
dhcp -> 67:udp
tftp -> 69:udp
pxe  -> 4011:udp

1, パッケージのインストール

tftpサーバーとdhcpサーバー、PXEブートイメージを含むsyslinuxをインストールします

[root@server ~]# yum -y install tftp-server dhcp syslinux

syslinuxの依存関係で他のパッケージがインストールされると思いますが、とりあえずインストールしてしまいます。
xinetdをインストールしていない環境の方は、この段階でインストールしておいてください。次のステップで利用します。

2, tftp設定

tftpサーバーを設定します。xinetdを利用して必要なときに起動するようにします。

[root@server ~]# vi /etc/xinetd.d/tftp

変更箇所は2箇所です。

# default: off
# description: The tftp server serves files using the trivial file transfer 
#   protocol.  The tftp protocol is often used to boot diskless 
#   workstations, download configuration files to network-aware printers, 
#   and to start the installation process for some operating systems.
service tftp
{
    disable = no  # yes -> no
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /tftpboot  # デフォルトは "-s /var/lib/tftpboot" です。
    per_source      = 11
    cps             = 100 2
    flags           = IPv4
}

server_argsで指定したディレクトリは覚えておいてくださいね。以降のステップで利用します。
# server_argsのディレクトリ指定は、デフォルトのままでも構いませんし、別の場所に変更しても構いません。
# 以降は /tftpboot を指定したとして説明します。
編集がおわったら、xinetdを再起動しましょう。

[root@server ~]# service xinetd restart
xinetd を停止中:                                           [  OK  ]
xinetd を起動中:                                           [  OK  ]

3, memtest86+の起動ファイルを配置

クライアントの起動ファイルをダウンロードして配置します。
場所はtftpの設定で指定したディレクトリです。

[root@server ~]# cd /tftpboot
[root@server tftpboot]# wget http://www.memtest.org/download/4.20/memtest86+-4.20.bin.gz
#中略
[root@server tftpboot]# gunzip memtest86+-4.20.bin.gz
[root@server tftpboot]# mv memtest86+-4.20.bin memtest-4.20

続いて、PXEブート用のブートローダーをコピーします。

[root@server tftpboot]# cp /usr/share/syslinux/pxelinux.0 ./

PXEブートの設定をpxeboot.cfgディレクトリ以下に記述します。

[root@server tftpboot]# mkdir pxelinux.cfg
[root@server tftpboot]# cd pxelinux.cfg
[root@server pxelinux.cfg]# vi default
default memtest86 # labelと同じ
prompt 5
timeout 30
label memtest86 # defaultと同じ
kernel memtest-4.20 # tftpboot以下に配置したファイル名

4, DHCPの設定

DHCPサーバーとして動作できるように設定します。

[root@server ~]# vi /etc/dhcp/dhcpd.conf

書き方はDHCPサーバーの構築を説明しているサイトを参照したほうが説明もわかりやすいと思うので省略します。
新規にDHCPサーバーの設定をする方は、サンプルファイルを参照してとりあえず動作するようにしておいてください。

設定ファイルを記述したらもう2行書き加えます。

filename       "pxelinux.0" # /tftpbootからの相対パスでブートローダーを指定
next-server    192.168.0.1 # PXEサーバーのIPアドレス

dhcpdを再起動して、起動時に自動的に起動するようにします、

[root@server ~]# service dhcpd restart
#省略
[root@server ~]# chkconfig dhcpd on

5, 起動

それでは起動してみましょう。
予めクライアントのBIOSの設定を変更して、Network bootの優先順位を上げておきます。
pxebios
通常のPOST画面の後にこのような画面に切り替わるはずです。
上の画像はIPアドレスを取得しているところですね。
IPアドレスを取得し、PXEブートローダーをTFTPで取得できると下の画像のような表示になります。
pxeboot
放っておくと自動的にmemtestが走ります。

以上です。
内容の間違いなどありましたら、ご指摘ください。
今回は/tftpbootの直下にmemtestを配置しましたが、他のブートイメージ(例えばLinuxのインストールディスク)を配置する場合はサブディレクトリ以下に配置してブートメニューを作成することでディスクレスで起動できます。
memtestが入った起動ディスクを用意するのが面倒だという方は、一度試してみてください!

参考サイト

コメントを残す