Skip to main content

Proxmox VE ohne Subscription: kostenlose Repositories nutzen und Subscription-Hinweis ausblenden

Proxmox VE 9: No-Subscription-Popup deaktivieren

Fix

Betroffene Datei:

/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

Datei öffnen:

nano /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

Mit Strg + W nach folgendem Text suchen:

checked_command: function (orig_cmd)

Den vollständigen checked_command-Block löschen und an exakt derselben Position durch diesen Block ersetzen. Die vorhandene Einrückung beibehalten:

        checked_command: function (orig_cmd) {
            orig_cmd();
        },

Wichtig: Der komplette bisherige Inhalt der Funktion wird entfernt. Es bleibt kein alter Subscription-Code unterhalb von orig_cmd() stehen.

Danach speichern, Nano schließen und pveproxy neu starten:

systemctl restart pveproxy

Anschließend die Proxmox-Weboberfläche mit Strg + F5 neu laden.

Quick-Befehl

Wenn du die Datei nicht manuell bearbeiten willst, als root direkt in der Terminal-Session ausführen:

python3 -c '
from pathlib import Path
import re, shutil

p = Path("/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js")
s = p.read_text()

m = re.search(r"^([ \t]*)checked_command:\s*function\s*\(orig_cmd\)\s*\{", s, re.M)
if not m:
    raise SystemExit("FEHLER: checked_command wurde nicht gefunden")

indent = m.group(1)
start = m.start()
brace = s.find("{", m.start())
depth = 0
end = None

for i in range(brace, len(s)):
    if s[i] == "{":
        depth += 1
    elif s[i] == "}":
        depth -= 1
        if depth == 0:
            end = i + 1
            break

if end is None:
    raise SystemExit("FEHLER: Ende von checked_command wurde nicht gefunden")

if end >= len(s) or s[end] != ",":
    raise SystemExit("FEHLER: Abschließendes Komma von checked_command wurde nicht gefunden")
end += 1

replacement = (
    f"{indent}checked_command: function (orig_cmd) {{\n"
    f"{indent}    orig_cmd();\n"
    f"{indent}}},"
)

if s[start:end] == replacement:
    print("Patch ist bereits sauber gesetzt")
else:
    shutil.copy2(p, str(p) + ".bak")
    p.write_text(s[:start] + replacement + s[end:])
    print("Patch angewendet; Backup: " + str(p) + ".bak")
' && systemctl restart pveproxy && systemctl is-active pveproxy

Der Befehl übernimmt die vorhandene Einrückung der checked_command-Zeile und ersetzt den vollständigen Funktionsblock. Danach steht der Block an derselben Position wie vorher und ist sauber wie folgt eingerückt:

        checked_command: function (orig_cmd) {
            orig_cmd();
        },

Der alte Subscription-Code wird vollständig entfernt. Wenn tatsächlich eine Änderung vorgenommen wird, wird die vorherige Datei als proxmoxlib.js.bak gesichert.

Wenn am Ende active ausgegeben wird, läuft pveproxy wieder.

Änderung rückgängig machen

cp -a /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pveproxy && systemctl is-active pveproxy

Nach Updates

Ein Update von proxmox-widget-toolkit kann proxmoxlib.js ersetzen. Wenn das Popup danach wieder erscheint, den Quick-Befehl erneut ausführen. Vor einem erneuten tatsächlichen Patch wird die dann aktuelle Paketversion wieder als .bak gesichert.