From 55296cd1fd881ab4d2aebff9261938aefa6406bd Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 7 Mar 2026 21:37:00 +0100 Subject: [PATCH] Rewrite build-iso.sh: macOS-Support, Ubuntu 24.04.4, xorriso in-place MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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) --- build-iso.sh | 115 +++++++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 50 deletions(-) mode change 100644 => 100755 build-iso.sh diff --git a/build-iso.sh b/build-iso.sh old mode 100644 new mode 100755 index 32d9c9d..4817a29 --- a/build-iso.sh +++ b/build-iso.sh @@ -1,58 +1,73 @@ #!/bin/bash # build-iso.sh — Ubuntu 24.04 Autoinstall ISO für Ventoy bauen -# Ausführen auf einem Ubuntu/Debian-System mit Internetzugang -# Ergebnis: ubuntu-macbook-autoinstall.iso (~4-5 GB) +# 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-live-server-amd64.iso" -UBUNTU_ISO="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.4-live-server-amd64.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' 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" +echo " macbook-setup ISO Builder ($OS)" echo "════════════════════════════════════════════" -# Abhängigkeiten +# ── Abhängigkeiten ─────────────────────────────────────────────────────── echo -e "\n=== Abhängigkeiten prüfen ===" -sudo apt install -y xorriso squashfs-tools genisoimage -ok "Werkzeuge verfügbar" +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 (falls nicht vorhanden) +# ── Ubuntu ISO herunterladen ───────────────────────────────────────────── if [[ ! -f "$UBUNTU_ISO" ]]; then 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" else ok "ISO bereits vorhanden: $UBUNTU_ISO" fi -# Arbeitsverzeichnis vorbereiten -echo -e "\n=== ISO entpacken ===" -rm -rf "$WORKDIR" -mkdir -p "$WORKDIR/source" -sudo mount -o loop "$UBUNTU_ISO" /mnt -cp -rT /mnt "$WORKDIR/source" -sudo umount /mnt -chmod -R u+w "$WORKDIR/source" -ok "ISO entpackt nach $WORKDIR/source" +# 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 einfügen -echo -e "\n=== Autoinstall-Dateien einbetten ===" -mkdir -p "$WORKDIR/source/autoinstall" -cp user-data "$WORKDIR/source/autoinstall/" -cp meta-data "$WORKDIR/source/autoinstall/" -ok "user-data und meta-data eingefügt" +# ── 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-Konfiguration: autoinstall-Parameter hinzufügen -echo -e "\n=== GRUB konfigurieren ===" -GRUB_CFG="$WORKDIR/source/boot/grub/grub.cfg" -# Autoinstall-Eintrag am Anfang einfügen -cat > /tmp/grub-autoinstall.cfg <<'EOF' +# ── 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 @@ -62,31 +77,31 @@ menuentry "Ubuntu MacBook AutoInstall" { initrd /casper/initrd } -EOF -cat /tmp/grub-autoinstall.cfg "$GRUB_CFG" > /tmp/grub-merged.cfg -mv /tmp/grub-merged.cfg "$GRUB_CFG" +GRUBEOF +cat "$TMPGRUB" "$TMPDIR/grub.cfg" > "$TMPDIR/grub-new.cfg" +rm "$TMPGRUB" ok "GRUB konfiguriert (autoinstall als Standard)" -# ISO neu bauen +# ── ISO modifizieren (Boot-Records bleiben erhalten) ───────────────────── echo -e "\n=== ISO bauen ===" -xorriso -as mkisofs \ - -r -V "Ubuntu-24.04-MacBook" \ - -J -joliet-long \ - -b boot/grub/i386-pc/eltorito.img \ - -c boot.catalog \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - --efi-boot boot/grub/efi.img \ - -efi-boot-part --efi-startup-part --protective-msdos-label \ - "$WORKDIR/source" \ - -o "$OUTPUT_ISO" +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" -echo " cp $OUTPUT_ISO /media/\$USER/Ventoy/" -echo "" -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" +if [[ "$OS" == "Darwin" ]]; then + echo " cp $OUTPUT_ISO /Volumes/Ventoy/" +else + echo " cp $OUTPUT_ISO /media/\$USER/Ventoy/" +fi