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


# 概要

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

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



##
**とにかくすぐにやってみたい、という方は、 " [1] 準備 " へ進んでください。**

--


# この手順のメリット
・既存のDHCPサーバと共存できます。

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

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


<!--
# What is the advantage of this article?
-->

<!-- 自力で書いた英文
There are a lot of instructions or just notes about installing OS via PXE boot on the Internet, whether it is in English or in Japanese. However, it is somewhat troublesome to test PXE at home. Because usually there have already been DHCP lease function via Wi-Fi Router or Broadband modem or so on. Whenever you run another DHCP server for providing TFTP Server address and the PXE application, you need to disconnect  the  original DHCP server from your home network, or you need to do the test on separate network.
In order to avoid this situation, it is very usufull to use proxy DHCP function. Hence, I made up my mind to write this document. I hope those who wish to know how to set up PXE sever with proxyDHCP, can do it with the steps below.
-->

<!-- DeepL に 直してもらった文 (公開用)
There are many instructions and notes on the Internet, whether in English or Japanese, on how to install an OS with PXE boot. However, trying PXE at home is a bit of a hassle. If you want to start another DHCP server to provide a TFTP server address or PXE application, you must either disconnect the original DHCP server from your home network It must be disconnected or tested on a different network.
To avoid this situation, it is convenient to use the proxy DHCP function. Therefore, we decided to write this document. If you want to know how to set up a PXE server with proxy DHCP, please refer to the following steps.
 -->


<!--
# 対象となる方 (初心者向け)
・Linuxに挑戦してみたけど、うまくいかなかった方
・以前に勉強したり実務で使っていたが、忘れてしまった方、思い出すためにリハビリしたい方
・だいたいわかってはいるけれど、環境を作るのに１から考えるのが面倒くさいなあ、、、っていう方


## いきさつ
WEB上の記事や体験談を参考にして挑戦するも、
成功するまでに何度も失敗してはやり直しをした。

DHCP〜TFTP〜HTTP と 複数のステップがあるため、
ゴールに辿り着くまでに挫折してしまうケースもあると思った。（何度もつまづいた。。）

そこで、手順通りに作業をしさえすれば、
動作確認まで到達できて、一応の成功体験を得ることが出来るような　「手順書」 にも
一定の需要があるんじゃないかと考えた。


困難を自分で乗り越える過程でしか得られないスキルやノウハウはもちろんあるし、そういった経験を積むことは必須だと思う。
しかし、マネるだけであっても、Linuxに触り慣れることが出来たり、作ったもの動くことの喜びを感じることで、次のステップへの足がかりになるような記事にも存在意義があるとも考えた。

（とても詳しく書いてくれている記事は多くありますが、当初の自分の実力では、どれか１つを読みさえすればゴールにたどり着けるというものはなく、あちこちの情報を組み合わせ、ようやく動作させることが出来ましたので。）
-->


# PXEブートの環境

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

概要図は以下の通り。

![PXE-boot構成図-ページ1のコピー.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/381c573d-37de-b2c2-087f-cdfd4bba7f63.png)

<!-- 【背景が白バージョン】 
![PXE-boot構成図-ページ1.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/c190a77d-fc0e-6da1-47cd-154971cc06e7.png)
-->


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



# 利用したソフトやバージョンについて
とにかく書いてあるまま操作すれば動作する組み合わせとしました。

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

そこで今回は**太字**にしてある条件に決め打ちすることで、できるだけ簡単に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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/932c6783-733e-ba4c-412c-039b19f751ea.jpeg)


## Virtual Machine について
||OS|Role|バージョン|説明|
|:--|:--|:--|:--|:--|
|【VM 1】 |Almalinux|Server(CUI)|9.3|PXEサーバを立ち上げる環境|

```bash
$ 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
https://ftp.riken.jp/Linux/almalinux/9.3/isos/x86_64/



### インストール時の設定

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


### インストール概要
「**ソフトウェアの選択**」では「サーバー」にチェックを入れる。

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

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

![alma-software-selection.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/eced8db9-bc04-6628-033d-a85e0007d57d.jpeg)


### ネットワーク設定

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

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


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

<!--
- **epel-release をインストール**

```bash
sudo dnf install epel-release
```
-->

- **OSをアップデート／アップグレード**

```bash
sudo dnf update
sudo dnf upgrade
```

- **よく使うツールをインストール** (自分用：不要な方はスキップして下さい：この手順では使いません)

```bash
sudo dnf install nmap wget traceroute
```

- **ファイアウォールを無効にする（宅内のみの利用を想定しているため）**

```bash
#サービスを停止する
sudo systemctl stop firewalld.service

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

- **selinuxを無効にする**

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

```bash
$ getenforce
Enforcing 
```

```bash
# 一旦、元ファイルのバックアップを取っておきます。
sudo cp /etc/selinux/config /etc/selinux/config.bak
```

以下のように書き換える （以下２つのどちらのパターンでもOK）

(sedで置き換える場合)
```bash
# 置き換え
sudo sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config

# 確認
sudo cat /etc/selinux/config
```

(viで直接編集する場合）
```bash
sudo vi /etc/selinux/config

#SELINUX=enforcing
SELINUX=permissive
```

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

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

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

```bash
$ getenfoce
Permissive
```





# [2] PXEブート機能


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


### **■ tftpd の設定**

- tfptdをインストールする。確認に使えるよう tftp　もインストールしておく。

```bash
sudo dnf install tftp tftp-server
```

```bash
インストール済み:
  tftp-5.2-37.el9.x86_64
  tftp-server-5.2-37.el9.x86_64
```


サービス起動＆自動起動の設定～状態の確認

```bash
sudo systemctl start tftp.service
sudo systemctl enable tftp.service

sudo systemctl status tftp.service
```


## [2-2] HTTP Server (nginx)

### **■ httpd の設定**

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

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

```bash
sudo dnf install nginx
```

```bash
インストール済み:
  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
```


サービス起動＆自動起動の設定～状態の確認

```bash
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ルータと共存できる。
 　（ネットワークの切り替え不要！）
 

### インストール

```bash
$ sudo dnf install dnsmasq
```

```bash
インストール済み:
  dnsmasq-2.85-14.el9_3.1.x86_64
```


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

- 以下のディレクトリに**新規**でファイルを作る。

```bash
sudo vi /etc/dnsmasq.d/pxeboot.conf
```

- ファイルの中身
*注意点* : 
-- interface は、環境に合わせてを必ず追加する
-- dhcp-range は、今回の Proxy DHCP 利用に合わせて "ネットワークアドレス表記"　と "proxy" になる。（この設定が最も混乱した。。）
-- IPアドレスは環境に合わせて変更する
-- dhcp-boot は、**pxelinux.0** を利用する。

```bash
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
```

### 【参考１】
- interface名の調べ方

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

```bash
$ 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
```

<!--
### 【参考２】
- lpxelinux.0 と pxelinux.0 の違いについて解説してくれているページ

https://amaneku.hatenadiary.com/entry/2020/02/15/011947#pxelinux0-%E3%81%A8-lpxelinux0-%E3%81%AE%E9%81%95%E3%81%84
-->


## [3] syslinuxを準備する

```bash
sudo dnf install syslinux
```

```bash
インストール済み:
  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 の依存ファイル|
<!--
|~~poweroff.com~~|~~シャットダウンを実行するファイル~~|
|~~poweroff.c32~~|~~シャットダウンを実行するファイル~~|
-->


```bash
#　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/
```

<!--
#sudo cp /usr/share/syslinux/poweroff.c32 /var/lib/tftpboot/
-->




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

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

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

http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz

```bash
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

http://mirror.centos.org/centos/

http://ftp.riken.jp/Linux/centos/


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

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


**ファイル直リンク（4.4 GB）**

```bash
# 今回は作業しているユーザー(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ファイルの中身をローカルにコピーする

```bash
# 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`


```bash
# フォルダを作成
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 インストール用のメニュー

```bash
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
```

<!--
label 4 
menu label ^4) Reboot
COM32 reboot.c32
-->


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

http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/

http://ftp.riken.jp/Linux/centos/




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

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

```bash
$ 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 をもう１台作ります。

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

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

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


## [8] PXEブートを試す

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/72a05b49-2789-3700-9a3a-646ee2cc2444.png" width="80%">



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

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

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/0fb2448e-3ae4-420e-698d-775d798efed2.png" width="60%">


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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/2c3b0181-734e-6562-c489-539d375cdd39.png" width="75%">



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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/30b55af8-8e84-bdeb-268d-bb059c0b0411.png)

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

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/ad201b81-5886-2a09-71b2-b1d2972a5222.png" width="50%">



### [9] インストール完了

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/45a3ac16-39a9-b72d-ecc6-508d6294f59b.png" width="50%">


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774516/2f49c665-2ac4-05f4-9ac1-b8c716f92323.png)



## [10] まとめ

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

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

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

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

---

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


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




# 素朴な疑問に答えるコーナー

## PXEサーバー側は AlmaLinux で、ブートさせるクライアント側は CentOS7 なのはナゼ ？

**PXEサーバー側**
なるべく最新のディストリビューションでサーバーを作りたかったからで、
私が使いやすいと思ったRedhat系にしました。

Rocky Linux も候補に挙がりましたが、私の環境では dnf / yum を使った時のレスポンスが、Alma の方が安定して速度が出たからです。ご利用のNW環境によっても変わるかもしれません。

**クライアント側**
同じAlma Linuxのバージョン（執筆時の最新版9.3）にしたかったですが、
ブートさせる設定を作る手順で一手間増えてしまう※ ため、より簡単に試せるCentOS7にしました。

CentOS7 はちょうど執筆時頃(2024年の春)にサポートが終了することも把握していましたが、手に入りやすいことや、PXEブートさせるまでの設定がシンプルになるため選定しました。

これは、この手順では、PXEブートを実際に体感していただくことを主目的としたためです。


※どう一手間かかるか気になる方はやってみてください。。
　CentOS7よりも面倒なんです。



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

主に以下のサイトを参考にさせていただきました。
どれも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 全体的に微修正
-->