fix(boot-medium): jq/curl/python3 im Zielsystem vor postinstall.sh sicherstellen

Fuenfter und letzter live gefundener Bug auf dem Weg zum ersten
vollstaendig erfolgreichen End-to-End-Deployment: die echte
Mint-Referenz-VM bringt jq nicht mit (anders als das Boot-Medium selbst,
das hilft dem chroot-Zielsystem aber nicht - komplett eigener Kontext).
postinstall.sh scheiterte deshalb an "jq: command not found". curl/python3
gleich mit abgesichert (python3 wird vom heruntergeladenen agent.py nach
dem naechsten Boot gebraucht), um nicht noch einen ganzen
Referenz-VM-Neupack-Zyklus wegen eines weiteren fehlenden Pakets zu
riskieren. apt-get update noetig, da package_golden_image.sh
/var/lib/apt/lists als Teil der Bereinigung leert.

Damit lief der komplette Self-Service-Flow zum ersten Mal vollstaendig
durch: Enrollment-Session -> personalisiertes ISO -> Boot -> Partition/
Format/Mount -> Golden-Image-Stream-Download+Extraktion -> chroot-Fixup
-> Bootloader -> Postinstall/Agent-Bootstrap -> Reboot -> echter
Linux-Mint-Cinnamon-Login-Bildschirm (Hostname "debian", deutsches
Tastaturlayout aktiv). agent_secret_issued_at in der Datenbank bestaetigt
die erfolgreiche Agent-Registrierung bei anode.

Damit sind alle vier Phasen des Boot-Medium-Plans live end-to-end
verifiziert. Voraussetzung dafuer: das golden-image-Archiv auf anode
wurde mit dem korrigierten package_golden_image.sh (vorheriger Commit)
neu gepackt (4,8 GB statt 2,3 GB, jetzt mit den vorher fehlenden
Kernelmodulen) und live ersetzt - alte Version als
linux-mint-22.3-cinnamon.tar.zst.defekt-31.08.bak gesichert.
This commit is contained in:
Thomas Stallinger 2026-08-31 18:25:24 +02:00
parent 27d6fa0f47
commit b9ccae6e85
2 changed files with 50 additions and 0 deletions

View File

@ -270,6 +270,31 @@ backend_postinstall() {
printf '%s' "${postinstall_rendered}" > "${TARGET_DIR}/tmp/postinstall.sh"
chmod 0700 "${TARGET_DIR}/tmp/postinstall.sh"
# Live gefunden (31.08.2026, erster vollstaendig durchgelaufener
# End-to-End-Test): postinstall.sh braucht jq (+curl), aber die echte
# Mint-Referenz-VM bringt das nicht zwingend mit (anders als das
# Boot-Medium selbst, das jq ja schon vorinstalliert hat - das hilft
# dem ausgerollten Zielsystem hier nichts, das ist ein komplett
# eigener chroot). python3 wird nicht von postinstall.sh selbst
# gebraucht, aber vom heruntergeladenen agent.py nach dem naechsten
# Boot - hier gleich mit absichern, um nicht noch einen ganzen
# Referenz-VM-Neupack-Zyklus wegen eines einzelnen fehlenden Pakets zu
# brauchen. package_golden_image.sh leert ausserdem /var/lib/apt/lists
# als Teil der Bereinigung - "apt-get update" ist deshalb hier noetig,
# bevor "apt-get install" ueberhaupt Pakete finden kann. Netzwerk ist
# im chroot verfuegbar (resolv.conf wurde schon in
# image_deploy_bind_mounts kopiert, dieselben Bind-Mounts sind noch
# aktiv).
chroot "${TARGET_DIR}" bash -c '
missing=()
command -v jq >/dev/null 2>&1 || missing+=(jq)
command -v curl >/dev/null 2>&1 || missing+=(curl)
command -v python3 >/dev/null 2>&1 || missing+=(python3)
[[ "${#missing[@]}" -eq 0 ]] && exit 0
apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y "${missing[@]}"
' ||
{ backend_fatal "jq/curl/python3 konnten im Zielsystem nicht sichergestellt werden."; return 1; }
backend_log "Führe Postinstall-Skript im chroot aus."
chroot "${TARGET_DIR}" /bin/bash /tmp/postinstall.sh ||
{ backend_fatal "Postinstall-Skript ist im chroot fehlgeschlagen."; return 1; }

View File

@ -270,6 +270,31 @@ backend_postinstall() {
printf '%s' "${postinstall_rendered}" > "${TARGET_DIR}/tmp/postinstall.sh"
chmod 0700 "${TARGET_DIR}/tmp/postinstall.sh"
# Live gefunden (31.08.2026, erster vollstaendig durchgelaufener
# End-to-End-Test): postinstall.sh braucht jq (+curl), aber die echte
# Mint-Referenz-VM bringt das nicht zwingend mit (anders als das
# Boot-Medium selbst, das jq ja schon vorinstalliert hat - das hilft
# dem ausgerollten Zielsystem hier nichts, das ist ein komplett
# eigener chroot). python3 wird nicht von postinstall.sh selbst
# gebraucht, aber vom heruntergeladenen agent.py nach dem naechsten
# Boot - hier gleich mit absichern, um nicht noch einen ganzen
# Referenz-VM-Neupack-Zyklus wegen eines einzelnen fehlenden Pakets zu
# brauchen. package_golden_image.sh leert ausserdem /var/lib/apt/lists
# als Teil der Bereinigung - "apt-get update" ist deshalb hier noetig,
# bevor "apt-get install" ueberhaupt Pakete finden kann. Netzwerk ist
# im chroot verfuegbar (resolv.conf wurde schon in
# image_deploy_bind_mounts kopiert, dieselben Bind-Mounts sind noch
# aktiv).
chroot "${TARGET_DIR}" bash -c '
missing=()
command -v jq >/dev/null 2>&1 || missing+=(jq)
command -v curl >/dev/null 2>&1 || missing+=(curl)
command -v python3 >/dev/null 2>&1 || missing+=(python3)
[[ "${#missing[@]}" -eq 0 ]] && exit 0
apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y "${missing[@]}"
' ||
{ backend_fatal "jq/curl/python3 konnten im Zielsystem nicht sichergestellt werden."; return 1; }
backend_log "Führe Postinstall-Skript im chroot aus."
chroot "${TARGET_DIR}" /bin/bash /tmp/postinstall.sh ||
{ backend_fatal "Postinstall-Skript ist im chroot fehlgeschlagen."; return 1; }