From b9ccae6e85ff6075707db6fc65ee1039c2192c92 Mon Sep 17 00:00:00 2001 From: Thomas Stallinger Date: Mon, 31 Aug 2026 18:25:24 +0200 Subject: [PATCH] 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. --- backends/mint-image/backend.sh | 25 +++++++++++++++++++ .../tuxflotte/backends/mint-image/backend.sh | 25 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/backends/mint-image/backend.sh b/backends/mint-image/backend.sh index f16faf2..f48c038 100644 --- a/backends/mint-image/backend.sh +++ b/backends/mint-image/backend.sh @@ -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; } diff --git a/boot-medium/config/includes.chroot/opt/tuxflotte/backends/mint-image/backend.sh b/boot-medium/config/includes.chroot/opt/tuxflotte/backends/mint-image/backend.sh index f16faf2..f48c038 100644 --- a/boot-medium/config/includes.chroot/opt/tuxflotte/backends/mint-image/backend.sh +++ b/boot-medium/config/includes.chroot/opt/tuxflotte/backends/mint-image/backend.sh @@ -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; }