はじめに
PC Engines社製のAPU, APU2はVGA出力がなく、通常はルーター・サーバーなどの用途で使用するためキーボード・マウスも接続せず、必要な場合はシリアルコンソール(RS-232C, D-sub 9pin)経由でアクセスしています。
APU/APU2はPassmark値では1000前後の性能ですが、2GB or 4GBのメモリがあり、自作ルーター・スイッチとしては十分です。
いろいろ試す都度、OSを再インストールするのは大変なので、APU/APU2のiPXE機能を利用して作業を半自動化しています。
またメモリの制限があり、2GB版のAPU/APU2では利用できなかったので、USBメモリ経由での自動インストールにも対応しました。
これまでUbuntu 18.04を導入してから20.04にアップグレードして利用していましたが、22.04がリリースされてしばらく経つので、構成を変更して、22.04が導入できるようにします。
Ubuntu 20.04がリリースされた時点でも検討しましたが、AutoInstallの挙動にあやしい点があったので見送っていました。20.04.4では十分に安定していると思われたので、今回変更に挑戦することにしました。
USBメモリからOSを自動インストールできるのであれば、iPXEは不要な気もしますが、昔から利用していた経緯があるので、実験も兼てiPXE機能を利用していきます。
2GB版 APU/APU2 への対応
2GB版のAPU/APU2にUbuntu 22.04を導入する場合には、USBメモリを利用してOSを導入してください。
References
- ubuntu.com - Netbooting the server installer on amd64
- https://www.molnar-peter.hu/en/ubuntu-jammy-netinstall-pxe.html
成果物
iPXEホストとなるAPUを構成するためのプロジェクトファイルをGitHubで公開しています。
使い方自体は、GitHub上のREADME.mdファイルを参照してください。
iPXEホストとなるAPUは2GBメモリ版を想定していますが、iPXE経由でOSを導入する対象のAPU/APU2は4GB版である必要があります。
機器の構成
iPXEホスト側
今回構築するインストールイメージを提供するiPXEサーバーは以下のような構成です。
- Hardware: APU (CPU: AMD G-T40E, Memory: 2GB, Disk: 128GB, NIC: 1Gbps x3)
- OS: Ubuntu 22.04 LTS amd64版 (18.04からのバージョンアップ)
- Software:
- TFTP, DHCPサーバー (dnsmasq)
- Webサーバー (nginx)
ホストはOSが導入済みで、ネットワークに接続していることを前提としています。
以前は同じくPC Engines社製のALIXを利用していましたが、256MBのメモリではDebian 11の最低要件を満たすことができません。Debian 10までは256MBメモリもサポートしているのでALIXを引き続き使う事は可能ですが、今後のことを考えて2GBメモリ版のAPUに引っ越すことにしました。
導入対象(APU/APU2)の基本的な構成
SDカードは使用せずに、mSATA接続でSSDを使用しています。
また firmware は現時点の最新にしています。PXE bootの機能が充実しているので、製品購入時のままにすることはおすすめしません。
APU/APU2のFirmwareの更新については下記の記事を参照してください。
基本的な構成
dnsmasqにより、TFTPとDHCPサーバーを構成し、nginxがWebサーバーとして必要なファイルを提供します。
Nginxが提供するファイルについて
数が少ないので、読み込み順は後になりますが、Webサーバーが提供するファイルについて説明します。
- /app/www/ubuntu-22.04-live-server-amd64.iso
- /app/www/user-data
- /app/www/meta-data
ubuntu-22.04-live-server-amd64.iso ファイルはAPU/APU2からダウンロードされ、OSの導入に利用されます。
user-data ファイルは自動インストールに必要な全ての設定が含まれています。
meta-data ファイルは、空ファイルですが、必ず存在する必要があります。
dnsmasqが提供するファイルについて
dnsmasqのTFTP機能はAPU/APU2の起動に必要なカーネルイメージのダウンロードに利用されます。
- /app/ub2204/pxelinux.0
- /app/usb2204/ldlinux.c32
- /app/ub2204/pxelinux.cfg/default
- /app/ub2204/casper/vmlinuz
- /app/ub2204/casper/initrd
pxelinux.0 と ldlinux.c32 ファイルはホストの起動に必要なファイルです。
defaultファイルはpxelinux.0が自動的に読み込みます。カーネルを起動するために必要な設定が記述されています。
vmlinuzとinitrdファイルはISOファイルに含まれているファイルを/mnt/iso経由でコピーしています。
dnsmasqの機能について
OS導入対象のAPU/APU2のiPXE機能はfirmwareを最新にしておくと、自動的にDHCP経由でネットワーク接続に必要な情報を取得します。
/etc/dnsmasq.d/ipxe.conf ファイルには、TFTPとDHCPの両方の設定が含まれています。
dnsmasqが持つもう一つの機能であるDNSサーバーが53番ポートを利用しますが、systemd-resolved.service とバッティングするので、dnsmasqを起動する前に削除する必要があります。
Ansibleによる構成
makeコマンドを実行すると、$ ansible-playbook site.yaml
が呼び出され、playbooks/ping.yml と playbooks/default.yaml が実行されます。
roles/YasuhiroABE.myfavorite-setting は、自作のファイル配置などもろもろのサーバー設定を自動化するためのタスクを含んでいます。
enp1s0にはインターネットに接続しているネットワークを接続し、OS導入対象のAPU/APU2はenp3s0のNICとスイッチを経由して接続します。
スイッチを利用しない場合、enp3s0はDOWNステートになってしまいます。
このAnsible Playbookにより、追加のファイル配置と、cron-aptによるパッケージの自動更新、locale/timezoneの設定、などの様々な(余計な)設定が構成されます。
APU/APU2にUbuntu 22.04を導入する
まずネットワークケーブルで、enp1s0(シリアル端末側のNIC)とiPXEホストのens3s0に接続されているスイッチを接続します。
Firmwareが最新版になっただけでは、iPXE機能は無効化されているので、電源を投入後、F10キーを押下することでBIOSメニューに入り、"Setup"を選択します。'n'を選択するとネットワークブートが有効になるので、's'を押下し保存して再起動します。
次に、F10キーか 'N' キーを押下するようにメッセージがでるので、'n'か'N'を押下しiPXEモードに入ります。
そこからは自動的にpxelinux.cfg/defaultの内容がロードされインストールが進みます。
以上