<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Apt on rHomelab</title><link>https://rhomelab.com/tags/apt/</link><description>Recent content in Apt on rHomelab</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 09 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://rhomelab.com/tags/apt/index.xml" rel="self" type="application/rss+xml"/><item><title>Upgrading Proxmox: No-Subscription Repos, apt Pinning, and Surviving a Major Version Jump</title><link>https://rhomelab.com/proxmox/proxmox-upgrades-no-subscription-repo/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://rhomelab.com/proxmox/proxmox-upgrades-no-subscription-repo/</guid><description>What the enterprise and no-subscription repos actually do, how to pin a package when you need to hold a kernel back, and a safe sequence for jumping a homelab Proxmox host across a major version without losing a guest.</description><content:encoded><![CDATA[<p>Every fresh Proxmox install nags you about a missing subscription the first time you log into the web UI, and most homelab operators click past it, point <code>apt</code> at the no-subscription repo, and never think about the update process again until something breaks. That&rsquo;s fine for routine point releases. It stops being fine the day you need to jump across a major version (7 to 8, 8 to 9, whatever the next one is), because that&rsquo;s the one update that can genuinely strand VMs, break a cluster&rsquo;s quorum, or leave a ZFS pool on a format the old kernel can&rsquo;t mount if you do it carelessly. The repo choice and the upgrade sequence are two separate things worth understanding on their own.</p>
<h2 id="the-three-repos-and-which-one-youre-actually-on">The three repos, and which one you&rsquo;re actually on</h2>
<p>Proxmox ships three possible repository channels, and conflating them is where most of the confusion starts:</p>
<ul>
<li><strong>Enterprise repo</strong> - the default <code>pve-enterprise</code> channel, gated behind a paid subscription key. This is the most conservative, slowest-moving channel, intended for production clusters that want updates vetted longest before they land.</li>
<li><strong>No-subscription repo</strong> - <code>pve-no-subscription</code>, free, no key required. This is what almost every homelab runs on. It gets the same packages as enterprise, just sooner, with less soak time behind it. Not &ldquo;untested,&rdquo; just newer.</li>
<li><strong>Test repo</strong> - <code>pvetest</code>, the bleeding edge, used by Proxmox&rsquo;s own team and people chasing a specific not-yet-released fix. Don&rsquo;t run this on anything you depend on.</li>
</ul>
<p>A fresh install defaults to the enterprise repo with no valid subscription attached, which means <code>apt update</code> fails outright until you fix the repo configuration. Check <code>/etc/apt/sources.list.d/pve-enterprise.list</code> (or <code>pve-enterprise.sources</code> on newer installs using the deb822 format) and comment it out or remove it, then add the no-subscription line in its place, typically in <code>/etc/apt/sources.list</code> or a new file under <code>/etc/apt/sources.list.d/</code>. The exact line depends on your Debian base release codename, so pull it from Proxmox&rsquo;s own wiki for whatever version you&rsquo;re on rather than copying an old one forward. The subscription nag popup on login is cosmetic, tied to the missing key, not the repo channel, and some people hand-edit the UI&rsquo;s JavaScript to suppress it. That edit gets silently reverted by the next package update that touches that file, so treat it as a nuisance to ignore rather than something worth fighting.</p>
<h2 id="pinning-when-you-need-to-hold-one-package-back">Pinning: when you need to hold one package back</h2>
<p>Most of the time, letting <code>apt dist-upgrade</code> pull the newest available package is exactly what you want. The exception is a known regression, a kernel version with a driver bug that breaks GPU passthrough on your specific card, or a package you&rsquo;ve deliberately tested against and don&rsquo;t want moving until you&rsquo;ve had a chance to validate the next one. Apt&rsquo;s pinning mechanism handles this without you having to remember to skip a package by hand every time you update.</p>
<p>A pin lives in <code>/etc/apt/preferences.d/</code> as a small file:</p>
<pre tabindex="0"><code>Package: pve-kernel-*
Pin: version 6.8.*
Pin-Priority: 1001
</code></pre><p>A priority above 1000 forces apt to install that version even if it counts as a downgrade from what&rsquo;s currently installed, which matters if you&rsquo;re pinning after a bad kernel already landed. A priority in the 500-999 range just means &ldquo;prefer this if available, don&rsquo;t force it.&rdquo; Pinning the kernel metapackage is the most common homelab use case, since kernel regressions are the ones most likely to show up as a dead passthrough device or a flaky NIC after a routine update. Remove the pin file once the next kernel release actually fixes the regression, otherwise you end up stuck on an old kernel indefinitely while telling yourself you&rsquo;ll get to it later.</p>
<h2 id="routine-point-release-updates">Routine point-release updates</h2>
<p>For the common case, staying current within a major version, the process is uneventful: <code>apt update</code>, then <code>apt dist-upgrade</code> (not plain <code>apt upgrade</code>, Proxmox&rsquo;s own packages sometimes need to add or remove dependencies that <code>upgrade</code> won&rsquo;t touch), review what&rsquo;s queued to change before confirming, then reboot if a new kernel landed. Check <code>pveversion</code> after rebooting to confirm you&rsquo;re actually running the kernel you think you are, since GRUB defaults can occasionally boot an older entry if something about the bootloader config is off. Do this regularly rather than letting point releases stack up for months, since the gap between your version and the current major release is exactly what makes the eventual major jump riskier.</p>
<h2 id="before-attempting-a-major-version-jump">Before attempting a major version jump</h2>
<p>A major version upgrade (crossing a full number, not a point release) changes the underlying Debian base, the kernel line, and sometimes storage or clustering internals, not just Proxmox&rsquo;s own packages. Treat it as a project, not a routine update, and do the following first, every time:</p>
<ol>
<li><strong>Back up everything that matters.</strong> A full PBS backup (or <code>vzdump</code> if you&rsquo;re not running PBS) of every VM and container, plus a copy of <code>/etc/pve</code> itself, which holds your cluster config, storage definitions, and firewall rules. If the upgrade goes sideways, you want the ability to rebuild from scratch, not just roll a snapshot back.</li>
<li><strong>Get fully current on your existing major version first.</strong> Don&rsquo;t jump from three point-releases behind straight into the next major version. Run the routine update process above until <code>pveversion</code> shows you&rsquo;re on the latest release of your current major line.</li>
<li><strong>Run Proxmox&rsquo;s own upgrade-readiness checker.</strong> Proxmox ships a dedicated script for each major transition (the naming pattern has been <code>pveX to Y</code> historically, check the current wiki page for the exact command for whatever jump you&rsquo;re making). It checks things a careless <code>apt dist-upgrade</code> won&rsquo;t catch: deprecated config syntax, storage types no longer supported, cluster nodes not yet ready, ZFS pool features that need upgrading separately. Read every warning it prints and resolve it before touching the sources list. A clean pass from this script is the actual green light, not just &ldquo;the current version works fine today.&rdquo;</li>
<li><strong>If you&rsquo;re running a cluster, upgrade one node at a time.</strong> Never run <code>dist-upgrade</code> across every node simultaneously. Pick one, upgrade it fully, confirm it rejoins the cluster and quorum is intact, then move to the next. Running two major versions side by side briefly during the rollout is expected and supported for exactly this reason; running them side by side for weeks because you lost momentum partway through is not a state to leave a cluster in.</li>
<li><strong>If you&rsquo;re running Ceph, its upgrade is a separate, ordered process from the host OS upgrade.</strong> Ceph has its own version compatibility rules and its own upgrade sequence (mons before mgrs before OSDs, one at a time), and doing a host-level <code>dist-upgrade</code> without following that sequence first is a common way to end up with a Ceph cluster that won&rsquo;t reach quorum. Don&rsquo;t treat the Proxmox host upgrade and the Ceph upgrade as the same event just because they happen close together.</li>
</ol>
<h2 id="actually-doing-the-jump">Actually doing the jump</h2>
<p>Once the checklist above is clean, the mechanics are close to the routine process: update the repository lines to point at the new major release&rsquo;s codename, <code>apt update</code>, <code>apt dist-upgrade</code>, reboot into the new kernel, then rerun <code>pveversion</code> and walk through the cluster/VM list in the web UI to confirm everything that should have survived actually did. Don&rsquo;t assume the UI looking normal means every guest came back the way it was; spot-check that a couple of VMs still boot and that storage still shows the capacity you expect, especially if a storage backend&rsquo;s on-disk format changed as part of the release.</p>
<h2 id="the-safety-net-worth-having-before-you-start">The safety net worth having before you start</h2>
<p>If your Proxmox host boots from a ZFS root, taking a manual ZFS snapshot of the boot environment immediately before the upgrade gives you a real rollback path that a backup-and-restore doesn&rsquo;t: boot back into the old snapshot and you&rsquo;re exactly where you were, no restore process, no downtime beyond a reboot. It&rsquo;s not a substitute for the VM backups in step one (a snapshot of the host&rsquo;s root doesn&rsquo;t protect your guest data if something at the storage layer changes underneath it), but it&rsquo;s cheap insurance against the single most common failure mode, a major upgrade that boots into a broken state and leaves you stuck mid-migration with no fast way back.</p>
<p>None of this is complicated once you&rsquo;ve done it once. It&rsquo;s just unforgiving the first time if you skip the readiness check and find out about an unsupported storage config from a broken boot instead of a warning message. Treat the major-version jump as the one Proxmox maintenance task that earns a deliberate checklist, and the routine point-release updates in between as exactly as boring as they should be.</p>
]]></content:encoded></item></channel></rss>