3流プログラマのメモ書き

元開発職→現社内SEの三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(Linux)PXEサーバ(Ubuntu系)を立ててネットワークブートでCentOS6をインストールしてみた

今回、光学ドライブがなくUSBブートもできない端末に、RedHatEnterpriseLinux6.0のクローンである CentOS6.0 をインストーすることになりました。

この端末は幸いにも、ネットワークブート(PXE)に対応してしたので、そこからのインストールを試みてみました。

PXEサーバは Ubuntu10.04 をベースにしている EcoLinux10.04 を使うこととしました。

PXEサーバに必要なのは、DHCPサーバ、TFTPサーバ、HTTPサーバとなるので、これらをまずインストールします。

●TFTPサーバ

当初、xinetdスーパーサーバを介して、tftpd を使おうかと思ってました。

しかし、いざtftpdで環境構築するとネットワークブートしたクライアント側で「TFTP server does not support the tsize option 」というエラーが出てブートに失敗します。

これは Debian 系のTFTPDは tsize オプションをサポートしてないためのようです。

(Ubuntu系で tftp をインストーするには、 apt-get install tftpd でできます)

それで、TFTPサーバとしては tftpd-hpa を使うことにしました。

まず、インストールです。

apt-get install tftpd-hpa

公開するディレクトリを作成後、設定ファイルを修正します。

mkdir /tftpd

vi /etc/default/tftpd-hpa

TFTPD_DIRECTORY="/tftpd" ←公開するディレクト

RUN_DEAMON="yes" ←追記

service tftpd-hpa start ←サービス開始

ちゃんと動いているかどうかは、netstatでポートを確認するといいかもしれません。

netstat -an | grep 69

また、ダミーファイルを公開ディレクトリに配置し、WindowsPCのコマンドプロンプトでダウンロードできるか確認もできます。

tftp サーバIP get a.txt

DHCPサーバ

PXEクライアントは起動時にDHCPサーバからIPを取得する必要がありますが、ルータ等のDHCP機能では細かいオプションが指定できないため、自前で立てる必要があります。

既にDHCPサーバがLAN内にある場合は運用に気を付けないとおかしなことになります。

なので、PXEブートするときだけ別LANにして、DHCPサーバを起動するような方法をとったほうが良いかもしれません。

インストールは以下のようにします。

apt-get install dhcp3-server

DHCPサーバの設定ファイルを変更します。

vi /etc/dhcpd.conf

subnet 192.168.0.0 netmask 255.255.255.0 {

option subnet-mask 255.255.255.0;

option time-offset -18000;

filename "/linux-install/pxelinu.0" ←ロードするファイル名

next-server 192.168.0.2 ←TFTPサーバのIP(TFTP,DHCPサーバが同一マシンなら、自身のIPでもOK)

range dynamic-bootp 192.168.0.100 192.168.0.100; ←割り当てるIP範囲

default-lease-time 21600;

max-lease-time 43200;

}

設定が終われば、DHCPサーバを起動します。

service dhcp3-server start

なお、このままだとPC起動時にもDHCPサーバが立ち上がってしまうので、自動起動しないようにしておきます。

update-rc.d dhcp3-server disable

Apache

CentOS自体のインストールはHTTPを使って行います。(FTPでもいいのですが)

EcoLinuxにはWEBサーバが入ってないので、インストールします。

apt-get install apache2

service apache2 start

PXEブートローダ配置

PXEブートローダは syslinux パッケージに入っているようです。

EcoLinuxではデフォルトで入っていました。

PXEブートローダファイルを、TFTPの公開ディレクトリに配置します。

また、CentOSのISOファイルを、Apache公開ディレクトリにマウントし、ブートイメージをTFTP公開に配置します。

cp /usr/lib/syslinux/pxelinux.0 /tftpboot/linux_install/

mkdir /var/www/centos6

mount -t iso9660 -o loop /home/hoge/CentOS-6.0-i386-bin-DVD.iso /var/www/centos6

cp /var/www/centos6/images/pxeboot/vmlinuz /tftpboot/linux-install

cp /var/www/centos6/images/pxeboot/initrd.img /tftpboot/linux-install

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

mkdir /tftpboot/linux-install/pxelinux.cfg

vi /tftpboot/linux-install/pxelinux.cfg/default

↓ファイルの中身

default centos6

label dentos6

kernel vmlinuz

append load initrd=initrd.img devfs=nomount

●クライアントにて実行

後は、クライアントでネットワークブートを実施します。

(場合によってはBIOSでネットワークブートの優先度を上げる必要があるかもしれません。PCによってはBIOS起動の画面でファンクションキー押せばネットワークブートするのもあるようです)

DHCPよりIPが割り振られて、TFTP経由でPXEブートローダが読み込まれ、インストーラが起動します。

言語設定と、キーボード設定を行い、インストール元で URL を選択します。

URL欄で、ウェブサーバのCentOSをマウントしているディレクトリ( http://svip/centos6 )を入力します。

すると、Anacondaが立ちがありいつものインストール画面となります。(PCのグラフィックスペックが低い場合はテキストインストールになってしまいますが。。。)

ちょっとサーバを立てるのが手間ですが、非常に便利ですね。

参考:

Ubuntu Weekly Recipe:第47回 Ubuntuのネットワークインストールとapt-mirrorの活用|gihyo.jp … 技術評論社

きままなひとりごと Ubuntu 11.04 PXEブート環境の構築

第1回 ネットワーク経由でCentOSを導入する - 旧型ノートPCで本格サーバーを作ろう:ITpro

@IT:PXEネットワークブート用サーバを構築するには RedHat系でPXEサーバとする例です。

PXEネットワークブートでCentOSをインストール/kickstartによるインストール自動化 - Layer8 Reference RedHat系でPXEサーバとする例です。

Windows XP のネットワークインストール (Windows PE 3.0 使用) - regerege メモ帳 PXEWindowsをインストールする例ですが、Windowsはちょっと面倒くさそうです。