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 |
|
これで http が提供しているファイルの一覧をブラウザから確認出来るようになった。
04. iso の用意
前項を見た通りだが、nginx の公開ディレクトリに linux/ubuntu/20.04.4/ubuntu-20.04.4-desktop-amd64.iso
をコピー。
05. casper の用意
前項で用意した iso をマウントするなりして、casper
フォルダの中にある
- initrd (初期 RAM ディスク)
- vmlinuz (カーネルの実行バイナリ)
を TFTP サーバの公開ディレクトリから見て pxelinux/os/ubuntu/20.04.4/casper/initrd
、pxelinux/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 | (公開ディレクトリ) |
07. ブート設定ファイルの修正
TFTP サーバの公開ディレクトリから見て pxelinux/pxelinux.cfg/default
として保存されているファイルを編集。
1 | default menu.c32 |
これで準備完了。
07. PXE ブートしてみる
今回も VMware ESXi 上の仮想マシンで確認してみた。