- GUI: dritter Modus-Umschalter, Checkbox-Mehrfachauswahl statt Single-Select - Backend: sgdisk partitioniert den Stick in N Apple_HFS-Partitionen (Typ AF00), jede mit Label = macOS-Titel/Version, jede bekommt ihr eigenes Installer-Image per dd -- Macs EFI-Bootpicker (Alt/Option) zeigt alle Partitionen zur Auswahl - Groessen-Check VOR dem Schreiben: bricht mit klarer Fehlermeldung ab wenn der Stick zu klein ist, statt mittendrin zu scheitern - Dockerfile: parted (partprobe) ergaenzt - End-to-end gegen ein echtes Loop-Device verifiziert: sgdisk legt korrekte Partitionen mit Labels an, dd schreibt in die richtige Partition, Inhalt stimmt exakt ueberein (nicht nur behauptet) - README: neuer Abschnitt 4 (Funktionsweise, Ablauf, ehrliche Grenzen), Multiboot als experimentell markiert (erbt recovery-Pfad-Unsicherheit bei Big Sur+, kein echter Mac-Boot-Test bisher durchgefuehrt)
70 lines
3.2 KiB
HTML
70 lines
3.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>macOS USB Installer Tool</title>
|
|
<link rel="stylesheet" href="style.css">
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<h1>macOS USB Installer Tool</h1>
|
|
<p class="sub">Laeuft lokal via Docker — laedt Installer direkt von Apple, kein Mac noetig.</p>
|
|
</header>
|
|
|
|
<main>
|
|
<section class="card">
|
|
<div class="card-head">
|
|
<h2>Modus</h2>
|
|
</div>
|
|
<div class="mode-toggle">
|
|
<button id="modeStick" class="mode-btn active" type="button">Auf USB-Stick schreiben</button>
|
|
<button id="modeMultiboot" class="mode-btn" type="button">Multiboot-Stick (mehrere Versionen)</button>
|
|
<button id="modeDownload" class="mode-btn" type="button">Nur herunterladen (Offline-Bibliothek)</button>
|
|
</div>
|
|
<p class="detail">Im Download-Modus wird das Original-Image dauerhaft unter <code>./downloads/library/</code> im Projektordner abgelegt — ideal um sich vorab eine komplette Offline-Sammlung aller macOS-Versionen aufzubauen (z.B. auf eine externe Platte), die auch ganz ohne Internet zum Stick-Bauen reicht. Ein Stick-Bau nutzt automatisch bereits heruntergeladene Images wieder, statt sie erneut zu laden.</p>
|
|
<p id="multibootHint" class="detail" style="display:none">Legt 2-8 gewaehlte macOS-Versionen als eigene Partitionen auf EINEN Stick — Macs Bootpicker (Alt/Option-Taste beim Start) zeigt dann alle zur Auswahl. Braucht entsprechend mehr Platz auf dem Stick (Summe aller Image-Groessen + Puffer). <strong>Experimentell</strong>, besonders in Kombination mit Big-Sur+-Versionen (siehe README).</p>
|
|
<div id="libraryStatus" class="status"></div>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<div class="card-head">
|
|
<h2 id="step1Title">1. macOS-Version</h2>
|
|
<button id="refreshVersions" class="btn-ghost">neu laden</button>
|
|
</div>
|
|
<div id="catalogStatus" class="status"></div>
|
|
<div id="versionList" class="version-list"></div>
|
|
<p id="versionDetail" class="detail"></p>
|
|
</section>
|
|
|
|
<section class="card" id="deviceSection">
|
|
<div class="card-head">
|
|
<h2>2. USB-Stick</h2>
|
|
<button id="refreshDevices" class="btn-ghost">neu scannen</button>
|
|
</div>
|
|
<div id="deviceList"></div>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2 id="step3Title">3. Bestaetigen & Schreiben</h2>
|
|
<div id="stickConfirm">
|
|
<p class="warn">ACHTUNG: Der gesamte Inhalt des gewaehlten Sticks wird geloescht.</p>
|
|
<label>Tippe den Geraete-Pfad zur Bestaetigung ein (z.B. <code>/dev/sdb</code>):</label>
|
|
<input type="text" id="confirmPath" placeholder="/dev/sdX">
|
|
</div>
|
|
<p id="downloadHint" class="detail" style="display:none">Laedt das Original-Image herunter und legt es dauerhaft in der lokalen Bibliothek ab. Kein Stick noetig, nichts wird geloescht.</p>
|
|
<button id="startBtn" disabled>Stick erstellen</button>
|
|
</section>
|
|
|
|
<section class="card" id="progressCard" style="display:none">
|
|
<h2>Fortschritt</h2>
|
|
<div class="progress-bar"><div id="progressFill" class="progress-fill"></div></div>
|
|
<div id="progressPhase" class="detail"></div>
|
|
<pre id="log"></pre>
|
|
</section>
|
|
</main>
|
|
|
|
<script src="app.js"></script>
|
|
</body>
|
|
</html>
|