#!/usr/bin/env bash set -euo pipefail SOURCE_ISO="${1:-}" 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" } check_input() { if [[ -z "$SOURCE_ISO" ]]; then usage exit 1 fi if [[ ! -f "$SOURCE_ISO" ]]; then echo "Error: ISO not found: $SOURCE_ISO" 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" rm -rf "$WORK_DIR" mkdir -p "$WORK_DIR" } extract_iso() { echo "Extracting ISO..." xorriso -indev "$SOURCE_ISO" -osirrox on -extract / "$WORK_DIR" >/dev/null } patch_grub() { echo "Installing Tuxflotte GRUB configuration..." cp "$REPO_DIR/grub/EFI-BOOT-grub.cfg" \ "$WORK_DIR/EFI/BOOT/grub.cfg" cp "$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 live-updates payload..." local updates_dir="$WORK_DIR/updates" rm -rf "$updates_dir" mkdir -p "$updates_dir/opt/tuxflotte" cp -a "$REPO_DIR/live-updates/." "$updates_dir/" 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/" chmod 0440 "$updates_dir/etc/sudoers.d/90-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 "$@"