Initial commit: macOS USB Stick Creator - Docker Compose Web-GUI fuer bootfaehige macOS-Installer

This commit is contained in:
ARIA
2026-07-18 08:25:03 +00:00
commit e93ab96faa
11 changed files with 1037 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
"""USB-Block-Devices des Hosts auflisten (via lsblk, /dev + /run/udev gemountet)."""
import json
import subprocess
def list_usb_sticks():
out = subprocess.run(
["lsblk", "-J", "-b", "-o", "NAME,SIZE,MODEL,VENDOR,TRAN,RM,TYPE,MOUNTPOINT"],
capture_output=True,
text=True,
check=True,
).stdout
data = json.loads(out)
root = get_root_disk_name()
sticks = []
for dev in data.get("blockdevices", []):
if dev.get("type") != "disk":
continue
is_removable = str(dev.get("rm")) in ("1", "True", "true")
is_usb_tran = dev.get("tran") == "usb"
if not (is_removable or is_usb_tran):
continue
name = dev["name"]
mounted = bool(dev.get("mountpoint")) or any(
c.get("mountpoint") for c in (dev.get("children") or [])
)
sticks.append(
{
"name": name,
"path": f"/dev/{name}",
"size_bytes": int(dev.get("size") or 0),
"model": (dev.get("model") or "").strip(),
"vendor": (dev.get("vendor") or "").strip(),
"transport": dev.get("tran"),
"mounted": mounted,
"is_root_disk": name == root,
}
)
return sticks
def get_root_disk_name():
"""Name (ohne /dev/) der Platte, auf der / liegt -- fuer Schutz vor Selbstzerstoerung."""
try:
src = subprocess.run(
["findmnt", "-n", "-o", "SOURCE", "/"], capture_output=True, text=True, check=True
).stdout.strip()
pk = subprocess.run(
["lsblk", "-no", "PKNAME", src], capture_output=True, text=True
).stdout.strip()
return pk or src.replace("/dev/", "")
except Exception: # noqa: BLE001
return None