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

Diese Anleitung beschreibt, wie ein Proxmox VE 9 System unter Debian 13 Trixie sauber auf kostenlose Repositories umgestellt wird. Zusätzlich wird erklärt, wie die Popup-Meldung **„No valid subscription - You do not have a valid subscription for this server“** in der Proxmox-Weboberfläche ausgeblendet wird.

**Wichtig:** Das Verwenden von `pve-no-subscription` und `ceph no-subscription` ist für Homelab- und Testsysteme normal. Proxmox zeigt dafür aber weiterhin Warnungen in der Repository-Ansicht an, weil diese Repositories nicht für produktive Systeme mit Support-Anspruch empfohlen werden.

**Nicht verwechseln:** Die gelben Repository-Warnungen unter `Updates → Repositories` sind nicht dieselbe Meldung wie das Popup „No valid subscription“. Der JavaScript-Patch entfernt nur das Popup, nicht die Repository-Warnungen.

---

## 1. Zielzustand

Am Ende sollen nur noch die wirklich benötigten Paketquellen aktiv sein.

Für ein normales Proxmox VE 9 Homelab ohne Subscription:

```
/etc/apt/sources.list.d/debian.sources
/etc/apt/sources.list.d/proxmox.sources
```

Optional, wenn Ceph verwendet werden soll:

```
/etc/apt/sources.list.d/ceph.sources
```

Nicht aktiv ohne Subscription:

```
/etc/apt/sources.list.d/pve-enterprise.sources
/etc/apt/sources.list.d/ceph-enterprise.sources
```

Die Datei `/etc/apt/sources.list` sollte auf einem aufgeräumten Proxmox VE 9 System idealerweise leer sein oder nur Kommentare enthalten. Die eigentlichen Debian-Repos liegen dann sauber im Deb822-Format in `/etc/apt/sources.list.d/debian.sources`.

---

## 2. Aktuelle Version prüfen

```
pveversion
cat /etc/os-release
uname -r
```

Bei Proxmox VE 9 sollte Debian 13 Trixie verwendet werden:

```
VERSION_CODENAME=trixie
```

---

## 3. Vor Änderungen Backups erstellen

Vor dem Aufräumen der Repositories werden die vorhandenen APT-Dateien gesichert. Das ist langweilig, aber deutlich besser als später aus Terminal-Asche rekonstruieren zu müssen, was man vor fünf Minuten zerstört hat.

```
mkdir -p /root/apt-repo-backup

cp -a /etc/apt/sources.list /root/apt-repo-backup/sources.list.bak 2>/dev/null || true
cp -a /etc/apt/sources.list.d /root/apt-repo-backup/sources.list.d.bak
```

---

## 4. Repository-Dateien ansehen

Alle vorhandenen Repository-Dateien anzeigen:

```
ls -la /etc/apt/
ls -la /etc/apt/sources.list.d/
```

Typische Dateien:

```
/etc/apt/sources.list
/etc/apt/sources.list.d/debian.sources
/etc/apt/sources.list.d/proxmox.sources
/etc/apt/sources.list.d/pve-enterprise.sources
/etc/apt/sources.list.d/ceph.sources
```

---

## 5. Problem aus der Proxmox-Repository-Ansicht erklären

In der Proxmox-GUI unter `Updates → Repositories` können mehrere Dinge sichtbar sein:

- `/etc/apt/sources.list` enthält alte oder doppelte Debian-Einträge.
- `/etc/apt/sources.list.d/debian.sources` enthält ebenfalls Debian-Einträge.
- Dadurch sind Debian-Repositories teilweise doppelt vorhanden.
- `pve-no-subscription` ist aktiv. Das ist für Homelab okay, erzeugt aber eine Proxmox-Warnung.
- `ceph no-subscription` ist aktiv. Auch das erzeugt eine Proxmox-Warnung.
- `pve-enterprise` ist deaktiviert. Das ist ohne Subscription korrekt.

Die Warnungen **„The no-subscription repository is not recommended for production use“** und **„The Ceph no-subscription/main repository is not recommended for production use“** sind bei kostenloser Repo-Nutzung normal. Sie bedeuten nicht automatisch, dass `apt update` kaputt ist.

---

## 6. /etc/apt/sources.list aufräumen

Auf einem sauberen Proxmox VE 9 System sollten Debian-Repositories im Deb822-Format in `/etc/apt/sources.list.d/debian.sources` stehen. Die alte Datei `/etc/apt/sources.list` sollte deshalb keine aktiven Debian-Repos mehr enthalten.

Datei öffnen:

```
nano /etc/apt/sources.list
```

Empfohlener Inhalt:

```
# Debian repositories are managed in:
# /etc/apt/sources.list.d/debian.sources
#
# This file is intentionally left without active repository entries.
```

Dadurch werden doppelte Einträge zwischen `/etc/apt/sources.list` und `/etc/apt/sources.list.d/debian.sources` vermieden.

---

## 7. Debian-Repositories sauber setzen

Datei öffnen:

```
nano /etc/apt/sources.list.d/debian.sources
```

Empfohlener Inhalt für Debian 13 Trixie:

```
Types: deb
URIs: http://deb.debian.org/debian/
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
```

`contrib`, `non-free` und `non-free-firmware` sind sinnvoll, wenn Firmware, NVIDIA-Komponenten oder andere nicht vollständig freie Pakete benötigt werden.

Keine Debian-Repositories entfernen, nur weil Proxmox installiert ist. Proxmox basiert weiterhin auf Debian und braucht Debian-Pakete.

---

## 8. Debian Backports optional setzen

Backports sind optional. Wenn sie verwendet werden, sollten sie bewusst und nicht als wilde Paket-Fundgrube genutzt werden.

Falls Backports gewünscht sind, kann eine separate Datei genutzt werden:

```
nano /etc/apt/sources.list.d/debian-backports.sources
```

Inhalt:

```
Types: deb
URIs: http://deb.debian.org/debian/
Suites: trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
```

Wenn Backports nicht benötigt werden, Datei weglassen. Weniger Repos bedeutet weniger Möglichkeiten für APT, sich wie ein überforderter Einkaufswagen zu benehmen.

---

## 9. Proxmox Enterprise Repository deaktivieren

Ohne Subscription darf das Enterprise-Repository nicht aktiv sein.

Datei öffnen:

```
nano /etc/apt/sources.list.d/pve-enterprise.sources
```

Empfohlener Inhalt:

```
Types: deb
URIs: https://enterprise.proxmox.com/debian/pve
Suites: trixie
Components: pve-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Enabled: no
```

Wichtig ist:

```
Enabled: no
```

Wenn die Datei nicht existiert, ist das ebenfalls okay. Dann ist das Enterprise-Repository nicht konfiguriert.

---

## 10. Kostenloses Proxmox Repository aktivieren

Datei öffnen oder erstellen:

```
nano /etc/apt/sources.list.d/proxmox.sources
```

Inhalt:

```
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Architectures: amd64
```

Die Zeile `Architectures: amd64` verhindert Warnungen, wenn auf dem System zusätzlich die Architektur `i386` aktiviert ist. Proxmox stellt keine i386-Pakete bereit.

---

## 11. Proxmox Keyring prüfen

Falls der Proxmox-Keyring noch nicht vorhanden ist:

```
apt install -y wget ca-certificates

wget https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -O /usr/share/keyrings/proxmox-archive-keyring.gpg
```

Hash prüfen:

```
sha256sum /usr/share/keyrings/proxmox-archive-keyring.gpg
```

Erwarteter Hash:

```
136673be77aba35dcce385b28737689ad64fd785a797e57897589aed08db6e45  /usr/share/keyrings/proxmox-archive-keyring.gpg
```

---

## 12. Ceph Repository aufräumen

Ceph wird nur benötigt, wenn auf dem Proxmox-Cluster wirklich Ceph verwendet werden soll. Wenn Ceph noch nicht genutzt wird, kann das Ceph-Repository deaktiviert werden.

### Variante A: Ceph wird aktuell nicht genutzt

Datei öffnen:

```
nano /etc/apt/sources.list.d/ceph.sources
```

Inhalt zum Deaktivieren:

```
Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Architectures: amd64
Enabled: no
```

Damit verschwindet auch die Ceph-no-subscription-Warnung, weil das Ceph-Repository nicht mehr aktiv ist.

### Variante B: Ceph wird genutzt oder vorbereitet

Datei öffnen:

```
nano /etc/apt/sources.list.d/ceph.sources
```

Inhalt:

```
Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Architectures: amd64
```

Wenn das Ceph-no-subscription-Repository aktiv ist, zeigt Proxmox in der Repository-Ansicht eine Warnung an. Das ist bei kostenloser Nutzung normal.

### Ceph Enterprise Repository deaktivieren

Falls vorhanden:

```
nano /etc/apt/sources.list.d/ceph-enterprise.sources
```

Inhalt:

```
Types: deb
URIs: https://enterprise.proxmox.com/debian/ceph-squid
Suites: trixie
Components: enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Enabled: no
```

---

## 13. i386-Architektur prüfen

Wenn `apt update` meldet, dass Proxmox keine `i386`-Pakete anbietet, ist das meist harmlos. Sauberer ist aber, entweder in den Proxmox- und Ceph-Repos `Architectures: amd64` zu setzen oder i386 zu entfernen.

Aktive Architekturen anzeigen:

```
dpkg --print-architecture
dpkg --print-foreign-architectures
```

Wenn `i386` nicht benötigt wird:

```
dpkg --remove-architecture i386
apt update
```

`i386` nur entfernen, wenn keine 32-bit-Pakete benötigt werden. Auf einem reinen Proxmox-Server ist das meistens der Fall.

---

## 14. Paketlisten aktualisieren

```
apt update
```

Gute Ausgabe:

- Keine `401 Unauthorized`
- Keine `403 Forbidden`
- Keine `NO_PUBKEY`
- Keine doppelten Repository-Warnungen
- Keine falschen Suites wie `bookworm` auf einem `trixie`-System

Wenn `apt update` sauber ist:

```
apt full-upgrade
```

Danach prüfen:

```
dpkg --audit
pveversion
uname -r
```

---

## 15. Repository-Warnungen in der Proxmox-GUI verstehen

Unter `Updates → Repositories` kann Proxmox weiterhin Warnungen anzeigen. Diese sind nicht immer Fehler.

<table id="bkmrk-meldung-bedeutung-wa"><thead><tr><th>Meldung</th><th>Bedeutung</th><th>Was tun?</th></tr></thead><tbody><tr><td>`The no-subscription repository is not recommended for production use`</td><td>`pve-no-subscription` ist aktiv.</td><td>Für Homelab okay. Für Produktivsystem Subscription nutzen.</td></tr><tr><td>`The Ceph no-subscription/main repository is not recommended for production use`</td><td>Ceph no-subscription ist aktiv.</td><td>Für Homelab okay. Wenn Ceph nicht genutzt wird, Ceph-Repo deaktivieren.</td></tr><tr><td>`Some suites are misconfigured`</td><td>Eine Quelle verwendet eine unerwartete Suite oder ist doppelt/falsch eingetragen.</td><td>Repository-Dateien prüfen und doppelte Einträge entfernen.</td></tr><tr><td>`pve-enterprise` aktiv ohne Subscription</td><td>Enterprise-Repository ist aktiv.</td><td>Mit `Enabled: no` deaktivieren.</td></tr></tbody></table>

---

# Subscription-Popup in der Weboberfläche deaktivieren

**Achtung:** Dieser Teil verändert eine Datei aus dem Paket `proxmox-widget-toolkit`. Das ist kein offiziell unterstützter Proxmox-Schalter. Nach Updates kann die Änderung überschrieben werden.

Betroffene Datei:

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

---

## 16. Backup der JavaScript-Datei erstellen

```
cp -a /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak
```

---

## 17. JavaScript-Datei bearbeiten

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

In Nano mit `Strg + W` nach folgendem Text suchen:

```
checked_command: function (orig_cmd)
```

Der originale Block sieht ungefähr so aus:

```
checked_command: function (orig_cmd) {
    Proxmox.Utils.API2Request({
        url: '/nodes/localhost/subscription',
        method: 'GET',
        failure: function (response, opts) {
            Ext.Msg.alert(gettext('Error'), response.htmlStatus);
        },
        success: function (response, opts) {
            let res = response.result;
            if (
                res === null ||
                res === undefined ||
                !res ||
                res.data.status.toLowerCase() !== 'active'
            ) {
                Ext.Msg.show({
                    title: gettext('No valid subscription'),
                    icon: Ext.Msg.WARNING,
                    message: Proxmox.Utils.getNoSubKeyHtml(res.data.url),
                    buttons: Ext.Msg.OK,
                    callback: function (btn) {
                        if (btn !== 'ok') {
                            return;
                        }
                        orig_cmd();
                    },
                });
            } else {
                orig_cmd(); 
            }
        },
    });
},
```

---

## 18. checked\_command-Block ersetzen

Den kompletten Block durch diesen kurzen Block ersetzen:

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

Das Komma am Ende muss bleiben. Wenn das Komma fehlt, kann die JavaScript-Struktur kaputtgehen und die Weboberfläche lädt nicht mehr korrekt.

---

## 19. Vollständiger Zielausschnitt

Der Bereich um `alertResponseFailure` und `checked_command` sollte danach so aussehen:

```
// can be useful for catching displaying errors from the API, e.g.:
// Proxmox.Async.api2({
//     ...
// }).catch(Proxmox.Utils.alertResponseFailure);
alertResponseFailure: (res) =>
    Ext.Msg.alert(gettext('Error'), res.htmlStatus || res.result.message),

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

Alte Code-Blöcke nicht nur auskommentieren, sondern wirklich entfernen. Auskommentierter Vendor-Code ist wie ein alter Teppich im Serverraum: irgendwann stolpert jemand darüber und keiner weiß mehr, warum er da liegt.

---

## 20. Proxmox Webproxy neu starten

```
systemctl restart pveproxy
```

Danach im Browser:

- Mit `Strg + F5` hart neu laden
- oder Browser-Cache leeren
- oder privates Fenster öffnen

Wenn weiterhin gelbe Warnungen unter `Updates → Repositories` erscheinen, ist das nicht das Subscription-Popup. Diese Warnungen kommen von der Repository-Konfiguration und bleiben bei `no-subscription`-Repos teilweise normal.

---

## 21. Änderung rückgängig machen

Falls die Weboberfläche Probleme macht:

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

Alternativ Paket neu installieren:

```
apt install --reinstall proxmox-widget-toolkit
systemctl restart pveproxy
```

---

## 22. Nach Updates erneut prüfen

Wenn `proxmox-widget-toolkit` aktualisiert wird, kann der Patch überschrieben werden. Danach kann das Popup wieder erscheinen.

Prüfen:

```
apt list --upgradable
dpkg -l proxmox-widget-toolkit
```

Falls nötig, den Patch erneut setzen.

---

# Beispiel: Saubere minimale Repository-Struktur

## 23. /etc/apt/sources.list

```
# Debian repositories are managed in:
# /etc/apt/sources.list.d/debian.sources
#
# This file is intentionally left without active repository entries.
```

## 24. /etc/apt/sources.list.d/debian.sources

```
Types: deb
URIs: http://deb.debian.org/debian/
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
```

## 25. /etc/apt/sources.list.d/proxmox.sources

```
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Architectures: amd64
```

## 26. /etc/apt/sources.list.d/pve-enterprise.sources

```
Types: deb
URIs: https://enterprise.proxmox.com/debian/pve
Suites: trixie
Components: pve-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Enabled: no
```

## 27. /etc/apt/sources.list.d/ceph.sources ohne aktive Ceph-Nutzung

```
Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Architectures: amd64
Enabled: no
```

## 28. /etc/apt/sources.list.d/ceph.sources mit aktiver Ceph-Nutzung

```
Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Architectures: amd64
```

---

# Kontrollbefehle

```
apt update
apt full-upgrade
dpkg --audit
pveversion
uname -r
systemctl status pveproxy --no-pager
systemctl status pvedaemon --no-pager
systemctl status pve-cluster --no-pager
```

Erwartung:

- `apt update` läuft ohne Enterprise-Fehler durch.
- Keine doppelten Debian-Repositories.
- Keine falschen Suites wie `bookworm` auf einem `trixie`-System.
- `dpkg --audit` gibt nichts aus.
- `pveproxy`, `pvedaemon` und `pve-cluster` laufen.
- Das Subscription-Popup erscheint nach dem Patch nicht mehr.

---

# Zusammenfassung

- Debian-Repositories wurden aus `/etc/apt/sources.list` entfernt und sauber in `debian.sources` gepflegt.
- Doppelte Debian-Einträge wurden beseitigt.
- Das Proxmox Enterprise Repository wurde deaktiviert.
- Das kostenlose `pve-no-subscription` Repository wurde aktiviert.
- Das Ceph Repository wurde je nach Nutzung aktiviert oder deaktiviert.
- Das Subscription-Popup wurde durch Ersetzen von `checked_command` in `proxmoxlib.js` deaktiviert.
- Gelbe Repository-Warnungen für `no-subscription` sind bei kostenloser Nutzung normal und nicht dasselbe wie das Subscription-Popup.