Introduction

前回は PXE ブートで memtest86+ を起動した。
今回は Ubuntu をブートさせてみる。

今回も情報が色々混ざっていて、何が正しいのかよくわからないので苦労した。

How to do?

ポイントは

  • 初期 RAM ディスク (initrd)、カーネルの実行バイナリ (vmlinuz) に casper を使う
  • http サーバが必要

これだけ。

01. 環境の確認

ネットワーク環境は下記。

  • サブネット: 192.168.11.0/24
  • PXE サーバ (Alpine Linux 3.20.2): 192.168.11.109
  • TFTP サーバ (既存のファイルサーバ): 192.168.11.17
  • DHCP サーバ (既存の Buffalo ルータ): 192.168.11.1
  • HTTP サーバ (nginx。50080 でリッスン): 192.168.11.17

02. dnsmasq のインストール

前回と同様。

03. http サーバのインストール

今回は nginx。
docker で用意した。

index.html は削除し、 nginx.conf の http セクション辺りに、 autoindex を付与する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;

+ autoindex on;
+ autoindex_exact_size off;
+ autoindex_localtime on;
}

これで http が提供しているファイルの一覧をブラウザから確認出来るようになった。

index

04. iso の用意

前項を見た通りだが、nginx の公開ディレクトリに linux/ubuntu/20.04.4/ubuntu-20.04.4-desktop-amd64.iso をコピー。

05. casper の用意

前項で用意した iso をマウントするなりして、casper フォルダの中にある

  • initrd (初期 RAM ディスク)
  • vmlinuz (カーネルの実行バイナリ)

casper

を TFTP サーバの公開ディレクトリから見て pxelinux/os/ubuntu/20.04.4/casper/initrdpxelinux/os/ubuntu/20.04.4/casper/vmlinuz として保存する。

initrd と vmlinuz は、他の linux にも存在するが、Ubuntu の場合はこの casper からでないと起動しない。
というよりも、これらは基本的に起動したい OS から持ってくるのが齟齬がないはずなので、面倒でも毎回コピーしてくるべき。

06. ブートメニューの用意

今回はきちんとしたブートメニューを用意する。
前回同様、Linux ならどのディストリビューションでもいい (と思う) ので、 syslinux パッケージをインストールし、ブートイメージを取り出す。

インストール後、 /usr/share/syslinux 配下の

  • ldlinux.c32
  • pxelinux.0
  • menu.c32
  • libutil.c32

を TFTP サーバの公開ディレクトリから見て pxelinux の配下に保存する。

現時点で、公開ディレクトリは下記のようになっている筈。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(公開ディレクトリ)
└─pxelinux
│ ldlinux.c32
│ libutil.c32
│ menu.c32
│ pxelinux.0

├─memtest
│ └─v7.00
│ memtest64

├─memtest
│ └─os
│ └─ubuntu
│ └─20.04.4
│ ubuntu-20.04.4-desktop-amd64.iso

└─pxelinux.cfg
default

07. ブート設定ファイルの修正

TFTP サーバの公開ディレクトリから見て pxelinux/pxelinux.cfg/default として保存されているファイルを編集。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
default menu.c32
prompt 0
timeout 300
ONTIMEOUT local

menu title ########## PXE Boot Menu ##########

label memtest86
menu label ^Memtest86+ v7.00
kernel /memtest/v7.00/memtest64

label ubuntu_20.04.4
menu label ^Ubuntu 20.04.4 LTS (Focal Fossa)
kernel os/ubuntu/20.04.4/casper/vmlinuz
append initrd=os/ubuntu/20.04.4/casper/initrd ip=dhcp url=http://192.168.11.17:50080/linux/ubuntu/20.04.4/ubuntu-20.04.4-desktop-amd64.iso

これで準備完了。

07. PXE ブートしてみる

今回も VMware ESXi 上の仮想マシンで確認してみた。