Files
macos-usb-stick-creator/frontend/index.html
T
ARIA 6f8538428c feat: Multiboot-Stick-Modus (mehrere macOS-Versionen auf einem USB-Stick)
- 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)
2026-07-18 11:34:59 +02:00

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 &mdash; 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 &mdash; 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 &mdash; 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 &amp; 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>