do_su_0805's blog

dairyquestions は typo です。

FAI が動く環境を構築して、Debian 9.8 install が自動でできるまで

TL;DR

  • Ubuntu 18.04.02 LTS 上に FAI をインストールした。
    • 一部、デフォルトの設定だと動かなかったので、環境に合わせた修正を実施した。
  • デフォルトで内包されている DebianGnome install が、PXE boot で自動的に完了することを確認した。

FAI とは

  • FAI - Fully Automatic Installation
  • FAIは、Linuxシステムの構築環境を管理できるツールです。
    • 物理サーバ
    • 仮想サーバ (KVM 用の image や AWS 用の AMI などが作れるらしいということまでは知っている)
    • chroot 環境などにも使えるらしい…。

最近、思い立って自宅サーバ(もどき)を増強し、2台のまっさらなデスクトップが誕生しました。

以前は一台で、Xen を入れていたんですが、今回は1台を KVM 、もう一台を Xen にしようかなとか考えていたところ、そもそもホストサーバの構築に PXEboot できるようにしたいなとか、イメージ作るまでは何度もトライアルすることになるしやっぱ PXEboot できるようにしたいなとか考えていました。

別件で AWS EC2 用の AMI について調べていたところ、Debian 9 の公式 AMI 構築に FAI を使われていることを知りました。

いろんなイメージ生成、管理などができるなら、自宅に入れてみようかなと思い立ったのが今回のきっかけです。

というわけで、今回は自宅に FAI 環境を用意して、PXE boot 経由での install ができる環境を、チュートリアルを眺めつつ作ってみました。

(なお、後述するチュートリアルでは、KVM 環境でのテストが例として紹介されています。)

自宅構成

f:id:do_su_0805:20190318005531j:plain
自宅環境

ちゃんと構築しきっているわけではないですが、大体上記の図のようなネットワークになっています。 今回は、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-server192.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 してみます。すると、以下のような画面になります。

f:id:do_su_0805:20190318013321p:plain
PXEboot してほっておくとこの画面になる

ここで今回は Gnome を選択してみます。

f:id:do_su_0805:20190318013438p:plain
Gnome を選択して Enter した画面

すると、注意喚起の画面が出ますが、気にせず OK を押します。

8分ほど待つと、Please Reboot みたいなメッセージが出てくるので、その通り再起動します。

  • ここで、ネットワークブート優先の場合はそれを切るのを忘れないように

すると、ログイン画面が出てきます。Creating the configuration space を見ると小さく書いてありますが、デフォルトのユーザ/パスワードが設定されており、demo/fai でログインすることができます。

f:id:do_su_0805:20190318013844p:plain
起動しました。

手軽で便利ですね。以上で構築は完了です。

次は自分の思い通りにいじってみたり、PXEboot 以外での起動方法なども試してみようと思います。ありがとうございました。