Files
ARIA 3956484246 feat(native-macos): Multiboot-Stick-Modus fuer createinstallmedia/asr
Ein Stick, mehrere macOS-Versionen, frei mischbar aus Apple-Server- und
Bibliotheks-Quelle. Partitioniert den Stick per diskutil partitionDisk
in eine eigene HFS+-Partition je Version (eindeutige Labels), schreibt
danach pro Partition gezielt per createinstallmedia --volume bzw.
asr restore --target -- analog zur bereits vorhandenen Multiboot-Technik
im Docker/Linux-Tool. Inkl. Groessen-Check mit Sicherheitspuffer vor
jeder Aenderung am Stick, robustem Fehlerpfad je Partition (Weiter/Abbruch
statt Stillschweigen) und End-to-End-Test der kompletten Ablauflogik
unter Linux mit gestubbten macOS-Bordmitteln (Einzel-Modus + Multiboot,
reine Apple-Quelle + gemischte Apple/Bibliotheks-Quelle).
2026-07-18 12:12:36 +02:00

7.6 KiB

Nativer macOS-Weg (createinstallmedia / asr)

Alternative zum Docker/Linux-Tool im Projekt-Root — nur nutzbar, wenn gerade ein echter Mac zur Verfuegung steht. Zwei Modi (Einzel-Stick / Multiboot-Stick) und zwei Quellen fuer den Installer-Payload stehen zur Auswahl, direkt im Script:

  1. Von Apple herunterladen (macOS 10.15 Catalina oder neuer als Host noetig) — der offiziell von Apple unterstuetzte Weg ueber softwareupdate --fetch-full-installer.
  2. Aus der lokalen Downloads-Bibliothek des Docker-Tools — wenn das ganze Projekt inkl. downloads/-Ordner z.B. auf eine externe Platte kopiert wurde, braucht dieser Weg kein Internet und keinen erneuten Download.

Warum ein eigenes Script, warum nicht einfach dd wie das Docker-Tool?

Kurz: createinstallmedia (der offiziell unterstuetzte macOS-Weg) braucht die vollstaendige, fertig gepackte "Install macOS X.app" — nicht die rohen Katalog-Dateien, die das Docker-Tool per dd schreibt. Deshalb dieser separate, macOS-native Pfad.

Wie die Bibliotheks-Wiederverwendung funktioniert

Die downloads/library/-Bibliothek des Docker-Tools enthaelt pro macOS-Version genau eine von zwei Rohdateien (siehe meta.json im jeweiligen Unterordner, Feld mode):

  • InstallAssistant.pkg (Big Sur und neuer, mode: "recovery"): Apples eigenes installer -pkg ... -target / entpackt daraus die komplette Install-App (inkl. createinstallmedia-Binary) nach /Applications — bestaetigt per Apple-Community-Thread, dass ein .pkg-Installer aus dem Software-Update-Katalog 1:1 dasselbe Paket ist wie der App-Store-Download. Danach laeuft der normale createinstallmedia-Weg wie bei der Apple-Quelle.
  • BaseSystem.dmg/InstallESD.dmg (bis Catalina, mode: "legacy_dmg"): das ist bereits ein fertiges, bootfaehiges Volume. createinstallmedia braucht es gar nicht erst — Apples eigenes Bordmittel asr restore --source ... --target ... --erase --noprompt schreibt es direkt und sauber auf den Stick (etablierte Technik, siehe Quellen unten). Kein App-Download, kein createinstallmedia noetig.

In beiden Faellen: kein zweiter Download, die Datei aus der Bibliothek wird 1:1 weiterverwendet.

Zukunftssicherheit

Bei der Apple-Quelle fragt softwareupdate --list-full-installers Apples eigene Server live ab — genau wie der Katalog-Check im Docker-Tool, nur eben Apples eigenes Tool statt eigenem Parser. Neue macOS-Versionen tauchen automatisch in der Liste auf.

Bei der Bibliotheks-Quelle haengt die Auswahl logischerweise davon ab, was das Docker-Tool zuletzt heruntergeladen hat — dafuer aber komplett ohne Internetzugriff nutzbar.

Nutzung

cd native-macos
chmod +x create-stick.sh   # falls das Ausfuehr-Bit beim Kopieren verloren ging
./create-stick.sh

Fragt zuerst den Modus ab (Einzel-Stick oder Multiboot-Stick), dann fuehrt es durch die passenden Schritte (reines Terminal-Menue, keine externen Abhaengigkeiten — nur softwareupdate, diskutil, PlistBuddy, installer, asr, createinstallmedia, alles Bordmittel).

Modus 1: Einzelner Stick (4 Schritte)

  1. Quelle + Version waehlen — Apple-Server oder lokale Bibliothek (Pfad wird abgefragt, Default rät ../downloads/library relativ zum Script — passt, wenn das komplette Projekt kopiert wurde).
  2. Installer-Payload besorgen — je nach Quelle/Modus: Download via softwareupdate, Entpacken via installer -pkg, oder (legacy_dmg aus der Bibliothek) gar nichts, das Image liegt schon bereit.
  3. USB-Stick auswaehlen — Liste nur externer, physischer Laufwerke (diskutil list -plist external physical), danach Sicherheitsabfrage: exakter Geraetepfad muss nochmal eingetippt werden, bevor irgendwas geloescht wird.
  4. Schreiben — je nach Modus entweder createinstallmedia --nointeraction (Apple-Quelle und Bibliothek/Big-Sur+) oder diskutil eraseDisk + asr restore --erase (Bibliothek, bis Catalina). Beides mit sudo, live-Ausgabe im Terminal.

Modus 2: Multiboot-Stick (5 Schritte)

Ein Stick, mehrere macOS-Versionen gleichzeitig — frei mischbar aus Apple-Server und lokaler Bibliothek (z.B. eine Version per Download, zwei weitere aus der Offline-Bibliothek, in einem Lauf).

  1. Versionen auswaehlen — kombinierte Liste aus Apple-Server + Bibliothek, Mehrfachauswahl per Komma (1,3,4), 2 bis 8 Versionen.
  2. Payloads besorgen — pro gewaehlter Version wie in Modus 1, Schritt 2 (Download/Entpacken/direktes Image), nacheinander.
  3. USB-Stick auswaehlen — wie Modus 1, plus Groessen-Check: die Summe aus geschaetztem Platzbedarf je Version (inkl. Sicherheitspuffer: +33% bei createinstallmedia-Versionen, +5% bei reinen Image-Restores, jeweils mit Mindestgroesse) wird gegen die Stick-Kapazitaet geprueft. Reicht der Platz nicht, bricht das Script vor jeder Aenderung am Stick mit klarer Meldung ab.
  4. Partitionierendiskutil partitionDisk legt fuer jede gewaehlte Version eine eigene HFS+-Partition mit eindeutigem Label an (GPT-Schema mit automatischer EFI-Partition). Die letzte Partition bekommt den restlichen Platz (R), um Rundungsverluste zu vermeiden.
  5. Partitionen beschreiben — pro Partition laeuft createinstallmedia --volume ... bzw. asr restore --target ... genau wie im Einzel-Modus, nur gezielt gegen die jeweils eigene Partition statt gegen die ganze Platte. Beide Tools reformatieren dabei ausschliesslich ihr eigenes Zielvolume — die anderen Partitionen bleiben unberuehrt. Schlaegt eine Version fehl, fragt das Script ob mit den restlichen weitergemacht werden soll, statt den ganzen Lauf stillschweigend abzubrechen.

Am Ziel-Mac zeigt der Boot-Picker (Option/Alt beim Start) danach jede erfolgreich geschriebene Version als eigenen Eintrag — das ist dieselbe, in der Community etablierte Partitionierungstechnik, die auch das Docker/Linux-Tool dieses Projekts fuer seinen dd-basierten Multiboot-Weg nutzt.

Grenzen

  • Nur macOS 10.15+ (Catalina oder neuer) als Host, auf dem das Script laeuft — das Zielsystem, auf das installiert wird, kann trotzdem jede von Apple unterstuetzte Version sein. Diese Einschraenkung gilt nur fuer die Apple-Download-Quelle (softwareupdate --fetch-full-installer); installer/asr funktionieren grundsaetzlich auch auf aelteren Hosts.
  • Multiboot-Groessenschaetzung ist ein Puffer, keine Garantie — bei sehr knapp bemessenen Sticks im Zweifel weniger Versionen waehlen oder einen groesseren Stick nehmen.
  • Ungetestet auf echtem Mac. Die komplette Ablauflogik (Modus- und Quellenwahl, Mehrfachauswahl-Parsing, Groessen-/Puffer-Berechnung, Label-Vergabe, Partitionierung, sequentielles Schreiben inkl. Fehlerpfade) wurde unter Linux mit gestubbten softwareupdate / diskutil / PlistBuddy / installer / asr / createinstallmedia-Bordmitteln end-to-end durchgespielt — Einzel-Modus (Apple- und Bibliotheks-Quelle), Multiboot mit reinen Apple-Downloads und Multiboot mit gemischten Apple+Bibliotheks-Quellen liefen dabei jeweils fehlerfrei bis zum Abschluss durch, inklusive Sicherheitsabbruch bei falscher Bestaetigung. Der eigentliche installer/asr/ createinstallmedia-Lauf selbst ist nur gegen offizielle Apple-Doku/ Community-Quellen verifiziert, nicht live auf einem Mac getestet.

Quellen (fuer den asr-Weg, live nachgeschlagen)

  • Apple Developer/Community — asr restore ist das Bordmittel fuer Block-Level-Restores von Disk Images, seit jeher Teil von macOS.
  • Cody Krieger — "Creating bootable macOS Sierra installation media on macOS Catalina": beschreibt exakt den diskutil eraseDisk + asr restore --erase-Ablauf fuer aeltere macOS-Installer.