目次


MaaSで行こう!(3.6.2変!)


はじめに

いや、なんでわざわざ、MaaS を使って Rocky のプロビジョニングをする?意味わからん!
それはまさに正しい見解です。RHEL系なら The Foreman とか Cobbler でいいじゃん!Ansibleは?
だって、出来るって書いてあるんだから、やってみたくなるでしょ?


結論:そんなに簡単じゃない!


Copliot 使って Gemini も使い、何がおかしいのかさっぱりわからない状態で何とか答えにたどり着きました!

Packer : 地獄の始まり


さあ、packer をGitからclone して、Rocky のminimal.iso を置けばもうそれで終わりでーす!

cd ~/packer-maas/rocky8
pwd
ls -l Rocky-8-10-x86_64-minimal.iso
packer build rocky8.pkr.hcl

はじまりはじまり・・・・・


そんなわけがない、まず、minimal.iso そんなのどこに置いたん知らんがな?と言われます。


maas01:~/packer-maas/rocky8$ packer build rocky8.pkr.hcl
qemu.rocky8: output will be in this color.

==> qemu.rocky8: Retrieving ISO
==> qemu.rocky8: Trying file:./Rocky-8-10-x86_64-minimal.iso
==> qemu.rocky8: Trying file:./Rocky-8-10-x86_64-minimal.iso?checksum=sha256%3A2c735d3b0de921bd671a0e2d08461e3593ac84f64cdaef32e3ed56ba01f74f4b
==> qemu.rocky8: Download failed source path error: stat : no such file or directory
==> qemu.rocky8: error downloading ISO: [source path error: stat : no such file or directory]
Build 'qemu.rocky8' errored after 1 millisecond 799 microseconds: error downloading ISO: [source path error: stat : no such file or directory]

==> Wait completed after 1 millisecond 830 microseconds

==> Some builds didn't complete successfully and had errors:
--> qemu.rocky8: error downloading ISO: [source path error: stat : no such file or directory]

え!checksum とって、同じ場所におけじゃないの?

Copliotの教え : 

iso_url = "file:./Rocky-8-10-x86_64-minimal.iso"
Geminiの導き:
iso_url          = "./Rocky-8-10-x86_64-minimal.iso"

Gemini の勝ち!正解は

iso_url          = "./Rocky-8-10-x86_64-minimal.iso"


ということで、rocky8 のディレクトリに、minimal.iso を置いたら、次のように rocky8.pkr.hcl は書きましょう
普通にダウンロードさせてきたほうが実は簡単なんじゃない?とおもいますが・・・・残念ダウンロード先のリンク切れと
mirror の指定自動的に割り当てないので超遅かった。なんでそのくらい自動切換えしてくれないんだろうね、AIはどこで遊んでるんだろ?

#  iso_url          = "http://download.rockylinux.org/pub/rocky/8/isos/${var.architecture}/Rocky-${var.architecture}-boot.iso"
  iso_url          = "./Rocky-8-10-x86_64-minimal.iso"
  iso_checksum     = "2c735d3b0de921bd671a0e2d08461e3593ac84f64cdaef32e3ed56ba01f74f4b"
  iso_target_path  = "packer_cache/Rocky-8-10-x86_64-minimal.iso"


むむ!なんか、KVM 使ってる?
必要なパッケージの確認!今頃?最初に書いとけよ!

sudo apt-get update
sudo apt-get install -y qemu-kvm qemu-system ovmf
VARS ファイル(x86_64_VARS.fd)の用意 ← ここが最もハマりやすい(うそうそまだまだはまるよ)

あなたの rocky8.pkr.hclqemuargs では次のように VARS に“ローカルファイル”を要求しています:


["-drive", "if=pflash,format=raw,unit=1,id=ovmf_vars,file=${var.architecture}_VARS.fd
var.architecturex86_64 なので、カレントディレクトリに x86_64_VARS.fd が存在しないと確実に QEMU は起動失敗します。


Ubuntu 24.04 (Noble) などでは OVMF のファイル名が OVMF_CODE_4M.fd / OVMF_VARS_4M.fd の構成です。
その場合は テンプレートの ovmf_suffix_4M に指定し、合わせて VARS をコピーします:
# hcl の variable で ovmf_suffix を上書き(方法A:環境変数)
export PACKER_VAR_ovmf_suffix="_4M"

# または rocky8.pkr.hcl の variable "ovmf_suffix" default を "_4M" に変更(方法B)

# そして VARS ファイルをローカルに用意
cp /usr/share/OVMF/OVMF_VARS_4M.fd ./x86_64_VARS.fd

さてとこれは乗り越えたとして、


成功した証拠(重要ポイント)

“Build 'qemu.rocky8' finished” と出ている

Build 'qemu.rocky8' finished after 13 minutes 19 seconds.

これは Packer がビルド処理を最後まで実行し、
異常終了ではなく正常完了したことを示します。

※ 失敗なら “errored after ...” が出続けますが、今回は出ていません。

HashiCorp Packer QEMU ビルダーの公式仕様では、
正常終了した場合は build が complete され、
artifact が列挙されます。 [rockylinux.pkgs.org]

じゃあできたのね?ここで出来た、rocky8.tar.gz を登録すれば終わりなの?


? 次にやるべき MAAS 登録ステップ

生成された tar.gz を使って MAAS に登録します:

maas $PROFILE boot-resources create \
  name='custom/rocky8' \
  title='Rocky Linux 8' \
  architecture='amd64/generic' \
  filetype='tgz' \
  content@=rocky8.tar.gz



やったー終わったーじゃあでぷろーい ー> シッパーイ

なんでじゃー

Copilot

結論:

? 失敗原因は “ESP(EFI System Partition)が作られていない or /boot/efi にマウントされていないため、GRUB(UEFI モード)のインストールができなかった” です。

ログの核心エラーはこれ:

RuntimeError: Failed to find primary ESP mounted at /boot/efi

つまり、UEFI ブートを前提にしているのに、EFI パーティションが存在しない状態です。は?

★ 解決策 A:Kickstart に EFI パーティション作成を追加(推奨)

rocky8/http/rocky8.ks.pkrtpl.hcl を修正します。

ディスクの partition セクションに EFI パーティションを追加:

part /boot/efi --fstype=efi --size=200 --ondisk=sda


嘘でーすCopilot の解説は間違い!この失敗のポイントは、単に Storage の設定で、big one とかを選択してなかっただけ!


そしてふと、え!結局 KickStart いじるの?そして最後に謎の、案内!


必要なら次は:

  • Rocky 9 / 10 版 Kickstart の最適化版
  • MAAS でのネットワーク設定最適化(netplan 問題の回避)
  • cloud-init の日本語ロケール対応

なども作成できます。


何これ?まぁ気にせず行ってみよう ー> はまる、sudo じゃないと、パッケージ作れないなんかおかしい?


方式B(sudo なしで通したい場合)

  1. ユーザーを kvm グループに追加(KVM 用)
sudo usermod -aG kvm $USER
newgrp kvm

やったこれでいいのじゃね?できた rocky8.tar.gz を再度登録 ー> 失敗?なんでじゃー

Copilot
推論が 2 ステップで完了しました

ありがとうございます。貼っていただいた curtin ログを精読すると、今回の失敗点ははっきりしています。


失敗のポイント(原因)

最後のステージで、MAAS が 「カスタムイメージに netplan が入っているか」 を検証しており、ここで失敗しています。

start: .../99-validate-custom-image-has-netplan/cmd-in-target ... bash: netplan: command not found netplan not detected, MAAS will not be able to configure this machine properly finish: ... FAIL

MAAS 3.5 以降は、カスタムイメージのネットワーク設定を確実に適用するため netplan の存在を検証します。netplan が見つからないとデプロイを失敗扱いにします(3.5→3.6 系で共通の既知要件)。(先にご案内した既知事例)


結論

Rocky 8 イメージ側に netplan をインストールすれば解決します。
(Kickstart の %packages で入れておくのが最も確実)


は?なんで最初っから入ってないの?わざと失敗させるように仕組んでるわけ?何なの個の無駄な時間は?

結論:こうしろ、netplan を足しておけ!

maas01:~/packer-maas/rocky8/http$ diff rocky8.ks.pkrtpl.hcl rocky8.ks.pkrtpl.hcl.org
4d3
< repo --name="epel" --baseurl=https://download.fedoraproject.org/pub/epel/8/Everything/x86_64/
16,18c15,16
< keyboard --vckeymap=jp --xlayouts=jp
< timezone Asia/Tokyo --utc
<
---
> keyboard us
> timezone UTC --isUtc
25c23
< selinux --permissive
---
> selinux --enforcing
110d107
< netplan


という顛末でした。なぜこの世はこのような落とし穴ばっかり掘って直さないのかね?そして、Copilot に聞いたなぜ問題の回答に時間がかかるのか?


MaaSというくくりで質問すると過去のバージョンを加味して回答するので、MaaS3.6.2 の場合にどうなるかと明示的に指示くださいということでした。
なるほどね!

本日は以上