LoginSignup
23
22

More than 3 years have passed since last update.

OS自動インストールを行うためのPXEブート環境を作る

Last updated at Posted at 2020-08-03

はじめに

最近はクラウド環境が増えてきて、1からOSインストールを実施する機会は減っているかもしれませんが、VirtualBox等でちょっとテストマシンを作ったり、クラウド利用料などのお金の心配せずにマシンを使いたいといった場合にISOファイルやDVDからインストールするような場合も多々あるかと思います。

私はVirtualBoxでテスト用仮想マシンを作ることが多いですが、毎回OSインストール→セットアップするのも面倒なので、あらかじめPXEブート構成を作っておき、Kickstartでテストマシンを作成することをよくやっています。

今まではCentOS7系OSでPXEブート環境を作っていましたが、今回CentOS8系OSでブート環境を作ったので内容を残しておこうと思います。

PXEブートとは

Wikipediaより

Preboot eXecution Environment(PXE、ピー・エックス・イー、ピクシー)は、コンピュータのブート環境のひとつ。インテルの策定したネットワークブートの規格である。
ネットワークブートを利用することにより、ストレージをもたないクライアントコンピュータや、ストレージに別のOSが導入されているクライアントコンピュータがサーバ上のOSイメージを使用して起動できる。

PXEブートは基本的に、OSがインストールされていない状態からのブートを前提としているため、ネットワーク経由でブートイメージを取得する必要があります。

そのため、Wikipediaにも記載されている通り、ブートイメージを配布するためのTFTPサーバとTFTPサーバと通信するためのアドレスを払い出すDHCPサーバが必須となります。

PXEブートの起動シーケンス

PXEブート時は起動直後のDHCP要求で、IPアドレスとともに起動用ブートイメージが格納されているTFTPサーバの場所ブートイメージファイル名を要求します。

DHCPサーバから応答を受け取ると、受け取った情報に従ってTFTPサーバにブートイメージブート構成ファイルを要求することで、OSの起動に必要となるOSイメージファイルOS構成ファイルの場所を把握し、ブート構成ファイルに記載されている内容に従って、指定されたプロトコルでOSイメージ等をダウンロードします。(下図参照)

pxeboot.png

今回の記事ではPXEの起動で必要となるDHCPサーバ、TFTPサーバの構築まで行います。

DHCP構成を考える

DHCPサービスはブロードキャストで通知されるDHCPリクエストを受け付けるため、基本的に構築するマシンと同一ネットワーク上に設置設置する必要があります。
※途中の機器でDHCPリレーの設定が行えるようであれば、別のネットワーク上に設置することもできます。

また、同一ネットワーク上に複数のDHCPサーバが存在した場合の動作は早い者勝ちで意図しない動作となってしまうので、間違ってもVirtualBox等で作成したDHCPサービスが動いている仮想マシンをブリッジで社内ネットワークに繋ぐことはやめましょう!!

ただ、テスト環境でPXEブートを行いたいけど、DHCPサーバが簡易的なものでPXEブートの設定ができなかったり、テストのためだけにDHCPサーバを集約したりするのは面倒なので、今回はProxy DHCP機能を使うことで既存のDHCPサーバと同居できる構成とします。

Proxy DHCPとは

DHCPサーバが複数存在した場合の動作は早い者勝ちで、先に受け取ったDHCPサーバのアドレスを使用しますが、Proxy DHCP機能を使用すると、PXEブートする際に使用するnext-serverboot-filename等のパラメータのみDHCP Offerで送信して、それ以外は他DHCPサーバのパラメータを使用することになります。

大雑把に言うと、PXEブート用のパラメータのみ上書きするイメージです。

そのため、他DHCPサーバが動作していても、ネットワークに影響を及ぼすことなく同居することが可能です。
※他DHCPサーバがPXEブート機能も提供している場合はその限りではないのでご注意を。

構築環境

今回はVirtualBoxで以下構成の仮想マシンにPXEブート環境をセットアップします。

ネットワーク1はゲートウェイは設定せずホストオンリーのセグメントのアドレス(192.168.56.105)を固定で適当に割り当てて、ネットワーク2はDHCPでアドレスをもらうようにしておきます。

また、Proxy DHCPを使用するため、VirtualBoxのDHCP機能は有効のままとしておきます。

構成 種別
OS CentOS 8.2.2004
ソフトウェアの選択 最小限のインストール
ネットワーク1 ホストオンリーアダプター
ネットワーク2 NAT(パッケージインストール用)

構築方法

本構築では以下手順でPXEサーバ構築まで進めます。
PXEサーバを使ったKickstartなどはまた別途。

  1. SELinuxの停止
  2. パッケージインストール
  3. DHCPサービスセットアップ
  4. TFTP用設定
  5. dnsmasqサービス有効化
  6. Apache設定
  7. Apacheサービス有効化
  8. firewalld許可設定

SELinuxの停止

作業に都合が悪いのでSELinuxを停止しておきます。

SELinuxの無効化
sudo setenforce permissive
sudo sed -i -e "/^SELINUX=/s/=.*/=disabled/g" /etc/selinux/config

パッケージインストール

以下パッケージをインストールします。

尚、dnsmasqサービスはDHCP機能Proxy DHCP機能だけではなく、TFTP機能も含まれるため、個別にTFTPサービスをインストールことはせず、今回はdnsmasqパッケージのみインストールすることとします。

インストールパッケージ 用途
dnsmasq DHCP、TFTP用
syslinux ブート用ファイル取得用
httpd Kickstart等でのOSイメージ転送等
必要パッケージインストール
sudo dnf -y install dnsmasq syslinux httpd

DHCPサービスセットアップ

今回PXEブートで使用するネットワークはVirtualBoxホストオンリーネットワークを使用します。
アドレス等は各環境に合わせて適宜修正して下さい。

/etc/dnsmasq.d/pxeboot.conf
sudo cat << _EOF_ | sudo tee /etc/dnsmasq.d/pxeboot.conf
# DHCPサービス設定
dhcp-range=192.168.56.0,proxy
log-dhcp
dhcp-boot=pxelinux.0,192.168.56.105
pxe-service=x86PC,"Network Boot",pxelinux,192.168.56.105
# TFTPサービス設定
enable-tftp
tftp-root=/tftpboot
_EOF_

※単純なヒアドキュメントの書き方だと権限がなく書き込めなかったためteeにパイプして書き込み。

TFTP用設定

PXEブート用ファイル格納ディレクトリ作成と必要モジュールをTFTPディレクトリに格納します。

TFTPディレクトリ作成と必要モジュールの格納
sudo mkdir -p /tftpboot/pxelinux.cfg
sudo cp -p /usr/share/syslinux/{pxelinux.0,ldlinux.c32,libcom32.c32,libutil.c32} /tftpboot/

dnsmasqサービス有効化

DHCP、TFTPの設定ができたらdnsmasqサービスを有効化します。

dnsmasq有効化
sudo systemctl enable --now dnsmasq

Apache設定

PXEブートを使用して、実際に各OSをネットワーク経由でインストールするにはHTTP/HTTPSNFS等でOSイメージやOS設定ファイルを転送する必要があります。

今回はHTTPでOSイメージを転送することを想定してApacheのセットアップを行っておきます。

PXEブート用ディレクトリ作成
sudo mkdir /pxeboot
/etc/httpd/conf.d/pxeboot.conf
sudo cat << _EOF_ | sudo tee /etc/httpd/conf.d/pxeboot.conf
Alias /pxeboot/ "/pxeboot/"
<Directory "/pxeboot">
Options Indexes MultiViews FollowSymlinks
AllowOverride None
Require all granted
</Directory>
_EOF_

Apacheサービス有効化

httpdサービスを有効化します。

httpd有効化
sudo systemctl enable --now httpd

firewalld許可設定

firewalldを有効にしている場合は、以下サービスに対してfIrewalldの許可設定も行います。

許可サービス名 ポート番号
dhcp 67/udp
proxy-dhcp 4011/udp
tftp 69/udp
http 80/tcp
https 443/tcp
firewalld許可設定
sudo firewall-cmd --add-service=dhcp --zone=public --permanent
sudo firewall-cmd --add-service=proxy-dhcp --zone=public --permanent
sudo firewall-cmd --add-service=tftp --zone=public --permanent
sudo firewall-cmd --add-service=http --zone=public --permanent
sudo firewall-cmd --add-service=https --zone=public --permanent
firewalld有効化
sudo firewall-cmd --reload

まとめ

ここまでの構築でPXEブートする環境が整いました。
実際にPXEサーバを使用したOSインストールについては次回紹介します。

23
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
22