CentOS - PXEサーバ構築
Updated:
今日は、「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にインストールします。
# rpm -qa | grep tftp ← 「TFTPサーバ」がインストールされているか確認
# yum -y install tftp-server ← インストールされていない場合はインストール
2.「 /etc/xinetd.d/tftp 」の編集
# 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 」の再起動
# /etc/rc.d/init.d/xinetd restart
4.ISOイメージの準備
インストールしたいOSのインストールISOイメージを適当なディレクトリにコピーしておく。 ※当方は、”/home/samba/iso”配下に「 CentOS5.4 」のインストールISOを配置しました。
5.ISOイメージをマウント
コピーしたISOイメージをマウントします。
# 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サーバ上にコピーする。
# 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 」がインストールされていない場合はインストールする。
# rpm -qa | grep syslinux ← 「syslinux」がインストールされているか確認
# yum -y install syslinux ← インストールされていない場合はインストール
8.「 pxelinux.0 」ファイルのコピー
“/usr/lib/syslinux”ディレクトリにある「 pxelinux.0 」を”/tftpboot/pxe”ディテクトリへコピーする。
# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/pxe/
9.「 menu.c32 」ファイルのコピー
今回は複数のOSを選択できるようにするため、メニューを準備する。 “/usr/lib/syslinux”ディレクトリにある「 menu.c32 」を”/tftpboot/pxe/syslinux”ディテクトリへコピーする。
# cp /usr/lib/syslinux/menu.c32 /tftpboot/pxe/syslinux/
10.PXEブート用の設定ファイルを作成
PXEブート用の設定ファイルを作成する。
# 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 」サーバをインストールしていない場合はインストールする。
# rpm -qa | grep dhcp
# yum -y install dhcp
12.「 DHCP 」サーバの設定
「 DHCP 」サーバの設定ファイルを以下のようにする。
# 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機能を無効にしておきます。
# /etc/rc.d/init.d/dhcpd start
14.HTTPサーバの設定
今回はISOファイルをHTTPサーバで公開するので、以下のように設定する。
# 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サーバを再起動する。
# /etc/rc.d/init.d/httpd restart
16.ファイアウォールの設定
「 iptables.sh 」でファイアウォールを設定している場合は以下のように記述を追加してポートを開放する。 以下のポート開放が必要。
サーバ ポート プロトコル
DHCP 67 UDP
TFTP 69 UDP
PXE 4011 UDP
「iptables.sh」を編集する。
#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」を再起動する。
# /etc/rc.d/init.d/iptables restart
18.確認
OSをインストールしたいマシンで、最初にネットワークでブートするようBIOSを設定して起動させる。 うまく起動すれば、PXEのメニュー画面が表示されるはずです。
(画像では、Fedora12のインストールも追加しています)
作業は以上です。
同様に色々とISOファイルをマウントできるので、通常FDやCDで起動させてメモリのテストを行う「Memtest86」等もできるはずです。 これから試してみます。
では。
Comments