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).
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:
- Von Apple herunterladen (macOS 10.15 Catalina oder neuer als Host
noetig) — der offiziell von Apple unterstuetzte Weg ueber
softwareupdate --fetch-full-installer. - 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 eigenesinstaller -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 normalecreateinstallmedia-Weg wie bei der Apple-Quelle.BaseSystem.dmg/InstallESD.dmg(bis Catalina,mode: "legacy_dmg"): das ist bereits ein fertiges, bootfaehiges Volume.createinstallmediabraucht es gar nicht erst — Apples eigenes Bordmittelasr restore --source ... --target ... --erase --nopromptschreibt es direkt und sauber auf den Stick (etablierte Technik, siehe Quellen unten). Kein App-Download, keincreateinstallmedianoetig.
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)
- Quelle + Version waehlen — Apple-Server oder lokale Bibliothek
(Pfad wird abgefragt, Default rät
../downloads/libraryrelativ zum Script — passt, wenn das komplette Projekt kopiert wurde). - Installer-Payload besorgen — je nach Quelle/Modus: Download via
softwareupdate, Entpacken viainstaller -pkg, oder (legacy_dmg aus der Bibliothek) gar nichts, das Image liegt schon bereit. - 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. - Schreiben — je nach Modus entweder
createinstallmedia --nointeraction(Apple-Quelle und Bibliothek/Big-Sur+) oderdiskutil eraseDisk+asr restore --erase(Bibliothek, bis Catalina). Beides mitsudo, 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).
- Versionen auswaehlen — kombinierte Liste aus Apple-Server +
Bibliothek, Mehrfachauswahl per Komma (
1,3,4), 2 bis 8 Versionen. - Payloads besorgen — pro gewaehlter Version wie in Modus 1, Schritt 2 (Download/Entpacken/direktes Image), nacheinander.
- 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. - Partitionieren —
diskutil partitionDisklegt 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. - 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/asrfunktionieren 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 eigentlicheinstaller/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 restoreist 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.