#!/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." } 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 \ -map "$REPO_DIR/grub/EFI-BOOT-grub.cfg" /EFI/BOOT/grub.cfg \ -map "$REPO_DIR/grub/boot-grub2-grub.cfg" /boot/grub2/grub.cfg \ -boot_image any replay echo "ISO created: $output_iso" } main() { check_input check_dependencies prepare_dirs extract_iso patch_grub verify_workdir create_iso echo echo "Build complete." echo "Work dir: $WORK_DIR" } main "$@"