- Neuer Auswahlschritt: Apple-Server (Download) vs. lokale downloads/library (Docker-Tool) -- letzteres komplett offline nutzbar. - InstallAssistant.pkg (Big Sur+) wird per installer -pkg -target / zur vollstaendigen Install-App entpackt, danach normaler createinstallmedia-Weg. - BaseSystem.dmg/InstallESD.dmg (bis Catalina) ist bereits ein fertiges bootfaehiges Volume -- kein createinstallmedia noetig, stattdessen diskutil eraseDisk + asr restore --erase (etablierte Community-Technik). - Flat-JSON-Parser (sed) fuer meta.json ohne jq/python3-Abhaengigkeit. - Auswahl-/Verzweigungslogik unter Linux mit simulierter Bibliothek end-to-end durchgetestet (beide Modi laufen korrekt bis zum jeweils ersten macOS-only-Befehl).
5.1 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 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
Fuehrt durch vier Schritte (reines Terminal-Menue, keine externen
Abhaengigkeiten — nur softwareupdate, diskutil, PlistBuddy,
installer, asr, createinstallmedia, alles Bordmittel):
- 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.
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. - Kein Multiboot-Support (anders als das Docker-Tool) — jeder Lauf erstellt immer einen kompletten Single-Version-Stick.
- Ungetestet auf echtem Mac. Die Auswahl-/Verzweigungslogik (Quelle,
Modus-Erkennung ueber
meta.json) wurde unter Linux mit einer simulierten Bibliothek end-to-end durchgespielt (bash -nsauber, beide Zweige laufen bis zum jeweils ersten macOS-only-Befehl korrekt durch). 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.