Casper merged /updates nie automatisch auf das gebootete Live-System - eine seit Projektbeginn unverifizierte Annahme, die erst beim echten QEMU-Boot (UEFI, kompletter GRUB->Live-Desktop-Pfad) einer personalisierten Kunden-ISO aufgefallen ist: /opt/tuxflotte fehlte trotz korrekt auf dem Medium liegendem /cdrom/updates vollständig. Fix per casper-bottom-Hook, eingebettet via Initrd-Cpio-Konkatenation (scripts/lib/initrd.sh, derselbe in Phase 1 verifizierte Mechanismus wie beim Kexec-Preseed). Wichtig dabei: ein komplett neuer Hook-Skriptname wird nie ausgeführt, weil mkinitramfs eine statische ORDER-Datei mit der Aufrufliste ins Initrd backt - stattdessen wird der Inhalt des bereits gelisteten, garantiert letzten Skripts (99casperboot) überschrieben. start-kiosk.sh erkennt jetzt TUXFLOTTE_AUTO_MODE und startet den Installer automatisch statt der Kiosk-Startseite. build_customer_iso.sh baut daraus personalisierte Kunden-ISOs (WLAN-Zugangsdaten + Enrollment-Session-Code). Nebenbei zwei vorbestehende Bugs behoben: xorriso -osirrox übernimmt Original-ISO-Dateirechte (oft 444/555, kein Write-Bit), was cp/rm -rf in build.sh/build_customer_iso.sh bisher unbemerkt kaputt gemacht hat. Real per QEMU verifiziert (echter GRUB-Boot einer gebauten Kunden-ISO). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
43 lines
1.9 KiB
Bash
43 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Wird von build.sh und build_customer_iso.sh eingebunden (source), nicht
|
|
# eigenstaendig ausgefuehrt.
|
|
|
|
# Haengt initrd-hooks/casper-bottom/* als zusaetzliche cpio-Schicht an ein
|
|
# bestehendes Casper-Initrd an - derselbe Mechanismus, den
|
|
# backend_launch() (backends/mint/backend.sh) bereits fuer das
|
|
# Kexec-Preseed nutzt und der per QEMU verifiziert ist: der Kernel haengt
|
|
# spaeter aneinandergereihte cpio-Archive additiv an ein bestehendes
|
|
# initramfs an. Noetig, weil Casper keinen automatischen /updates-Merge
|
|
# kennt (real per QEMU-Boot widerlegt) - der Hook selbst kopiert
|
|
# /cdrom/updates beim Boot auf das Root-Dateisystem, siehe
|
|
# initrd-hooks/casper-bottom/21tuxflotte_updates.
|
|
inject_casper_bottom_hooks() {
|
|
local repo_dir="$1"
|
|
local src_initrd="$2"
|
|
local dest_initrd="$3"
|
|
|
|
local hook_dir="${repo_dir}/initrd-hooks"
|
|
local layer_dir
|
|
layer_dir="$(mktemp -d)"
|
|
# Ausserhalb von layer_dir, damit die Archiv-Datei sich beim Bauen nicht
|
|
# selbst als leeren Eintrag einfaengt (find laeuft im selben Moment, in
|
|
# dem die Shell-Redirection sie bereits anlegt).
|
|
local cpio_out
|
|
cpio_out="$(mktemp)"
|
|
|
|
cp -a "${hook_dir}/casper-bottom" "${layer_dir}/scripts-casper-bottom-tmp"
|
|
mkdir -p "${layer_dir}/scripts"
|
|
mv "${layer_dir}/scripts-casper-bottom-tmp" "${layer_dir}/scripts/casper-bottom"
|
|
chmod 0755 "${layer_dir}"/scripts/casper-bottom/*
|
|
|
|
(cd "${layer_dir}" && find . -mindepth 1 | cpio -o -H newc 2>/dev/null | gzip) \
|
|
>"${cpio_out}" ||
|
|
{ echo "Error: Casper-Bottom-Hook-Schicht konnte nicht gebaut werden." >&2; rm -rf "${layer_dir}"; rm -f "${cpio_out}"; return 1; }
|
|
|
|
cat "${src_initrd}" "${cpio_out}" >"${dest_initrd}" ||
|
|
{ echo "Error: Initrd konnte nicht mit Hook-Schicht zusammengesetzt werden." >&2; rm -rf "${layer_dir}"; rm -f "${cpio_out}"; return 1; }
|
|
|
|
rm -rf "${layer_dir}"
|
|
rm -f "${cpio_out}"
|
|
}
|