Rewrite build-iso.sh: macOS-Support, Ubuntu 24.04.4, xorriso in-place

- Funktioniert auf macOS (brew) und Linux (apt)
- Ubuntu ISO URL aktualisiert auf 24.04.4
- xorriso modifiziert die Original-ISO direkt statt entpacken/neu bauen
  → Boot-Records (BIOS + EFI) bleiben korrekt erhalten
- Download-Validierung (prüft auf gültige ISO)
- user-data/meta-data per absolutem Pfad (SCRIPT_DIR)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
rene 2026-03-07 21:37:00 +01:00
parent da9fa83910
commit 9cf76959c8

113
build-iso.sh Normal file → Executable file
View file

@ -1,58 +1,73 @@
#!/bin/bash #!/bin/bash
# build-iso.sh — Ubuntu 24.04 Autoinstall ISO für Ventoy bauen # build-iso.sh — Ubuntu 24.04 Autoinstall ISO für Ventoy bauen
# Ausführen auf einem Ubuntu/Debian-System mit Internetzugang # Funktioniert auf macOS (xorriso via brew) und Linux (xorriso via apt)
# Ergebnis: ubuntu-macbook-autoinstall.iso (~4-5 GB) # Ergebnis: ubuntu-macbook-autoinstall.iso (~3.2 GB)
set -e set -e
UBUNTU_ISO_URL="https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso" UBUNTU_ISO_URL="https://releases.ubuntu.com/24.04/ubuntu-24.04.4-live-server-amd64.iso"
UBUNTU_ISO="ubuntu-24.04-live-server-amd64.iso" UBUNTU_ISO="ubuntu-24.04.4-live-server-amd64.iso"
OUTPUT_ISO="ubuntu-macbook-autoinstall.iso" OUTPUT_ISO="ubuntu-macbook-autoinstall.iso"
WORKDIR="/tmp/iso-build" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m' RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
ok() { echo -e "${GREEN}$*${NC}"; } ok() { echo -e "${GREEN}$*${NC}"; }
warn() { echo -e "${YELLOW}$*${NC}"; } warn() { echo -e "${YELLOW}$*${NC}"; }
err() { echo -e "${RED}$*${NC}"; exit 1; }
OS="$(uname -s)"
echo "════════════════════════════════════════════" echo "════════════════════════════════════════════"
echo " macbook-setup ISO Builder" echo " macbook-setup ISO Builder ($OS)"
echo "════════════════════════════════════════════" echo "════════════════════════════════════════════"
# Abhängigkeiten # ── Abhängigkeiten ───────────────────────────────────────────────────────
echo -e "\n=== Abhängigkeiten prüfen ===" echo -e "\n=== Abhängigkeiten prüfen ==="
sudo apt install -y xorriso squashfs-tools genisoimage if [[ "$OS" == "Darwin" ]]; then
ok "Werkzeuge verfügbar" 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 (falls nicht vorhanden) # ── Ubuntu ISO herunterladen ─────────────────────────────────────────────
if [[ ! -f "$UBUNTU_ISO" ]]; then if [[ ! -f "$UBUNTU_ISO" ]]; then
echo -e "\n=== Ubuntu 24.04 ISO herunterladen ===" echo -e "\n=== Ubuntu 24.04 ISO herunterladen ==="
wget --show-progress -O "$UBUNTU_ISO" "$UBUNTU_ISO_URL" curl -L --progress-bar -o "$UBUNTU_ISO" "$UBUNTU_ISO_URL"
ok "ISO heruntergeladen" ok "ISO heruntergeladen"
else else
ok "ISO bereits vorhanden: $UBUNTU_ISO" ok "ISO bereits vorhanden: $UBUNTU_ISO"
fi fi
# Arbeitsverzeichnis vorbereiten # Prüfen ob es eine echte ISO ist
echo -e "\n=== ISO entpacken ===" if ! file "$UBUNTU_ISO" | grep -q "ISO 9660"; then
rm -rf "$WORKDIR" rm -f "$UBUNTU_ISO"
mkdir -p "$WORKDIR/source" err "Download fehlgeschlagen (keine gültige ISO). Bitte erneut starten."
sudo mount -o loop "$UBUNTU_ISO" /mnt fi
cp -rT /mnt "$WORKDIR/source"
sudo umount /mnt
chmod -R u+w "$WORKDIR/source"
ok "ISO entpackt nach $WORKDIR/source"
# autoinstall-Dateien einfügen # ── Autoinstall-Dateien vorbereiten ──────────────────────────────────────
echo -e "\n=== Autoinstall-Dateien einbetten ===" echo -e "\n=== Autoinstall-Dateien vorbereiten ==="
mkdir -p "$WORKDIR/source/autoinstall" TMPDIR=$(mktemp -d)
cp user-data "$WORKDIR/source/autoinstall/" mkdir -p "$TMPDIR/autoinstall"
cp meta-data "$WORKDIR/source/autoinstall/" cp "$SCRIPT_DIR/user-data" "$TMPDIR/autoinstall/"
ok "user-data und meta-data eingefügt" cp "$SCRIPT_DIR/meta-data" "$TMPDIR/autoinstall/"
ok "user-data und meta-data bereit"
# GRUB-Konfiguration: autoinstall-Parameter hinzufügen # ── GRUB-Eintrag vorbereiten ────────────────────────────────────────────
echo -e "\n=== GRUB konfigurieren ===" echo -e "\n=== GRUB-Eintrag vorbereiten ==="
GRUB_CFG="$WORKDIR/source/boot/grub/grub.cfg"
# Autoinstall-Eintrag am Anfang einfügen # Originale grub.cfg extrahieren
cat > /tmp/grub-autoinstall.cfg <<'EOF' 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 default=0
set timeout=10 set timeout=10
@ -62,31 +77,31 @@ menuentry "Ubuntu MacBook AutoInstall" {
initrd /casper/initrd initrd /casper/initrd
} }
EOF GRUBEOF
cat /tmp/grub-autoinstall.cfg "$GRUB_CFG" > /tmp/grub-merged.cfg cat "$TMPGRUB" "$TMPDIR/grub.cfg" > "$TMPDIR/grub-new.cfg"
mv /tmp/grub-merged.cfg "$GRUB_CFG" rm "$TMPGRUB"
ok "GRUB konfiguriert (autoinstall als Standard)" ok "GRUB konfiguriert (autoinstall als Standard)"
# ISO neu bauen # ── ISO modifizieren (Boot-Records bleiben erhalten) ─────────────────────
echo -e "\n=== ISO bauen ===" echo -e "\n=== ISO bauen ==="
xorriso -as mkisofs \ cp "$UBUNTU_ISO" "$OUTPUT_ISO"
-r -V "Ubuntu-24.04-MacBook" \
-J -joliet-long \ xorriso -indev "$OUTPUT_ISO" \
-b boot/grub/i386-pc/eltorito.img \ -outdev "$OUTPUT_ISO" \
-c boot.catalog \ -map "$TMPDIR/autoinstall" /autoinstall \
-no-emul-boot -boot-load-size 4 -boot-info-table \ -map "$TMPDIR/grub-new.cfg" /boot/grub/grub.cfg \
--efi-boot boot/grub/efi.img \ -boot_image any replay \
-efi-boot-part --efi-startup-part --protective-msdos-label \ -commit
"$WORKDIR/source" \
-o "$OUTPUT_ISO" rm -rf "$TMPDIR"
ok "ISO erstellt: $OUTPUT_ISO" ok "ISO erstellt: $OUTPUT_ISO"
echo "" echo ""
echo "Größe: $(du -sh "$OUTPUT_ISO" | cut -f1)" echo "Größe: $(du -sh "$OUTPUT_ISO" | cut -f1)"
echo "" echo ""
warn "Nächster Schritt: ISO auf Ventoy-Stick kopieren" 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/" echo " cp $OUTPUT_ISO /media/\$USER/Ventoy/"
echo "" fi
warn "Vor der Installation: user-data anpassen!"
echo " - Passwort-Hash: mkpasswd -m sha-512 DEINPASSWORT"
echo " - Modell: 'setup.sh -- 13' oder 'setup.sh -- 16' in user-data"