(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でポートを確認するといいかもしれません。
また、ダミーファイルを公開ディレクトリに配置し、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
CentOS自体のインストールはHTTPを使って行います。(FTPでもいいのですが)
EcoLinuxにはWEBサーバが入ってないので、インストールします。
apt-get install apache2
service apache2 start
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 メモ帳 PXEでWindowsをインストールする例ですが、Windowsはちょっと面倒くさそうです。