#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright (C) 2026 Ondrej Holba
"""Archa NAS: upravený shim-signed-common pro instalační ISO.

Debian se při instalaci se zapnutým Secure Bootem a moduly DKMS (ZFS) zeptá „Zakázat UEFI Secure Boot?“
(update-secureboot-policy, výchozí odpověď Ano) – to by vypnulo ověřování podpisů v shimu. Archa místo
toho zapíše vlastní klíč DKMS do MOK při prvním startu (app/mok.py, bootenv.py convert), takže otázka
jen mate. Úprava: během instalace Archa (parametr jádra instalátoru simple-cdd/profiles=archa) skript
nic nedělá. Na nainstalovaném systému se chová jako originál; verze balíčku zůstává stejná, takže ho
první aktualizace Debianu nahradí originálem.
Použití: deb_shim_quiet.py <shim-signed-common_X.deb> <výstupní .deb>
"""
import os
import subprocess
import sys
import tempfile

src, out = sys.argv[1], sys.argv[2]
w = tempfile.mkdtemp()
subprocess.run(["dpkg-deb", "-R", src, w], check=True)
p = os.path.join(w, "usr", "sbin", "update-secureboot-policy")
s = open(p).read()
anchor = "setup_mok_validation()\n{\n"
assert s.count(anchor) == 1, "update-secureboot-policy: nečekaný obsah"
s = s.replace(anchor, anchor + (
    "    # Archa NAS: během instalace z ISO se neptat – klíč modulu ZFS zapíše Archa sama (MOK, první start)\n"
    "    if grep -qs 'simple-cdd/profiles=archa' /proc/cmdline; then\n"
    "        echo 'Archa NAS: Secure Boot – klíč DKMS se zapíše při prvním startu' >&2\n"
    "        return 0\n"
    "    fi\n"), 1)
open(p, "w").write(s)
# md5sums v DEBIAN/ musí sedět (dpkg --verify)
ms = os.path.join(w, "DEBIAN", "md5sums")
if os.path.exists(ms):
    import hashlib
    rel = "usr/sbin/update-secureboot-policy"
    lines = open(ms).read().splitlines()
    h = hashlib.md5(open(p, "rb").read()).hexdigest()
    lines = [f"{h}  {rel}" if l.endswith("  " + rel) else l for l in lines]
    open(ms, "w").write("\n".join(lines) + "\n")
subprocess.run(["dpkg-deb", "--root-owner-group", "-Zxz", "-b", w, out], check=True, stdout=subprocess.DEVNULL)
print(out)
