#!/bin/bash # build-iso.sh — Ubuntu 24.04 Autoinstall ISO für Ventoy bauen # Funktioniert auf macOS (xorriso via brew) und Linux (xorriso via apt) # Ergebnis: ubuntu-macbook-autoinstall.iso (~3.2 GB) set -e UBUNTU_ISO_URL="https://releases.ubuntu.com/24.04/ubuntu-24.04.4-live-server-amd64.iso" UBUNTU_ISO="ubuntu-24.04.4-live-server-amd64.iso" OUTPUT_ISO="ubuntu-macbook-autoinstall.iso" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m' ok() { echo -e "${GREEN}✓ $*${NC}"; } warn() { echo -e "${YELLOW}⚠ $*${NC}"; } err() { echo -e "${RED}✗ $*${NC}"; exit 1; } OS="$(uname -s)" echo "════════════════════════════════════════════" echo " macbook-setup ISO Builder ($OS)" echo "════════════════════════════════════════════" # ── Abhängigkeiten ─────────────────────────────────────────────────────── echo -e "\n=== Abhängigkeiten prüfen ===" if [[ "$OS" == "Darwin" ]]; then if ! command -v xorriso &>/dev/null; then echo "xorriso nicht gefunden, installiere via Homebrew..." brew install xorriso fi ok "xorriso verfügbar (macOS)" else if ! command -v xorriso &>/dev/null; then sudo apt install -y xorriso fi ok "xorriso verfügbar (Linux)" fi # ── Ubuntu ISO herunterladen ───────────────────────────────────────────── if [[ ! -f "$UBUNTU_ISO" ]]; then echo -e "\n=== Ubuntu 24.04 ISO herunterladen ===" curl -L --progress-bar -o "$UBUNTU_ISO" "$UBUNTU_ISO_URL" ok "ISO heruntergeladen" else ok "ISO bereits vorhanden: $UBUNTU_ISO" fi # Prüfen ob es eine echte ISO ist if ! file "$UBUNTU_ISO" | grep -q "ISO 9660"; then rm -f "$UBUNTU_ISO" err "Download fehlgeschlagen (keine gültige ISO). Bitte erneut starten." fi # ── Autoinstall-Dateien vorbereiten ────────────────────────────────────── echo -e "\n=== Autoinstall-Dateien vorbereiten ===" TMPDIR=$(mktemp -d) mkdir -p "$TMPDIR/autoinstall" cp "$SCRIPT_DIR/user-data" "$TMPDIR/autoinstall/" cp "$SCRIPT_DIR/meta-data" "$TMPDIR/autoinstall/" ok "user-data und meta-data bereit" # ── GRUB-Eintrag vorbereiten ──────────────────────────────────────────── echo -e "\n=== GRUB-Eintrag vorbereiten ===" # Originale grub.cfg extrahieren xorriso -osirrox on -indev "$UBUNTU_ISO" \ -extract /boot/grub/grub.cfg "$TMPDIR/grub.cfg" 2>/dev/null chmod u+w "$TMPDIR/grub.cfg" # Autoinstall-Eintrag voranstellen TMPGRUB=$(mktemp) cat > "$TMPGRUB" <<'GRUBEOF' set default=0 set timeout=10 menuentry "Ubuntu MacBook AutoInstall" { set gfxpayload=keep linux /casper/vmlinuz quiet autoinstall ds=nocloud\;s=/cdrom/autoinstall/ --- initrd /casper/initrd } GRUBEOF cat "$TMPGRUB" "$TMPDIR/grub.cfg" > "$TMPDIR/grub-new.cfg" rm "$TMPGRUB" ok "GRUB konfiguriert (autoinstall als Standard)" # ── ISO modifizieren (Boot-Records bleiben erhalten) ───────────────────── echo -e "\n=== ISO bauen ===" cp "$UBUNTU_ISO" "$OUTPUT_ISO" xorriso -indev "$OUTPUT_ISO" \ -outdev "$OUTPUT_ISO" \ -map "$TMPDIR/autoinstall" /autoinstall \ -map "$TMPDIR/grub-new.cfg" /boot/grub/grub.cfg \ -boot_image any replay \ -commit rm -rf "$TMPDIR" ok "ISO erstellt: $OUTPUT_ISO" echo "" echo "Größe: $(du -sh "$OUTPUT_ISO" | cut -f1)" echo "" warn "Nächster Schritt: ISO auf Ventoy-Stick kopieren" if [[ "$OS" == "Darwin" ]]; then echo " cp $OUTPUT_ISO /Volumes/Ventoy/" else echo " cp $OUTPUT_ISO /media/\$USER/Ventoy/" fi