PXEブートで楽をする

PXEブートで楽をする

PXE(Preboot eXecution Environment)ブートを使いOSのインストールを少し楽にするコラムです。 他に色々な技術を組み合わせると、OSインストールの自動化もできるようになります。 今回のコラムは、PXEブートに焦点をあてて紹介したいと思います。

PXEブート

PXE(Preboot eXecution Environment)ブートとは、ネットワークカードに搭載されている機能で、ネットワーク上のリソースを使いシステムをブートする方法です。

PXEブートを使えば、大量のコンピュータのインストール作業をコンピュータの電源を入れるだけで全て自動的にインストールする事が出来ます。大量のコンピュータを扱うクラウド環境やデータセンタでは必須の技術です。

ちなみに著者は、コース環境の準備を行うにあたり毎回クライアントPCのOSを再インストールする事になるのですが、このPXEブートを使ってクライアントPC環境のインストールを自動化しています。PXEの仕組みが無いと、毎週数十台のコンピュータを毎回1台1台手動でインストールしなければいけません。こうなると休日返上でお仕事ですね….

PXEに必要なもの

PXEブートを行うためには、いくつかのソフトウェアが必要となります。

  1. PXEブートの仕組みを提供するサーバOS(今回はCentOS)
  2. DHCPサーバ(PXE起動時のネットワーク情報をクライアントに提供)
  3. TFTPサーバ(NBP(Network Bootstrap Program)を提供するサーバ)
  4. ファイルサーバ(OSイメージを提供するサーバ、今回はWebサーバを使用)
  5. インストールで使用するOSディスクのイメージデータ

以上がPXEブートで必要な物です。

DHCPサーバの準備

PXEブート環境を作成するには、まずベースとなるサーバOSを準備し、つぎに、DHCPサーバを準備します。

# yum -y install dhcp (DHCPサーバのインストール)
# vim /etc/dhcpd/dhcpd.cof (DHCPサーバのコンフィグ)
# systemctl enable dhcpd (DHCPサーバの自動起動)
# systemctl start dhcpd (DHCPサーバの起動)

/etc/dhcpd/dhcpd.conf の編集例

default-lease-time      21600;
max-lease-time          43200;
ddns-update-style       ad-hoc;

subnet 192.168.0.0 netmask 255.255.255.0 {
 option broadcast-address    192.168.0.255;
 option subnet-mask          255.255.255.0;
 option routers              192.168.0.1;
 option domain-name          "example.com";
 option domain-name-servers  192.168.0.3, 192.168.0.4;
 option netbios-name-servers 192.168.0.3;
 range                       192.168.0.100 192.168.0.200;
}

※必要なネットワーク構成に編集します。

TFTPサーバの準備

OSをインストールするための、ブートプログラムを配布するためのサーバを準備します。

# yum -y install tftp-server (TFTPサーバのインストール)
# vim /etc/xinetd.d/tftp (xinetdの設定編集)
# systemctl start xinetd.service (xinetdの起動)

/etc/xinetd.d/tftpの編集例

{
 socket_type             = dgram
 protocol                = udp
 wait                    = yes
 user                    = root
 server                  = /usr/sbin/in.tftpd
 server_args             = -s  /var/lib/tftpboot
 disable                 = no
 per_source              = 11
 cps                     = 100 2
 flags                   = IPv4
 }

※必要な構成に編集します。

# yum -y install syslinux syslinux-tftpboo (PXEブートに必要なファイルのインストール)
# mv initrd.img vmlinuz /var/lib/tftpboot/ (CentOSのISOイメージの中にあるimages/pxebootのファイルをコピー (インストーラのブートファイル))
# mkdir /var/lib/tftpboot/pxelinux.cfg
# vim /var/lib/tftpboot/pxelinux.cfg/default (PXEブート時に表示されるメニューを作ります)
# cp /boot/grub/splash.xpm.gz /var/lib/tftpboot/pxelinux/splash.xpm.gz (スプラッシュイメージのコピー)

/var/lib/tftpboot/pxelinux.cfg/default ファイル編集例

default vesamenu.c32
prompt 1
timeout 600

label linux
  menu label ^CentOS-7.0-x86_64 Installer
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://192.168.0.200/centos/7/os/x86_64/

(inst.repo はCentOS7のISOイメージディスク内容を公開しているファイルサーバのアドレスです)

ファイルサーバ(webサーバ)の準備

OSのインストールディスクを公開します。インターネットに繋がる場合は、外部の公開されているサーバを代用する事も出来ます。今回は、PXEのサーバ上にWebサーバとして構築します。

# yum -y install httpd (webサーバのインストール)
# mkdir -p /var/www/html/centos/7/os/x86_64/
# OSのISOイメージを /var/www/html/centos/7/os/x86_64/ にコピーする
# systemctl enable httpd
# systemctl start httpd

Clientを起動してPXEブートを行う

上記のPXEサーバ設定が完了したら、クライアントPCを起動してインストールを開始します。クライアントPCでPXEブートを行う場合は、PCのメーカによって異なりますが、再起動のPCであれば F12 , F9 を押しながらシステムを起動するとPXEブートで起動します。

後は、表示されたメニューに従いインストールを進めることができます。

PXEブート、ぜひ使ってみましょう

いかがでしたでしょうか。

また、今回紹介したPXEブートと自動インストールの仕組みを組み合わせることで任意の形式にカスタマイズされた状態でOSをインストールする事が出来ます。今回はCentOS7ベースで紹介しましたが、その他のOSでも同様にPXEブート環境を準備する事が出来ます。

毎回システムのインストールで困っている場合、PXEブート環境を準備してみては如何でしょか?個人的には、検証環境のOSを準備する時にPXEブートを活用しています。検証に必要な環境を仮想マシンのベースでPXEブートを使い短時間で自動的に準備する事ができるので大変便利です。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。