mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

CentOS - PXEサーバ構築

[ サーバ構築 ] [ CentOS, PXE ]

こんばんは。

今日は、「PXEサーバ」についてです。 通常OSをインストールする際、ディスクやUSBメモリなどを使用したりすると思います。 (外部のサイトに接続してネットワークインストールすることもあるかと思います)

しかし、手元にインストールイメージ(ISOファイル)があり、インストールしようとしているマシンにDVD・CDドライブが無くて、USBメモリやUSB接続のDVD・CDドライブからのブートもできない(したくない)、という場合に有効なインストール方法です。

そんな時に有効な方法が「 PXEブート 」という方法です。 「PXEブート」とは「 Preboot eXecution Environment 」の略で、マシン本体にISOイメージ等を準備しなくても、OSをインストールできる規格です。

「 PXEブート 」を実現するには、ISOイメージを保持していてPXE機能を提供するサーバが必要です。 また、当然インストールするマシンはネットワークブート可能でなければなりません。

作業記録

【前提条件】(今回の当方の場合)

  • 今回は「 CentOS5.4 」サーバを使用
  • HTTPサーバ(ISOファイル公開用)も構築済み(今回の場合)
  • ファイルサーバ(ISOファイル置き場所用)も構築済み
  • PXEブートさせるOSは複数を予定し、メニューを使用する

【必要なもの】

  • TFTPサーバ
  • DHCPサーバ
  • インストール用ISOイメージ

1.「 TFTP 」サーバのインストール

「 TFTP 」サーバをインストール元のCentOSにインストールします。

1
2
# rpm -qa | grep tftp ← 「TFTPサーバ」がインストールされているか確認
# yum -y install tftp-server ← インストールされていない場合はインストール

2.「 /etc/xinetd.d/tftp 」の編集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# vi /etc/xinetd.d/tftp

# 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
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot
        disable                 = no  ← "yes" を "no" に変更
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

3.「 xinetd 」の再起動

1
# /etc/rc.d/init.d/xinetd restart

4.ISOイメージの準備

インストールしたいOSのインストールISOイメージを適当なディレクトリにコピーしておく。 ※当方は、"/home/samba/iso"配下に「 CentOS5.4 」のインストールISOを配置しました。

5.ISOイメージをマウント

コピーしたISOイメージをマウントします。

1
2
3
# mkdir /mnt/centos_5-4 ← 今回の場合
# chmod -R 777 /mnt/centos_5-4 ← 権限変更
# mount -t iso9660 -o loop /home/samba/iso/CentOS-5.4-i386-bin-DVD.iso /mnt/centos_5-4

※次回以降マシン起動時に自動でマウントさせるなら「/etc/fstab」に登録が必要。

6.ブートイメージをTFTPサーバ上に準備

ISOイメージのブートイメージをTFTPサーバ上にコピーする。

1
2
3
4
5
# mkdir /tftpboot
# mkdir /tftpboot/pxe
# mkdir /tftpboot/pxe/centos_5-4
# cp /mnt/centos_5-4/images/pxeboot/vmlinuz /tftpboot/pxe/centos_5-4/
# cp /mnt/centos_5-4/images/pxeboot/initrd.img /tftpboot/pxe/centos_5-4/

7.「 syslinux 」インストール

「 syslinux 」がインストールされていない場合はインストールする。

1
2
# rpm -qa | grep syslinux ← 「syslinux」がインストールされているか確認
# yum -y install syslinux ← インストールされていない場合はインストール

8.「 pxelinux.0 」ファイルのコピー

“/usr/lib/syslinux"ディレクトリにある「 pxelinux.0 」を”/tftpboot/pxe"ディテクトリへコピーする。

1
# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/pxe/

9.「 menu.c32 」ファイルのコピー

今回は複数のOSを選択できるようにするため、メニューを準備する。 “/usr/lib/syslinux"ディレクトリにある「 menu.c32 」を”/tftpboot/pxe/syslinux"ディテクトリへコピーする。

1
# cp /usr/lib/syslinux/menu.c32 /tftpboot/pxe/syslinux/

10.PXEブート用の設定ファイルを作成

PXEブート用の設定ファイルを作成する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# mkdir /tftpboot/pxe/pxelinux.cfg
# vi /tftpboot/pxe/pxelinux.cfg/default
default syslinux/menu.c32

MENU TITLE ****  PXE Boot Menu  ****

label 1
        MENU LABEL ^1. Boot from Local HDD
        localboot 1

label 2
        MENU LABEL ^2. Install CentOS 5.4
        kernel centos_5-4/vmlinuz
        append load initrd=centos_5-4/initrd.img devfs=nomount

※この例では、ローカルHDDとCentOSインストールを選択できるようにしています。 ※また、「timeout」を使用して指定時間操作がなければ自動でローカルHDDから起動させようと考えましたが、当方の環境(CentOS5.4(SYSLINUXは4.00))ではなぜかできませんでした。(旧バージョンのSYSLINUXでもだめでした)

11.「 DHCP 」サーバのインストール

「 DHCP 」サーバをインストールしていない場合はインストールする。

1
2
# rpm -qa | grep dhcp
# yum -y install dhcp

12.「 DHCP 」サーバの設定

「 DHCP 」サーバの設定ファイルを以下のようにする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcpd.conf ← サンプルをコピー
# vi /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
not authoritative;                                       ← エラー対策

#subnet 192.168.0.0 netmask 255.255.255.0 {
subnet 192.168.11.0 netmask 255.255.255.0 {              ← 自分の環境に合わせて変更

# --- default gateway
#       option routers                  192.168.0.1;
        option routers                  192.168.11.1;    ← ルータのIPアドレス
        option subnet-mask              255.255.255.0;

#       option nis-domain               "domain.org";    ← コメントアウト
#       option domain-name              "domain.org";
        option domain-name              "mk-mode.com";   ← ドメイン設定
#       option domain-name-servers      192.168.1.1;
        option domain-name-servers      192.168.11.3;    ← DNSサーバのIPアドレス

#       option time-offset              -18000; # Eastern Standard Time  ← コメントアウト
        filename "/pxe_install/pxelinux.0";              ← PXEサーバの設定ファイル
        next-server                     192.168.11.3;    ← PXEサーバのIPアドレス
#       option ntp-servers              192.168.1.1;
#       option netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;

#       range dynamic-bootp 192.168.0.128 192.168.0.254;
        range dynamic-bootp 192.168.11.21 192.168.11.29; ← 割当てるIPアドレスを指定(今回の場合、192.168.11.21~192.168.11.29)
        default-lease-time 21600;
        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address
        #host ns {                                       ← コメントアウト(特定のPCに固定IPを振る場合に使用)
        #       next-server marvin.redhat.com;           ← コメントアウト(特定のPCに固定IPを振る場合に使用)
        #       hardware ethernet 12:34:56:78:AB:CD;     ← コメントアウト(特定のPCに固定IPを振る場合に使用)
        #       fixed-address 207.175.42.254;            ← コメントアウト(特定のPCに固定IPを振る場合に使用)
        #}                                               ← コメントアウト(特定のPCに固定IPを振る場合に使用)
}

13.「 DHCP 」サーバの起動

「 DHCP 」サーバを起動します。 ※ルータでDHCP機能を有効にしている場合は、もちろんDHCP機能を無効にしておきます。

1
# /etc/rc.d/init.d/dhcpd start

14.HTTPサーバの設定

今回はISOファイルをHTTPサーバで公開するので、以下のように設定する。

1
2
3
4
5
6
7
8
# vi /etc/httpd/conf/httpd.conf
 ↓以下を追加↓
Alias   /centos_5-4 "/mnt/centos_5-4"

    Options MultiViews Indexes FollowSymLinks
    Order deny,allow
    Deny from all
    Allow from 192.168.11.0/24 127.0.0.1

15.HTTPサーバ再起動

HTTP公開を有効にするため、HTTPサーバを再起動する。

1
# /etc/rc.d/init.d/httpd restart

16.ファイアウォールの設定

「 iptables.sh 」でファイアウォールを設定している場合は以下のように記述を追加してポートを開放する。 以下のポート開放が必要。

1
2
3
4
サーバ  ポート  プロトコル
DHCP      67    UDP
TFTP      69    UDP
PXE     4011    UDP

「iptables.sh」を編集する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#vi iptables.sh
 ↓以下を追加↓
###
# DHCP
###
iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 67 -j ACCEPT

###
# TFTP
###
iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 69 -j ACCEPT

###
# PXE
###
iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 4011 -j ACCEPT

17.ファイアウォール再起動

ファイアウォールを有効にするため、「iptables」を再起動する。

1
# /etc/rc.d/init.d/iptables restart

18.確認

OSをインストールしたいマシンで、最初にネットワークでブートするようBIOSを設定して起動させる。 うまく起動すれば、PXEのメニュー画面が表示されるはずです。

PXE_BOOT_1

(画像では、Fedora12のインストールも追加しています)


作業は以上です。

同様に色々とISOファイルをマウントできるので、通常FDやCDで起動させてメモリのテストを行う「Memtest86」等もできるはずです。 これから試してみます。

では。

Comments