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)
This commit is contained in:
parent
b08902488f
commit
55296cd1fd
1 changed files with 65 additions and 50 deletions
113
build-iso.sh
Normal file → Executable file
113
build-iso.sh
Normal file → Executable 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"
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue