m4nifest0-tech

Search the site

Virtualization

Proxmox VE Updates Without a Subscription

Replace the enterprise repository with the community repository, understand the differences between available repositories, and keep Proxmox VE 9 up to date.
Published on 5 min readLevel: Intermediate

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:

RepositoryURLAccessStability
pve-enterpriseenterprise.proxmox.comRequires a subscriptionMaximum — extensively tested
pve-no-subscriptiondownload.proxmox.comFreeGood — slightly less tested
pvetestdownload.proxmox.comFreeBeta — 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:

On the Proxmox node
sed -i 's|^deb|#deb|' /etc/apt/sources.list.d/pve-enterprise.list

Verify the result:

cat /etc/apt/sources.list.d/pve-enterprise.list
# Expected output:
# #deb https://enterprise.proxmox.com/debian/pve trixie pve-enterprise

2. 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
EOF

3. 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:

Disable the Ceph enterprise repo
sed -i 's|^deb|#deb|' /etc/apt/sources.list.d/ceph.list
Add the Ceph no-subscription repo
cat >> /etc/apt/sources.list.d/ceph.list << 'EOF'
deb http://download.proxmox.com/debian/ceph-squid trixie no-subscription
EOF

Note

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-upgrade

Use 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:

Locate the file to patch
find /usr/share/javascript/proxmox-widget-toolkit/ -name "*.js" | xargs grep -l "No valid subscription"
Apply the patch
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:

Create the dpkg hook
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\"";
};
EOF

Verify the final configuration

Check the active repositories
apt-cache policy | grep -E "proxmox|download.proxmox"

The output should show only download.proxmox.com (no-subscription), not enterprise.proxmox.com.

Check available updates
apt list --upgradable 2>/dev/null

Considerations

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.

Related articles