# 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 ```bash 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. **Partitionieren** — `diskutil 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.