Automation, Cloud, Containerization and Beyond

Get rid of the subscription Nag and set up public repos

by Sam

This article is also available in french


If you run Proxmox Virtual Environment for VMs in a lab, homelab, or even inside a small startup or SMB dev team, you’ve probably hit this daily annoyance: the “You do not have a valid subscription” popup that appears every single time you log into the web UI, plus the enterprise repositories that stop updates dead in their tracks unless you have a paid license.

Here’s how to clean it up properly on Proxmox 9 (based on Debian 13 “Trixie”). We’ll switch to the free public no-subscription repositories so updates work normally, and we’ll permanently silence that famous nag screen.

⚠️ Quick ethical note: These tweaks are perfect for personal use, labs, or evaluation. If you’re running Proxmox in a real production environment, subscribing is the best way to support the project and get official help.


Switching to No-Subscription Repositories

By default Proxmox points to paid enterprise repos. We’ll replace them with the public ones.

If you use Ceph (Squid version)

sed -i \
  -e 's|https://enterprise.proxmox.com/debian/ceph-squid|http://download.proxmox.com/debian/ceph-squid|g' \
  -e 's/Components: enterprise/Components: no-subscription/g' \
  /etc/apt/sources.list.d/ceph.sources

Remove the old enterprise repo

rm /etc/apt/sources.list.d/pve-enterprise.sources

Add the no-subscription repo

cat > /etc/apt/sources.list.d/proxmox.sources << 'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF

Refresh the package list:

apt update

From now on, apt upgrade works without any issues.

Silencing the Subscription Nag Screen for Good

On Proxmox 9 the reliable way is to flip a small condition in the JavaScript that controls the message.

Quick manual patch (great for testing)

# Always make a backup
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak

# The magic one-liner
sed -i "s/data.status.toLowerCase() !== 'active'/data.status.toLowerCase() === 'active'/" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

systemctl restart pveproxy

It works immediately… but the package will overwrite the file on the next update. So let’s make it permanent.

Permanent solution with an APT hook

We create a tiny script that re-applies the patch automatically after every package upgrade.

mkdir -p /etc/apt/scripts
nano /etc/apt/scripts/no-nag-fix.sh

Paste this script:

#!/bin/bash
TARGET="/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js"
VERFILE="/var/lib/no-nag.version"
LOGFILE="/var/log/no-nag.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$DATE] Checking..." >> "$LOGFILE"

if [ ! -f "$TARGET" ]; then
    exit 0
fi

VERSION=$(dpkg-query -W -f='${Version}' proxmox-widget-toolkit 2>/dev/null)
if [ -z "$VERSION" ]; then
    exit 0
fi

if [ -f "$VERFILE" ] && [ "$(cat "$VERFILE")" = "$VERSION" ]; then
    echo "[$DATE] Version $VERSION already patched." >> "$LOGFILE"
    exit 0
fi

if sed -i "s/data.status.toLowerCase() !== 'active'/data.status.toLowerCase() === 'active'/" "$TARGET"; then
    echo "[$DATE] Patch applied for $VERSION." >> "$LOGFILE"
    echo "$VERSION" > "$VERFILE"
    systemctl restart pveproxy > /dev/null 2>&1
else
    echo "[$DATE] ERROR applying patch." >> "$LOGFILE"
fi

Make it executable:

chmod 750 /etc/apt/scripts/no-nag-fix.sh

Now create the hook:

nano /etc/apt/apt.conf.d/99-no-nag-script

Add this single line:

DPkg::Post-Invoke { "/etc/apt/scripts/no-nag-fix.sh || true"; };

Run the script once manually:

/etc/apt/scripts/no-nag-fix.sh

Clear your browser cache (or open a private window) and reload the Proxmox UI. The subscription message is gone.

Troubleshooting

  • Message still there? → systemctl restart pveproxy, clear browser cache, check with F12.
  • “Package versions” button broken? → Reinstall and re-patch:
    apt install --reinstall proxmox-widget-toolkit
    sed -i "s/data.status.toLowerCase() !== 'active'/data.status.toLowerCase() === 'active'/" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
    systemctl restart pveproxy
    
  • Apt errors? → Double-check files in /etc/apt/sources.list.d/ and make sure the Proxmox GPG key is present.

The Opsvox Minute

With 20+ years of open-source expertise, we see a lot of Proxmox clusters running in dev teams that just want solid virtualization without turning into full-time sysadmins. We often automate these exact tweaks (plus monitoring, HA, backups, security hardening…) with Ansible so everything stays clean and your developers stay focused on shipping code.


Conclusion

You now have a clean, quiet, up-to-date Proxmox 9 setup — perfect for experimentation or daily use.

If infrastructure ever starts eating too much of your time, drop us a line. We love taking care of the ops side so you can stay 100 % on what really matters.

Happy virtualizing! 🖥️

Share twitter/ facebook/ copy link
Success! Your email is updated.
Your link has expired
Success! Check your email for magic link to sign-in.