#!/usr/bin/env bash set -Eeuo pipefail # Isolierter Testtreiber fuer scripts/lib/image_deploy.sh (Phase 1 des # Golden-Image-Deployment-Plans, siehe ADR-0024) - direkt in einer # frischen Live-Mint-Session ausgefuehrt, OHNE Umweg ueber Kiosk/ # Aktivierung/Kexec, um den Iterationszyklus kurz zu halten. Wird erst in # Phase 2 durch backends/mint-image/backend.sh ersetzt/ergaenzt, das # dieselben Bibliotheksfunktionen im echten Self-Service-Ablauf aufruft. # # WARNUNG: ueberschreibt den angegebenen Datentraeger vollstaendig. Nur # auf einer Test-VM mit einer garantiert leeren/wegwerfbaren Platte # ausfuehren. usage() { echo "Usage: sudo $0 [root_fs] [hostname]" >&2 echo " disk: z.B. /dev/vda oder /dev/sda - WIRD KOMPLETT ÜBERSCHRIEBEN" >&2 } DISK="${1:-}" IMAGE_PATH="${2:-}" ROOT_FS="${3:-ext4}" HOSTNAME_VALUE="${4:-tuxflotte-image-test}" if [[ -z "${DISK}" || -z "${IMAGE_PATH}" ]]; then usage exit 1 fi if [[ "${EUID}" -ne 0 ]]; then echo "Fehler: muss als root laufen." >&2 exit 1 fi [[ -b "${DISK}" ]] || { echo "Fehler: ${DISK} ist kein Blockgerät." >&2; exit 1; } REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # shellcheck source=lib/image_deploy.sh source "${REPO_DIR}/scripts/lib/image_deploy.sh" TARGET="/target" declare -a MOUNT_STACK=() cleanup() { image_deploy_unbind_mounts MOUNT_STACK umount -R "${TARGET}" 2>/dev/null || true } trap cleanup EXIT if [[ -d /sys/firmware/efi ]]; then IS_EFI="true" else IS_EFI="false" fi image_deploy_log "Firmware-Modus: $([ "${IS_EFI}" = true ] && echo UEFI || echo BIOS)" image_deploy_log "Schritt 1/8: Partitionieren von ${DISK}" read -r BOOT_PART ROOT_PART <<<"$(image_deploy_partition "${DISK}" "${IS_EFI}")" image_deploy_log " -> BOOT_PART='${BOOT_PART}' ROOT_PART='${ROOT_PART}'" image_deploy_log "Schritt 2/8: Formatieren" image_deploy_format "${BOOT_PART}" "${ROOT_PART}" "${ROOT_FS}" image_deploy_log "Schritt 3/8: Mounten unter ${TARGET}" image_deploy_mount "${TARGET}" "${BOOT_PART}" "${ROOT_PART}" image_deploy_log "Schritt 4/8: Golden Image entpacken (${IMAGE_PATH})" image_deploy_extract_image "${IMAGE_PATH}" "${TARGET}" image_deploy_log "Schritt 5/8: fstab schreiben" image_deploy_write_fstab "${TARGET}" "${BOOT_PART}" "${ROOT_PART}" "${ROOT_FS}" image_deploy_log "Schritt 6/8: bind mounts + chroot-Fixup (machine-id/SSH-Hostkeys/initramfs)" image_deploy_bind_mounts "${TARGET}" MOUNT_STACK image_deploy_chroot_fixup "${TARGET}" image_deploy_log "Schritt 7/8: Bootloader installieren" image_deploy_install_bootloader "${TARGET}" "${DISK}" "${IS_EFI}" image_deploy_log "Schritt 8/8: Hostname setzen (${HOSTNAME_VALUE})" image_deploy_set_hostname "${TARGET}" "${HOSTNAME_VALUE}" image_deploy_log "Fertig. Zum Test: VM neu starten und von ${DISK} booten."