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 genau diesen Block ersetzen: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:

f=/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; python3 -c '
from pathlib import Path;Path
import shutil;re, p=shutil

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

marker="m = re.search(r"^([ \t]*)checked_command: function \s*function\s*\(orig_cmd) orig_cmd\)\s*\{";, replacement=s, re.M)
if not m:
    raise SystemExit("checked_command:FEHLER: function (orig_cmd) {\n    orig_cmd();\n},"; start=s.find(marker); assert start >= 0, "checked_command wurde nicht gefunden";)

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

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

assertif end is notNone:
    None,raise SystemExit("FEHLER: Ende von checked_command wurde nicht gefunden";)

comma=end+1if whileend comma <>= len(s) andor s[comma].isspace():end] comma += 1
assert comma < len(s) and s[comma] =!= ",",:
    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"
    old=s[start:comma+1]f"{indent}}},"
)

if olds[start:end] !== replacement:
    shutil.copy2(p, str(p)+".bak")
    p.write_text(s[:start]+replacement+s[comma+1:])
    print("Patch angewendet; Backup: "+str(p)+".bak")
else:
    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 suchtübernimmt die vorhandene Einrückung der checked_command-Zeile und ersetzt den vollständigen checked_command-FunktionsblockFunktionsblock. anhandDanach seinersteht geschachteltender KlammernBlock an derselben Position wie vorher und ersetztist ihnsauber vollständig.wie Erfolgt fügt nicht nur ein frühes return ein.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 vorher die aktuellevorherige Datei als proxmoxlib.js.bak gesichert. Ist der saubere Patch bereits gesetzt, wird das Backup nicht überschrieben.

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.