Initial commit: macOS USB Stick Creator - Docker Compose Web-GUI fuer bootfaehige macOS-Installer
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user