🔒 Repository is read-only – file editing is disabled.

PaganLinux/tmp-patch-pagbuild-sums.py main

56 linii Raw ← Powrót
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
#!/usr/bin/env python3
"""Wymuszenie sum kontrolnych dla pakietow krytycznych w pagbuild."""
import sys

TARGETS = ["/tmp/pagbuild-src/pagbuild", "/opt/pagan-web-v2/pagbuild"]

anchor = 'echo "🚀 Budowanie: $FULL_NAME [$PKG_CAT]"\n'

insert = anchor + '''
# ── Wymuszenie sum kontrolnych dla pakietow krytycznych ─────────────────────
# Pakiety z tej listy nie moga byc budowane z sha256sums=SKIP: podmienione
# zrodlo przeszloby bez wykrycia. Swiadome obejscie: PAGBUILD_ALLOW_SKIP=1.
# Uzupelnienie sum w recepturach: pagsync --fix-sha
CRITICAL_PKGS_SUMS="glibc gcc binutils openssl gnutls nettle sudo shadow pam \
systemd dbus bash coreutils util-linux curl wget gnupg libgcrypt libgpg-error \
libassuan libksba libxcrypt make-ca openssh polkit seatd kernel kernel-lts \
kernel-mainline libcap e2fsprogs procps-ng python perl zlib xz tar libarchive \
pcre2 expat iproute2 kmod elfutils attr acl gzip bzip2 less sed grep findutils gawk"

if [[ " $CRITICAL_PKGS_SUMS " == *" $PKG_NAME "* ]] && [[ "${PAGBUILD_ALLOW_SKIP:-0}" != "1" ]]; then
    _skip_count=$(python3 - "$RECIPE_FILE" <<'PYSUM'
import sys, yaml
try:
    d = yaml.safe_load(open(sys.argv[1], encoding="utf-8")) or {}
except Exception:
    print(0)
    raise SystemExit
s = d.get("sha256sums") or []
if not isinstance(s, list):
    s = [s]
print(sum(1 for x in s if str(x).strip().upper().startswith("SKIP")))
PYSUM
)
    if [[ "${_skip_count:-0}" != "0" ]]; then
        echo "❌ Błąd: $PKG_NAME jest pakietem krytycznym, a receptura ma ${_skip_count} wpis(y) SKIP w sha256sums."
        echo "   Uzupełnij sumy:      pagsync --fix-sha"
        echo "   Obejście (świadome): PAGBUILD_ALLOW_SKIP=1 pagbuild $RECIPE_FILE ..."
        exit 1
    fi
fi
'''

for path in TARGETS:
    try:
        s = open(path, encoding="utf-8").read()
    except OSError as e:
        print(f"POMINIETO {path}: {e}")
        continue
    if s.count(anchor) != 1:
        sys.exit(f"BLAD {path}: znaleziono {s.count(anchor)} wystapien kotwicy")
    if "CRITICAL_PKGS_SUMS" in s:
        print(f"juz spatchowane: {path}")
        continue
    s = s.replace(anchor, insert, 1)
    open(path, "w", encoding="utf-8").write(s)
    print(f"spatchowano {path}")