macbook-setup/build-iso.sh
rene ef7c660c82 WireGuard-Config ins ISO einbetten (wireguard/ Ordner, .gitignore)
- build-iso.sh erkennt Modell/Hostname aus user-data und sucht
  passende Config in wireguard/{hostname}.conf oder wireguard/m{model}.conf
- user-data: late-commands kopieren wg0.conf vom Installationsmedium
  nach /etc/wireguard/ und aktivieren wg-quick@wg0
- wireguard/ in .gitignore (keine Secrets im Repo)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:29:59 +01:00

137 lines
5.4 KiB
Bash
Executable file

#!/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 "════════════════════════════════════════════"
# ── Modell aus user-data erkennen ──────────────────────────────────────────
MODEL=$(grep -o 'setup-base.sh | bash -s -- [0-9]*' "$SCRIPT_DIR/user-data" | grep -o '[0-9]*$')
HOSTNAME=$(grep 'hostname:' "$SCRIPT_DIR/user-data" | awk '{print $2}')
if [[ -z "$MODEL" ]]; then
err "Konnte Modell nicht aus user-data ermitteln"
fi
ok "Modell: MBP $MODEL\" (Hostname: $HOSTNAME)"
# ── 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"
# ── WireGuard-Config einbetten ────────────────────────────────────────────
echo -e "\n=== WireGuard-Config ==="
WG_CONF=""
# Suche nach passender Config: wireguard/m16.conf, wireguard/m13.conf, etc.
for candidate in "$SCRIPT_DIR/wireguard/${HOSTNAME}.conf" "$SCRIPT_DIR/wireguard/m${MODEL}.conf"; do
if [[ -f "$candidate" ]]; then
WG_CONF="$candidate"
break
fi
done
if [[ -n "$WG_CONF" ]]; then
cp "$WG_CONF" "$TMPDIR/autoinstall/wg0.conf"
ok "WireGuard-Config eingebettet: $(basename "$WG_CONF")"
else
warn "Keine WireGuard-Config gefunden in wireguard/ — übersprungen"
warn "Erwartet: wireguard/${HOSTNAME}.conf oder wireguard/m${MODEL}.conf"
fi
# ── 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 "Modell: MBP $MODEL\" | Hostname: $HOSTNAME"
[[ -n "$WG_CONF" ]] && echo "WireGuard: $(basename "$WG_CONF")" || echo "WireGuard: nicht eingebettet"
echo ""
warn "Nächster Schritt: ISO auf USB-Stick schreiben"
if [[ "$OS" == "Darwin" ]]; then
echo " diskutil unmountDisk /dev/diskX"
echo " sudo dd if=$OUTPUT_ISO of=/dev/rdiskX bs=4m"
else
echo " sudo dd if=$OUTPUT_ISO of=/dev/sdX bs=4M status=progress"
fi