TL;DR
- Ubuntu 18.04.02 LTS 上に FAI をインストールした。
- 一部、デフォルトの設定だと動かなかったので、環境に合わせた修正を実施した。
- デフォルトで内包されている Debian の Gnome install が、PXE boot で自動的に完了することを確認した。
FAI とは
- FAI - Fully Automatic Installation
- FAIは、Linuxシステムの構築環境を管理できるツールです。
最近、思い立って自宅サーバ(もどき)を増強し、2台のまっさらなデスクトップが誕生しました。
結果としてi7-3770K/MEM32GB/256GBSSD+1TBHDD*2+500GBHDD*2な筐体(右)と、i7-860/MEM8GB/160GBHDD+320GBHDD*2な筐体(左)が出来上がりました。
— do_su_0805 (@do_su_0805) March 13, 2019
何しようかね pic.twitter.com/uWX9YUqbTJ
以前は一台で、Xen を入れていたんですが、今回は1台を KVM 、もう一台を Xen にしようかなとか考えていたところ、そもそもホストサーバの構築に PXEboot できるようにしたいなとか、イメージ作るまでは何度もトライアルすることになるしやっぱ PXEboot できるようにしたいなとか考えていました。
別件で AWS EC2 用の AMI について調べていたところ、Debian 9 の公式 AMI 構築に FAI を使われていることを知りました。
いろんなイメージ生成、管理などができるなら、自宅に入れてみようかなと思い立ったのが今回のきっかけです。
というわけで、今回は自宅に FAI 環境を用意して、PXE boot 経由での install ができる環境を、チュートリアルを眺めつつ作ってみました。
(なお、後述するチュートリアルでは、KVM 環境でのテストが例として紹介されています。)
自宅構成
ちゃんと構築しきっているわけではないですが、大体上記の図のようなネットワークになっています。 今回は、Windows10 マシン上の Hyper-V に、FAI が入った PXEboot Server と、PXEboot サーバ経由でのインストールを検証するためにもう一台のホストを Hyper-V 上に構築しました。
PXEboot 経由でインストールができるようになるまで
基本的に、FAI Guide (Fully Automatic Installation) を参考にしつつ環境を整えていきます。
1. FAI 環境のインストール
まずは、Install the FAI packages セクションを参考にしつつ、インストールを進めていきます。 この時点で、fai 関連のパッケージと、dhcpd と tftpd と nfs server daemon が自動起動します。
そのまま、Creating the configuration space まで進めると、環境構築としてはひと段落します。
ここからは、各デーモン関連の設定が入りますが、想定されている環境と自環境の誤差があるため吸収しつつ進めていきます。NFS 関連については問題なかったため、DHCP と TFTP について触れています。
Configuration of the DHCP daemon セクション
当該ホストには DHCP の機能を持たせておらず、代わりに IX2105 が DHCP の機能を有しているため、同様の設定を IX2105 に設定します。
具体的には、PXEboot するために必要な next-server
filename
を設定する必要があります。
DHCP 設定方法 | IXルータによるDHCP を参考に、以下設定を IX2105 の DHCP profile に設定しました。
next-server
に192.168.1.9
filename
に"fai/pxelinux.0"
また、このセクションでは、demohost
という対象に対しての DHCP 関連のエントリ作成などをしていましたが、特に対応していません。
後述しますが、pxeboot 設定を作る際に default を生成することで全台共通にして進めています。
TFTP
当該セクションには設定不要という説明がされていますが、実際には設定が必要でした。
具体的には、tftp が /srv/tftp
を見てくれておらず、/var/lib/tftpboot
を見ている状態になっています。
この設定自体は、 /etc/default/tftpd-hpa
に記載がされています。
$ grep TFTP_DIRECTORY /etc/default/tftpd-hpa TFTP_DIRECTORY="/var/lib/tftpboot"
今回は単純に、/var/lib/tftpboot
を削除して、/srv/tftp
のシンボリックリンクにすることにしました。
# rmdir /var/lib/tftpboot # ln -s /srv/tftp /var/lib/tftpboot # systemctl restart tftpd-hpa
2. 実際に PXEboot 用の config 生成をしてみる
Creating the PXELINUX configuration からです。
チュートリアルに記載のあるものから少しだけ改変して実行しました。
$ sudo fai-chboot -f verbose,sshd,createvt,menu -Iv -u nfs://192.168.1.9/srv/fai/config default
- オプションが
-IFv
だったのを-f verbose,sshd,createvt,menu
にしています。
これは-F
オプションで前半三つ (verbose,sshd,createvt
) までは自動で入るのですが、これに menu を足したかったからです。 -u
で指定する nfs の部分に192.168.1.9
と直打ちしています。とりあえずの処置です。- 最後の対象設定を
default
に変更しています。PXEboot の性質上、/pxelinux.cfg
配下に、default
ではなく、自IPが16進変換されたファイル( 192.168.33.100 であればC0A82164
)が優先される挙動みたいですが、今回は IP が変わってもいいように default で生成しました。
この後、もう一つ設定変更が必要で、生成されたファイル (僕の場合は /srv/tftp/fai/pxelinux.cfg/default
) の中を書き換える必要がありました。
append initrd
から始まる行にroot=
から始まるセクションがありますが、ここの書き換えが必要です。
append initrd=initrd.img-4.9.0-8-amd64 ip=dhcp root=/srv/fai/nfsroot:vers=3 rootovl FAI_FLAGS=verbose,sshd,createvt,menu FAI_CONFIG_SRC=nfs://192.168.1.9/srv/fai/config FAI_ACTION=install
- 上記では、
root=/srv/fai/nfsroot:vers=3
になっていますが、これを下記のように書き換えます。
append initrd=initrd.img-4.9.0-8-amd64 ip=dhcp root=/dev/nfs nfsroot=192.168.1.9:/srv/fai/nfsroot,vers=3 rootovl FAI_FLAGS=verbose,sshd,createvt,menu FAI_CONFIG_SRC=nfs://192.168.1.9/srv/fai/config FAI_ACTION=install
root=/dev/nfs nfsroot=192.168.1.9:/srv/fai/nfsroot,vers=3
になりました。こうしないと、PXEboot した後、途中でなぜか192.168.1.1
(GW ですね) を nfsmount しようとしてこけました。- 設定例として、GW サーバも兼ねている想定のため、そうなっているのかもしれません。
3. 試してみる
ここまで設定すると、PXEboot 経由での install が可能になります。 実際にやってみると、以下のような感じです。
まずは空の VM を作成して、PXEboot してみます。すると、以下のような画面になります。
ここで今回は Gnome を選択してみます。
すると、注意喚起の画面が出ますが、気にせず OK を押します。
8分ほど待つと、Please Reboot みたいなメッセージが出てくるので、その通り再起動します。
- ここで、ネットワークブート優先の場合はそれを切るのを忘れないように
すると、ログイン画面が出てきます。Creating the configuration space を見ると小さく書いてありますが、デフォルトのユーザ/パスワードが設定されており、demo/fai
でログインすることができます。
手軽で便利ですね。以上で構築は完了です。
次は自分の思い通りにいじってみたり、PXEboot 以外での起動方法なども試してみようと思います。ありがとうございました。