LoginSignup
0
0

PXE boot で Linuxをインストールする [既存のDHCPサーバと共存できる (ProxyDHCPを使います)

Last updated at Posted at 2024-05-13

概要

PXEブートを利用して Linux OS を インストールする。

同じ環境を用意(後述)すれば、誰でも動作確認まで到達できる手順を作る。

この手順のメリット

・既存のDHCPサーバと共存できます。

自宅だと、Wi-FiルータやケーブルモデムのDHCP機能を使っている場合が多いと思われますが、
その場合には、PXEテスト中にネットワークを切り離したり、別のスイッチングハブに接続したりするのがとても面倒です。

この手順だと、ProxyDHCPを利用するため、既存のDHCPサーバは動かしたままでOKです。

PXEブートの環境

この手順では、
自宅など、"Wi-Fiルーター" や "ケーブルモデム" 等の DHCPサーバーが既に稼働している環境 での使用を想定して、Alma Linux を使って必要なサーバーをセットアップします。

概要図は以下の通り。

PXE-boot構成図-ページ1のコピー.drawio.png

注意事項

宅内での動作テストができるところまでを前提としているため、セキュリティは非常に甘くなっております。
実際の運用をお考えの方は、必要に応じてFirewall等の設定の見直しを行うなど、ご自身のご判断において設定変更等をお願いいたします。

利用したソフトやバージョンについて

とにかく書いてあるまま操作すれば動作する組み合わせとしました。

例えば、以下のような条件がありますが、
選択肢が1つ違うだけで、コンフィグの書き方が異なったり、追加の作業が必要になったりと、動作が確認できるまで、自分はかなり時間を要してしまいました。

そこで今回は太字にしてある条件に決め打ちすることで、できるだけ簡単にPXEブートを体験できるようにするのが目標です。

<項目> <選択肢 A> <選択肢 B>
PXEプログラム syslinux(pxelinux.0) iPXE
iPXEプログラム BIOS向け (undionly.kpxe) UEFI向け (ipxe.efi)
Operating System Linux WindowsPE (Windows10/11)
Linux Redhat系 Ubuntu,その他
Architecture 64bit 32bit

PXEブートの処理の流れについて

■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■

No 必要な情報 受診方法 送信元 値 (IPアドレス/ファイル名)
1 IPアドレス 既存のDHCPサーバから受け取る WiFiルータ、ケーブルモデム等 192.168.2.*** (既存のDHCPサーバのリース範囲から割当)
2 tftpサーバのIPアドレス 作成するDHCPサーバから受け取る dnsmasq 192.168.2.222(この手順の場合)
3 PXEプログラムの名前 作成するDHCPサーバから受け取る dnsmasq pxelinux.0
4 PXEプログラムの本体 作成するtftpサーバから受け取る isc-tftpd pxelinux.0
5 PXEプログラムが表示させるMenuファイル 作成するtftpサーバから受け取る isc-tftpd /var/lib/tftpboot/pxelinux.cfg/default
6 Linuxインストーラの起動ファイル 作成するhttpサーバから受け取る isc-tftpd /var/lib/tftpboot/centos/initrd.img /var/lib/tftpboot/centos/vmlinuz
7 Linuxインストーラからインストールされるファイル 外部WEBサーバから受け取る ミラーサイト /var/lib/tftpboot/pxelinux.cfg/default の "Label 1" に記載するミラーサーバーのURLからダウンロード
7' Linuxインストーラからインストールされるファイル 作成するhttpサーバから受け取る Nginx /usr/share/nginx/html/centos7/ に、コピーしたISOファイルの中身

■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■

検証環境

Windows / VMwareのバージョン

Host OS VMware Virtual Machine
Windows10 22H2 VMware Workstation 17.5.1 Player 【VM 1】 2x vCPU / 2G RAM / 20GB Strage
^ ^ 【VM 2】 2x vCPU / 2G RAM / 20GB Strage

vmw17-version.jpg

Virtual Machine について

OS Role バージョン 説明
【VM 1】 Almalinux Server(CUI) 9.3 PXEサーバを立ち上げる環境
$ uname -a
Linux alma 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 7 14:54:22 EST 2023 x86_64 x86_64 x86_64 GNU/Linux
OS Role バージョン 説明
【VM 2】 CentOS --- 7.9 PXE経由でインストーラを立ち上げるOS

アプリの一覧

機能 アプリ名 使ったバージョン 備考
TFTP Server isc-tftpd tftp-server-5.2-37.e19.x86_64
HTTP Server Nginx nginx-1:1.20.1-14.el9_2.1.alma.1.x86_64
DHCP Server dnsmasq dnsmasq-2.85-14.el9_3.1.x86_64 ※ Proxy DHCPとして動作させる
PXE boot syslinux syslinux-6.04-0.20.el9.x86_64

設定ファイルの一覧

機能 アプリ名 コンフィグのファイル名(フルパス)
TFTP Server isc-tftpd ---
HTTP Server Nginx /etc/nginx/nginx.conf
DHCP Server dnsmasq /etc/dnsmasq.d/pxeboot.conf
PXE boot syslinux (pxelinux.0) /var/lib/tftpboot/pxelinux.cfg/default

作業フォルダの一覧

機能 サーバアプリ 作業フォルダ(デフォルト) この手順で作るサブフォルダ
TFTP Server isc-tftpd /var/lib/tftpboot/ /var/lib/tftpboot/centos/
HTTP Server Nginx /usr/share/nginx/html/ /usr/share/nginx/html/centos7/

PXEファイルの説明

PXE ファイル名 バージョン
syslinux pxelinux.0 BIOS向け。今回はこれを使います。
syslinux lpxelinux.0 上の強化版。今回は使いません。
BIOS版 undionly.ipxe iPXEのBIOS版。今回は使いません。
UEFI版 ipxe.efi iPXEのUEFI版。今回は使いません。

[1] 準備

[1-1] OSインストール

  • Alma Linux 9.3

マルチユーザーモード/CUI で isoからインストール。

ファイル直リンク(10GB)
https://ftp.riken.jp/Linux/almalinux/9.3/isos/x86_64/AlmaLinux-9.3-x86_64-dvd.iso

rikenのmirror site

インストール時の設定

デバイス 概要
メモリ 2 GB
プロセッサ 2
ネットワークアダプタ ブリッジ(自動)

インストール概要

ソフトウェアの選択」では「サーバー」にチェックを入れる。

※「GUI使用」ではないので注意。

※ 右側の「選択した環境用のその他のソフトウェア」にはチェックを入れない。

alma-software-selection.jpg

ネットワーク設定

項目
IPアドレス 192.168.2.222
Netmask 255.255.255.0
Gateway 192.168.2.1
ネームサーバー 192.168.2.1

※各設定はテスト用。 ---> 各自の環境にあわせて変更してください。
※IPv6は無効にする。

[1-2] 共通の設定や準備

  • OSをアップデート/アップグレード
sudo dnf update
sudo dnf upgrade
  • よく使うツールをインストール
sudo dnf install nmap wget traceroute
  • ファイアウォールを無効にする(宅内のみの利用を想定しているため)
#サービスを停止する
sudo systemctl stop firewalld.service

#再起動時に、サービスが起動しないように無効化しておく
sudo systemctl disable firewalld.service
  • selinuxを無効にする

状態を確認する(デフォルト値の Enforcing が表示される)

$ getenforce
Enforcing 

設定を変更する

sudo cp /etc/selinux/config /etc/selinux/config.bak
sudo vi /etc/selinux/config

以下のように書き換える

#SELINUX=enforcing
SELINUX=permissive

一度、サーバを再起動する(下記のいずれかでOK)

sudo init 6
or
sudo shutdown -r now
or
sudo reboot

再起動したら、状態を確認する(Permissiveと表示されればOK)

$ getenfoce
Permissive

[2] PXEブート機能

[2-1] TFTP Server (isc-tftpd)

■ tftpd の設定

  • tfptdをインストールする。確認に使えるよう tftp もインストールしておく。
sudo dnf install tftp tftp-server
インストール済み:
  tftp-5.2-37.el9.x86_64
  tftp-server-5.2-37.el9.x86_64

サービス起動&自動起動の設定~状態の確認

sudo systemctl start tftp.service
sudo systemctl enable tftp.service

sudo systemctl status tftp.service

[2-2] HTTP Server (nginx)

■ httpd の設定

  • 今回は nginx をインストールする。

(基本的な機能しか使わないので、ApacheでもOK)

sudo dnf install nginx
インストール済み:
  almalinux-logos-httpd-90.5.1-1.1.el9.noarch
  nginx-1:1.20.1-14.el9_2.1.alma.1.x86_64
  nginx-core-1:1.20.1-14.el9_2.1.alma.1.x86_64
  nginx-filesystem-1:1.20.1-14.el9_2.1.alma.1.noarch

サービス起動&自動起動の設定~状態の確認

sudo systemctl start nginx
sudo systemctl enable nginx

sudo systemctl status nginx

[2-3] DHCP Server (dnsmasq)

※DHCPサーバは dnsmasq を使う

 → dnsmasq は Proxy DHCP として機能できる
 → Proxy DHCP とは、IPリースは既存のルーター等に任せて、
  PXEブートに必要な tfpサーバの情報の配布だけを担当できる。

 このため、宅内のモデムやWi‐Fiルータと共存できる。
 (ネットワークの切り替え不要!)

インストール

$ sudo dnf install dnsmasq
インストール済み:
  dnsmasq-2.85-14.el9_3.1.x86_64

dnsmasq の設定ファイルを作成する

  • 以下のディレクトリに新規でファイルを作る。
sudo vi /etc/dnsmasq.d/pxeboot.conf
  • ファイルの中身
    注意点 :
    -- interface は、環境に合わせてを必ず追加する
    -- dhcp-range は、今回の Proxy DHCP 利用に合わせて "ネットワークアドレス表記" と "proxy" になる。(この設定が最も混乱した。。)
    -- IPアドレスは環境に合わせて変更する
    -- dhcp-boot は、pxelinux.0 を利用する。
port=0
log-dhcp
interface=lo, ens160

dhcp-range=192.168.2.0,proxy

dhcp-boot=pxelinux.0,192.168.2.222
pxe-service=x86PC,"Network Boot",pxelinux,192.168.2.222

【参考1】

  • interface名の調べ方

nmcli コマンドで調べられる。
→この例の場合は、ens160 が対象のデバイス名

$ nmcli
ens160**: 接続済み から ens160
        "VMware VMXNET3"
        ethernet (vmxnet3), 00:0C:XX:XX:XX:XX, hw, mtu 1500
        ip4 デフォルト
        inet4 192.168.2.222/24
        route4 192.168.2.0/24 metric 100
        route4 default via 192.168.2.1 metric 100

lo: 接続済み (外部) から lo
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
        inet4 127.0.0.1/8
        inet6 ::1/128
        route6 ::1/128 metric 256

DNS configuration:
        servers: 192.168.2.1 8.8.8.8
        interface: ens160

[3] syslinuxを準備する

sudo dnf install syslinux
インストール済み:
  mtools-4.0.26-4.el9_0.x86_64
  syslinux-6.04-0.20.el9.x86_64
  syslinux-nonlinux-6.04-0.20.el9.noarch

今回は以下のファイルを使います。

ファイル名 説明
pxelinux.0 ブートローダファイル
ldlinux.c32 pxelinux.0 の依存ファイル
lpxelinux.0 pxelinux.0 の強化版
menu.c32 キャラクタベースメニューを表示するファイル
libutil.c32 menu.c32 の依存ファイル
reboot.c32 再起動を実行するファイル
libcom32.c32 reboot.c32 の依存ファイル
# TFTPサーバのルートにコピーする
sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
#sudo cp /usr/share/syslinux/lpxelinux.0 /var/lib/tftpboot/
sudo cp /usr/share/syslinux/ldlinux.c32 /var/lib/tftpboot/
sudo cp /usr/share/syslinux/libutil.c32 /var/lib/tftpboot/
sudo cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
sudo cp /usr/share/syslinux/reboot.c32 /var/lib/tftpboot/
sudo cp /usr/share/syslinux/libcom32.c32 /var/lib/tftpboot/

[4] 起動ファイルの準備

[4-1] CentOS 7 をインターネット経由でインストールする場合

  • 新規ディレクトリを作成する
  • wgetコマンドで起動に必要なファイルをダウンロードする

sudo mkdir -p /var/lib/tftpboot/centos

cd /var/lib/tftpboot/centos

sudo wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/initrd.img
sudo wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz

mirror site list

[4-2] CentOS 7 を ローカルドライブからインストールする場合

  • ISOファイルをLinux上にダウンロードする

ファイル直リンク(4.4 GB)

# 今回は作業しているユーザー(user)のホームディレクトリにダウンロードしてみます。
cd /home/user/

# ダウンロード開始 
wget https://ftp.riken.jp/Linux/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso

少し時間がかかるので、一旦ここで休憩しましょう('ω')**

rikenのmirror site
https://ftp.riken.jp/Linux/centos/7.9.2009/isos/x86_64/

  • ISOファイルの中身をローカルにコピーする
# ISOマウント用のフォルダを作る ※フォルダ名は /mnt など何でもよい。
# AlmaLinuxでは /media という場所があるので、今回はその中にフォルダを作る。

sudo mkdir /media/centos

sudo mount /home/user/CentOS-7-x86_64-DVD-2009.iso /media/centos/
 
 
# httpd (nginx) のルートに、centosイメージを置く場所を作る
 
#cd /usr/share/nginx/html/
#sudo mkdir centos7
sudo mkdir /usr/share/nginx/html/centos7

 
# ISOイメージの中身を、httpdルートの中の centos7 フォルダへコピーする

sudo cp -rfv /media/centos/* /usr/share/nginx/html/centos7/

[5] PXEメニューファイルの作成

以下の、 フォルダ名とファイル名は固定 です。(そういう仕様)

/var/lib/tftpboot/pxelinux.cfg/default

# フォルダを作成
sudo mkdir /var/lib/tftpboot/pxelinux.cfg

# ファイルを作成
sudo vi /var/lib/tftpboot/pxelinux.cfg/default

参考にしたページ
https://reintech.io/blog/installing-configuring-pxe-boot-server-almalinux-9

CentOS 7 インストール用のメニュー

default menu.c32
prompt 0
timeout 300
ONTIMEOUT local

menu title PXE Boot Menu

label 1
	menu label ^1) Install CentOS 7 via the Intrenet
	kernel centos/vmlinuz
	append initrd=centos/initrd.img method=http://ftp.riken.jp/Linux/centos/7/os/x86_64/ ip=dhcp

label 2
  menu label ^2) Install CentOS 7 via local drive
  kernel centos/vmlinuz
  append initrd=centos/initrd.img method=http://192.168.2.222/centos7 devfs=nomount

label 3
menu label ^3) Boot from local drive
localboot 0

ファイル中に書かれているURLのソース

[6] AlmaLinuxのサービス起動の確認

以下2つのポートだけ開いているのが確認できたらOKです
(tftpd と dhcpd は見えなくてOK)

$ nmap localhost
Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-23 20:58 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00017s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed tcp ports (conn-refused)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

[7] PXEブート確認用のVMの準備

今回は Virtual Machine をもう1台作ります。

スペックは、作業中のAlmaLinuxのVMと同じにしてください。

(空いているハードウェアがあれば、物理的なPCでもOKです)

デバイス 概要
メモリ 2 GB
プロセッサ 2
ネットワークアダプタ ブリッジ(自動)

[8] PXEブートを試す

  • まず、共通のメニューが表示されます

[8-1] Networkインストール

  • メニューから「1) Install CentOS 7 via the Intrenet」を選択してEnterキーを押します。

ファイルをインターネット経由でダウンロードするため、少し時間がかかります。

この画面が表示されたら成功です!

[8-2] ローカルインストール

  • メニューから「2) Install CentOS 7 via local drive」を選択してEnterキーを押します。

image.png

  • このパターンでは、ローカルにコピーしたファイルからロードするため、1分程度で起動するはずです。

この画面が表示されたら成功です! (インターネット経由と同じ画面)

[9] インストール完了

ここまで出来たらすべて完了です。お疲れ様でした!

image.png

[10] まとめ

だいたいどういう流れで動作するのかが、体験できました。

作成する過程で、問題が出た時の原因の切り分けにかなり時間を要しましたので、
一度、動作した状態からならば、この先のアレンジがしやすくなると考えています。

  • UEFI から起動
  • Ubuntu をインストール
  • Windows10/11 をインストール (そのためには、まず Windows PE を起動させる) 

 等、また機会がありましたらやってみたいと思います。


  • 再度、PXEサーバをイチから作りたくなった時のための備忘録として書き始めましたが、どなたかのご参考にもなれば幸いです。

ここまで読んでいただきありがとうございました。

参考にさせていただいた記事等

主に以下のサイトを参考にさせていただきました。
どれもPXE(iPXE)ブートでのOSを解説されたページですが、特にお世話になった部分ごとに分けてご紹介させていただきます。

■ PXEブートの仕組みや全体の流れについて ■
https://qiita.com/Yuhkih/items/c7cc9978ee107784c97f
https://qiita.com/sandopan65/items/22922bbf5bc806962e13

■ dnsmasqを使ったProxy DHCPの設定 ■
https://zappy.hatenablog.jp/entry/2018/05/31/190434
https://qiita.com/arachan@github/items/c16a475b958ac761743a

■ syslinux (pxelinux.0) での menu ファイルの作り方 ■
https://reintech.io/blog/installing-configuring-pxe-boot-server-almalinux-9
http://www.mikitechnica.com/14-centos72-pxe.html

■ 作業全体の説明 や syslinux関連ファイルの解説 ■
https://amaneku.hatenadiary.com/entry/2020/02/15/011947

更新履歴

2024/4/24 初版発行
2024/4/30 全体的に微修正

0
0
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
0
0