Proxmox VE is installed with the enterprise repository enabled by default. Without an active subscription, apt update returns a 401 error, and updates are not downloaded. The solution is to replace the enterprise repository with the community repository, which Proxmox provides free of charge and which receives the same packages, typically with a delay of a few days.
This guide explains what the different repositories are, how to configure them correctly, and how to keep the system up to date.
Proxmox VE Repositories
Proxmox maintains three distinct repositories for PVE packages:
| Repository | URL | Access | Stability |
|---|---|---|---|
pve-enterprise | enterprise.proxmox.com | Requires a subscription | Maximum — extensively tested |
pve-no-subscription | download.proxmox.com | Free | Good — slightly less tested |
pvetest | download.proxmox.com | Free | Beta — do not use in production environment |
For a homelab, the pve-no-subscription repository is the right choice: it receives security updates and the same package versions as the enterprise repository, but without Proxmox's formal approval process. A subscription makes sense in mission-critical production environments, but not in a homelab.
Proxmox 9 is based on Debian 13 Trixie: the codename appears in repository URLs and APT configuration files.
Procedure
1. Disable the enterprise repository
The file to edit is /etc/apt/sources.list.d/pve-enterprise.list. Comment out the existing line:
sed -i 's|^deb|#deb|' /etc/apt/sources.list.d/pve-enterprise.listVerify the result:
cat /etc/apt/sources.list.d/pve-enterprise.list
# Expected output:
# #deb https://enterprise.proxmox.com/debian/pve trixie pve-enterprise2. Add the no-subscription repository
Create a dedicated file:
cat > /etc/apt/sources.list.d/pve-no-subscription.list << 'EOF'
deb http://download.proxmox.com/debian/pve trixie pve-no-subscription
EOF3. Handle the Ceph repository (if present)
If you use Ceph, there is a similar file at /etc/apt/sources.list.d/ceph.list. The same enterprise and community variants exist here:
sed -i 's|^deb|#deb|' /etc/apt/sources.list.d/ceph.listcat >> /etc/apt/sources.list.d/ceph.list << 'EOF'
deb http://download.proxmox.com/debian/ceph-squid trixie no-subscription
EOFNote
The Ceph release name (ceph-squid, ceph-reef, etc.) depends on the installed Ceph version. Check with ceph --version before proceeding.
If you do not use Ceph, skip this step or comment out the entire file.
4. Update the index and install updates
apt update && apt dist-upgradeUse dist-upgrade instead of upgrade: Proxmox VE sometimes updates the kernel or packages with changed dependencies, and dist-upgrade handles these transitions correctly while upgrade skips them.
Warning
If the kernel is updated, reboot the node soon. Proxmox shows a warning in the web interface when the running kernel differs from the installed one.
5. Remove the "No valid subscription" pop-up
Proxmox shows a pop-up on login to the web interface when no active subscription is detected. It is not a blocker but it is annoying. Remove it by patching the interface's JavaScript file:
find /usr/share/javascript/proxmox-widget-toolkit/ -name "*.js" | xargs grep -l "No valid subscription"FILE=$(find /usr/share/javascript/proxmox-widget-toolkit/ -name "*.js" | xargs grep -l "No valid subscription")
sed -i "s/res === null || res === undefined || \!res || res/false/" "$FILE"Note
This file is overwritten on every update of the proxmox-widget-toolkit package. You will need to reapply the patch after any update that touches that package. You can automate it with a dpkg hook (see below) or accept reapplying it manually from time to time.
Automating the patch with a dpkg hook
Create a hook that re-runs the patch every time proxmox-widget-toolkit is updated:
cat > /etc/apt/apt.conf.d/99-pve-no-subscription-patch << 'EOF'
DPkg::Post-Invoke {
"FILE=$(find /usr/share/javascript/proxmox-widget-toolkit/ -name '*.js' | xargs grep -l 'No valid subscription' 2>/dev/null); [ -z \"$FILE\" ] || sed -i 's/res === null || res === undefined || \\!res || res/false/' \"$FILE\"";
};
EOFVerify the final configuration
apt-cache policy | grep -E "proxmox|download.proxmox"The output should show only download.proxmox.com (no-subscription), not enterprise.proxmox.com.
apt list --upgradable 2>/dev/nullConsiderations
Update frequency: packages in the no-subscription repo typically arrive 1–7 days later than on the enterprise repo. For a homelab this is irrelevant.
Debian security updates: the main /etc/apt/sources.list file manages base Debian packages (not PVE). Make sure it contains the correct Debian mirrors to receive security patches for the underlying operating system.
Before every dist-upgrade: check the release notes on the Proxmox forum if you are skipping several versions or if you see unexpected packages in the update list. A PVE kernel update is fine; a system library transition deserves a quick look.