#!/usr/bin/env bash set -euo pipefail # Nur noch fuer das Fedora-Backend (Kickstart/Anaconda) - das Mint-Backend # ist auf das eigenstaendige, per live-build gebaute Boot-Medium umgezogen # (siehe scripts/build_boot_medium.sh, boot-medium/). Der bisherige # Mint-Zweig hier (Casper-Patchen einer echten Mint-Live-ISO + Ubiquity- # Preseed) ist damit Geschichte - siehe ADR-0025 fuer die Begruendung. SOURCE_ISO="${1:-}" BACKEND="${2:-}" REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" BASE_DIR="$(cd "$REPO_DIR/.." && pwd)" BUILD_DIR="$BASE_DIR/build" WORK_DIR="$BUILD_DIR/work" OUTPUT_DIR="$BUILD_DIR/output" usage() { echo "Usage: $0 /path/to/source.iso fedora" } check_input() { if [[ -z "$SOURCE_ISO" || -z "$BACKEND" ]]; then usage exit 1 fi if [[ ! -f "$SOURCE_ISO" ]]; then echo "Error: ISO not found: $SOURCE_ISO" exit 1 fi if [[ "$BACKEND" != "fedora" ]]; then echo "Error: unbekanntes Backend '$BACKEND' (erwartet: fedora)" exit 1 fi } check_dependencies() { for cmd in xorriso; do if ! command -v "$cmd" >/dev/null 2>&1; then echo "Error: missing dependency: $cmd" exit 1 fi done } prepare_dirs() { mkdir -p "$BUILD_DIR" "$OUTPUT_DIR" # xorriso extrahiert Verzeichnisse teils mit den Original-ISO-Rechten # (z.B. 555, kein Write-Bit) - ohne chmod schlaegt rm -rf darauf fehl. chmod -R u+w "$WORK_DIR" 2>/dev/null || true rm -rf "$WORK_DIR" mkdir -p "$WORK_DIR" } extract_iso() { echo "Extracting ISO..." xorriso -indev "$SOURCE_ISO" -osirrox on -extract / "$WORK_DIR" >/dev/null # xorriso uebernimmt die Original-ISO-Rechte (haeufig 555 auf # Verzeichnissen, 444 auf Dateien) - ohne Write-Bit koennen weder # spaetere Schritte (patch_grub) noch spaetere Aufraeumlaeufe # (prepare_dirs) Dateien darin ersetzen/entfernen. chmod -R u+w "$WORK_DIR" } patch_grub() { echo "Installing Tuxflotte GRUB configuration..." # -f: xorriso extrahiert ISO-Dateien mit deren Original-Rechten, die auf # Live-Medien haeufig read-only (444) sind - ohne -f schlaegt cp beim # Ueberschreiben mit "Keine Berechtigung" fehl. cp -f "$REPO_DIR/grub/EFI-BOOT-grub.cfg" \ "$WORK_DIR/EFI/BOOT/grub.cfg" cp -f "$REPO_DIR/grub/boot-grub2-grub.cfg" \ "$WORK_DIR/boot/grub2/grub.cfg" } verify_workdir() { echo "Verifying workdir..." grep -q "Tuxflotte" "$WORK_DIR/EFI/BOOT/grub.cfg" grep -q "Tuxflotte" "$WORK_DIR/boot/grub2/grub.cfg" echo "GRUB verification passed." } prepare_updates() { echo "Assembling updates payload..." local updates_dir="$WORK_DIR/updates" rm -rf "$updates_dir" mkdir -p "$updates_dir/opt/tuxflotte" cp -a "$REPO_DIR/scripts" "$updates_dir/opt/tuxflotte/" cp -a "$REPO_DIR/backends" "$updates_dir/opt/tuxflotte/" cp -a "$REPO_DIR/config" "$updates_dir/opt/tuxflotte/" } create_iso() { echo "Creating Tuxflotte ISO..." local output_iso="$OUTPUT_DIR/tuxflotte-provisioning-0.2.iso" rm -f "$output_iso" xorriso \ -indev "$SOURCE_ISO" \ -outdev "$output_iso" \ -compliance no_emul_toc \ -volid TUXFLOTTE \ -map "$REPO_DIR/grub/EFI-BOOT-grub.cfg" /EFI/BOOT/grub.cfg \ -map "$REPO_DIR/grub/boot-grub2-grub.cfg" /boot/grub2/grub.cfg \ -map "$WORK_DIR/updates" /updates \ -chown_r 0 /updates -- \ -chgrp_r 0 /updates -- \ -boot_image any replay echo "ISO created: $output_iso" } main() { check_input check_dependencies prepare_dirs extract_iso patch_grub verify_workdir prepare_updates create_iso echo echo "Build complete." echo "Work dir: $WORK_DIR" } main "$@"