<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Systemd on DiyMediaServer</title><link>https://diymediaserver.com/tags/systemd/</link><description>Recent content in Systemd on DiyMediaServer</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 04 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://diymediaserver.com/tags/systemd/index.xml" rel="self" type="application/rss+xml"/><item><title>How to Upgrade Debian 12 to 13 in Proxmox LXC Without CREDENTIALS Errors (2026)</title><link>https://diymediaserver.com/post/upgrade-debian-12-to-13-proxmox-lxc-243-credentials-fix/</link><pubDate>Sun, 14 Sep 2025 07:41:22 -0600</pubDate><guid>https://diymediaserver.com/post/upgrade-debian-12-to-13-proxmox-lxc-243-credentials-fix/</guid><description>&lt;img src="https://diymediaserver.com/post/upgrade-debian-12-to-13-proxmox-lxc-243-credentials-fix/featured_hu_94887fef4427e98e.webp" alt="Featured image of post How to Upgrade Debian 12 to 13 in Proxmox LXC Without CREDENTIALS Errors (2026)" />&lt;p>Are you running Debian 12 (Bookworm) in an LXC container on Proxmox and want to upgrade to 13 (Trixie)? Should be straightforward, right? Well, if you&amp;rsquo;ve landed here, you&amp;rsquo;ve probably discovered that systemd has other plans.&lt;/p>
&lt;p>Here&amp;rsquo;s the thing. systemd 256+ introduces stricter credential handling that doesn&amp;rsquo;t play nicely with unprivileged LXC containers. Try the upgrade and you&amp;rsquo;ll hit the dreaded &lt;code>243/CREDENTIALS&lt;/code> error that stops things dead.&lt;/p>
&lt;p>Here&amp;rsquo;s how to work around it and upgrade your Debian LXC to Trixie without pulling your hair out.&lt;/p>
&lt;div class="alert alert-tldr">
&lt;span class="alert-icon">💭&lt;/span>
&lt;div class="alert-content">
&lt;strong>TL;DR:&lt;/strong>
Debian 13&amp;rsquo;s systemd 257 enables credential plumbing by default, which breaks unprivileged LXC containers with cryptic &lt;code>243/CREDENTIALS&lt;/code> errors. Install Debian&amp;rsquo;s &lt;code>lxc.generator&lt;/code> before you upgrade, reload systemd, then upgrade to Trixie. Leave the generator in place afterwards. Removing it hands the same failures straight back on the next reboot.
&lt;/div>
&lt;/div>
&lt;aside class="tested-on" aria-label="Tested configuration">
&lt;div class="tested-on-label">Tested on&lt;/div>
&lt;dl class="tested-on-list">&lt;dt>Proxmox VE&lt;/dt>&lt;dd>9.2.5&lt;/dd>&lt;dt>OS&lt;/dt>&lt;dd>Debian 13.6 (Trixie)&lt;/dd>&lt;dt>Kernel&lt;/dt>&lt;dd>7.0.14-6-pve&lt;/dd>&lt;dt>Container&lt;/dt>&lt;dd>unprivileged LXC, 4 cores / 8 GB&lt;/dd>&lt;dt>Systemd&lt;/dt>&lt;dd>257.13-1~deb13u1&lt;/dd>&lt;dt>Date&lt;/dt>&lt;dd>2026-08-04&lt;/dd>&lt;/dl>
&lt;/aside>
&lt;p>I&amp;rsquo;m writing this inside one of those containers. It&amp;rsquo;s an unprivileged LXC on Proxmox VE 9.2.5 (kernel &lt;code>7.0.14-6-pve&lt;/code>) running Debian 13.6 with systemd &lt;code>257.13-1~deb13u1&lt;/code>. I dropped the generator into it on 14 September 2025 and never took it back out. As I type this, &lt;code>systemctl is-system-running&lt;/code> returns &lt;code>running&lt;/code> with zero failed units and userspace boots in 492 ms.&lt;/p>
&lt;p>Upgrading Debian containers inside Proxmox VE should be boring. Boring is why you run Debian. Change your apt sources, run the upgrade, reboot, get on with your life. That&amp;rsquo;s what the Reddit threads kept telling me when Debian 13 &amp;ldquo;Trixie&amp;rdquo; dropped. But if you&amp;rsquo;re running &lt;strong>unprivileged and unnested LXCs on Proxmox 9&lt;/strong>, you already know that&amp;rsquo;s not how it goes. The result? A blinking cursor, &lt;code>status=243/CREDENTIALS&lt;/code> failures, and crawling through logs that don&amp;rsquo;t want to work.&lt;/p>
&lt;p>So we&amp;rsquo;ll take it in order. Why the error happens. What breaks when you ignore it. How to get back into a container you&amp;rsquo;ve already broken. And why a &lt;em>fresh&lt;/em> Debian 13 container that was never upgraded at all greets you with the exact same mess.&lt;/p>
&lt;script>
(function () {
var ua = navigator.userAgent || "";
if (!/Android|iPhone|iPad|iPod/i.test(ua)) return;
function fix() {
var links = document.querySelectorAll(
'.product-box .affiliate-button[href*="amzn.to"],' +
'.product-box .affiliate-button[href*="amazon."],' +
'.product-box .affiliate-button[href*="link.amazon"]'
);
for (var i = 0; i &lt; links.length; i++) {
links[i].removeAttribute("target");
var rel = (links[i].getAttribute("rel") || "").split(/\s+/)
.filter(function (t) { return t &amp;&amp; t !== "noopener"; }).join(" ");
if (rel) links[i].setAttribute("rel", rel);
else links[i].removeAttribute("rel");
}
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", fix);
} else { fix(); }
})();
&lt;/script>&lt;div class="product-box" data-asin="B0F8JG2SHN">
&lt;div class="product-box-image">&lt;img src="https://diymediaserver.com/images/products/MS-A2_hu_4a3b46e80711e3b1.webp" width="600" height="354" alt="MINISFORUM MS-A2" loading="lazy" decoding="async">&lt;/div>
&lt;div class="product-box-content">
&lt;div class="product-box-description">
&lt;strong>MINISFORUM MS-A2&lt;/strong>
Up to a 16-core Ryzen 9 9955HX in something you can hide behind a monitor, with dual 10GbE SFP+ and dual 2.5GbE on board. The core count is what matters for this kind of work: enough headroom to run a stack of LXCs and still have something left over when one of them decides to rebuild its package cache mid-upgrade. Storage takes U.2 and full-length M.2 22110, so you&amp;rsquo;re not limited to whatever fits a laptop slot.
&lt;/div>
&lt;div class="product-meta-row">
&lt;div class="product-price">
&lt;strong>Amazon Price:&lt;/strong>
&lt;span class="price-loading">Loading...&lt;/span>
&lt;span class="price-value" style="display:none;">&lt;/span>
&lt;/div>
&lt;div class="product-availability">
&lt;strong>Availability:&lt;/strong>
&lt;span class="availability-loading">Checking...&lt;/span>
&lt;span class="availability-value" style="display:none;">&lt;/span>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="product-box-links">
&lt;a href="https://amzn.to/4o0suZN" class="affiliate-button" target="_blank" rel="noopener nofollow sponsored">Amazon&lt;/a>
&lt;/div>
&lt;div class="product-affiliate-disclaimer">
&lt;small>&lt;em>Contains affiliate links. I may earn a commission at no cost to you.&lt;/em>&lt;/small>
&lt;/div>
&lt;/div>
&lt;h2 id="why-upgrading-debian-12-to-13-breaks-on-proxmox-9">Why Upgrading Debian 12 to 13 Breaks on Proxmox 9
&lt;/h2>&lt;p>When you upgrade Debian 12 to 13 (Bookworm to Trixie), the culprit hiding in the shadows is &lt;strong>systemd 256+&lt;/strong>. Debian 13 ships systemd 257. That release enabled unit credentials (&lt;code>LoadCredential&lt;/code> and &lt;code>ImportCredential&lt;/code>) by default, which sounds harmless enough.&lt;/p>
&lt;p>On bare metal or regular VMs, it works fine. But inside Proxmox LXCs, especially unprivileged ones, this feature crashes headfirst into the container&amp;rsquo;s limited namespace access. Here&amp;rsquo;s the breakdown:&lt;/p>
&lt;ul>
&lt;li>&lt;code>systemd-sysctl&lt;/code> (the service that applies kernel parameters) tries to load credentials&lt;/li>
&lt;li>LXC blocks the namespace operation because the container doesn&amp;rsquo;t have permission&lt;/li>
&lt;li>systemd throws a &lt;code>status=243/CREDENTIALS&lt;/code> error and gives up&lt;/li>
&lt;li>Other core services cascade into failure, from udev triggers to login shells&lt;/li>
&lt;/ul>
&lt;p>Most likely upgrade error:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">Job &lt;span class="k">for&lt;/span> systemd-sysctl.service failed because the control process exited with error code.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">See &lt;span class="s2">&amp;#34;systemctl status systemd-sysctl.service&amp;#34;&lt;/span> and &lt;span class="s2">&amp;#34;journalctl -xeu systemd-sysctl.service&amp;#34;&lt;/span> &lt;span class="k">for&lt;/span> details.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Processing trigger
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>systemctl status systemd-sysctl.service:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">x systemd-sysctl.service - Apply Kernel Variables
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Loaded: loaded &lt;span class="o">(&lt;/span>/usr/lib/systemd/system/systemd-sysctl.service&lt;span class="p">;&lt;/span> static&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Active: failed &lt;span class="o">(&lt;/span>Result: exit-code&lt;span class="o">)&lt;/span> since Sun 2025-09-14 05:59:21 MDT&lt;span class="p">;&lt;/span> 48s ago
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Duration: 2h 59min 12.451s
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Invocation: 63213f2f7514402f8cedd10155c7d065
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Docs: man:systemd-sysctl.service&lt;span class="o">(&lt;/span>8&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> man:sysctl.d&lt;span class="o">(&lt;/span>5&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Process: &lt;span class="m">17806&lt;/span> &lt;span class="nv">ExecStart&lt;/span>&lt;span class="o">=&lt;/span>/usr/lib/systemd/systemd-sysctl &lt;span class="o">(&lt;/span>&lt;span class="nv">code&lt;/span>&lt;span class="o">=&lt;/span>exited, &lt;span class="nv">status&lt;/span>&lt;span class="o">=&lt;/span>243/CREDENTIALS&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Main PID: &lt;span class="m">17806&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="nv">code&lt;/span>&lt;span class="o">=&lt;/span>exited, &lt;span class="nv">status&lt;/span>&lt;span class="o">=&lt;/span>243/CREDENTIALS&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Mem peak: 1.7M
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> CPU: 5ms
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="what-that-error-means">What that error means
&lt;/h3>&lt;p>systemd is trying to pass secrets inside a container that has no infrastructure for handling them. Your services never start. The container hangs during boot. And debugging is a mess, because half the logging system went down with everything else.&lt;/p>
&lt;p>&lt;code>243/CREDENTIALS&lt;/code> = &amp;ldquo;failed to set up the unit&amp;rsquo;s credentials&amp;rdquo;.&lt;/p>
&lt;h3 id="nesting-and-what-proxmox-actually-recommends">Nesting, and what Proxmox actually recommends
&lt;/h3>&lt;p>The other way out of this is &lt;strong>nesting&lt;/strong>. I want to be honest with you about it, because the original version of this post was harder on nesting than the facts support.&lt;/p>
&lt;p>Proxmox&amp;rsquo;s own position is that modern systemd needs it. Their staff have said so plainly on the forums: systemd versions 242 and newer want nesting so they can create the Linux namespaces used to isolate services. That requirement has since been written into the &lt;code>pve-container&lt;/code> package itself, where the nesting feature description now ends with the line &amp;ldquo;That is also required by systemd to isolate services.&amp;rdquo;&lt;/p>
&lt;p>The security tradeoff is real, but it&amp;rsquo;s narrower than it sounds. On an unprivileged container, nesting exposes the host&amp;rsquo;s procfs and sysfs contents to the guest. The Proxmox documentation describes the feature as &amp;ldquo;best used with unprivileged containers with additional id mapping,&amp;rdquo; which is another way of saying it&amp;rsquo;s the supported configuration rather than a workaround.&lt;/p>
&lt;p>Privileged plus nesting is the combination that should worry you. Proxmox staff describe that pairing as &amp;ldquo;essentially uncontained.&amp;rdquo;&lt;/p>
&lt;p>For the record, every container in my own fleet now runs unprivileged with &lt;code>nesting=1&lt;/code>. The generator approach in this post is what you reach for when you specifically want nesting turned off, or when you&amp;rsquo;re upgrading a container in place and would rather not change its feature flags mid-migration. Both paths work. Pick the one whose tradeoff you&amp;rsquo;d rather own.&lt;/p>
&lt;h2 id="warn-systemd-257-detected-you-may-need-to-enable-nesting">&amp;ldquo;WARN: systemd 257 detected. You may need to enable nesting&amp;rdquo;
&lt;/h2>&lt;p>If you got here by pasting that exact string into a search box, this section is for you.&lt;/p>
&lt;p>Proxmox added the warning in &lt;code>pve-container&lt;/code> 6.0.19. Start a container running a modern systemd and it tells you up front that nesting may be required. You&amp;rsquo;ll see it on &lt;code>pct start&lt;/code> or in the task log:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">WARN: systemd &lt;span class="m">257&lt;/span> detected. You may need to &lt;span class="nb">enable&lt;/span> nesting.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Two things worth knowing.&lt;/p>
&lt;p>First, the number is whatever systemd version your container ships. People see 256, 257 and 258 depending on the distribution inside. Debian 13 reports 257. Same cause, same fix. Guidance written about one number applies to the rest.&lt;/p>
&lt;p>Second, it&amp;rsquo;s a warning. Nothing more. The container will still start. What happens after that depends on whether anything inside it needs the credential machinery, and on Debian 13 with nesting off and no generator installed, plenty does. The container comes up &lt;strong>degraded&lt;/strong> with a stack of units failing &lt;code>243/CREDENTIALS&lt;/code>, &lt;code>systemd-udev-load-credentials.service&lt;/code> among them, and the Proxmox web console shows a black screen where the login prompt should be.&lt;/p>
&lt;p>You have two ways to make the warning stop mattering:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Option A: take Proxmox&amp;#39;s advice and enable nesting (run on the host)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pct &lt;span class="nb">set&lt;/span> &amp;lt;CTID&amp;gt; --features &lt;span class="nv">nesting&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pct reboot &amp;lt;CTID&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Option B: install the generator inside the container and leave nesting off&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># (full walkthrough below)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The warning itself doesn&amp;rsquo;t disappear with Option B, because Proxmox emits it from the systemd version it detects, without checking whether the container is healthy. Confirm with &lt;code>systemctl is-system-running&lt;/code> inside the container instead of trusting the absence of a warning.&lt;/p>
&lt;h2 id="what-breaks-if-you-dont-fix-it">What breaks if you don&amp;rsquo;t fix it
&lt;/h2>&lt;p>Try to upgrade to Debian 13 (Trixie) without handling the systemd changes first, and your LXC container becomes a flashing cursor:&lt;/p>
&lt;ul>
&lt;li>The container won&amp;rsquo;t boot cleanly. It hangs there, mocking your weekend plans.&lt;/li>
&lt;li>Critical systemd units like &lt;code>systemd-sysctl&lt;/code>, &lt;code>systemd-udev-trigger&lt;/code>, &lt;code>systemd-udev-load-credentials&lt;/code> and terminal login will fail consistently. One report against the community-scripts project counted 19 failed units on a fresh Debian 13 container that had never been upgraded at all.&lt;/li>
&lt;li>&lt;code>journald&lt;/code> may crash, which means you lose the diagnostic logs you desperately need to figure out what went wrong.&lt;/li>
&lt;li>The Proxmox noVNC console shows nothing at all, because &lt;code>agetty&lt;/code> is one of the casualties.&lt;/li>
&lt;/ul>
&lt;p>That last point catches people out, and it&amp;rsquo;s also the thing that saves you. The console being dead doesn&amp;rsquo;t mean the container is unreachable. See the recovery section below.&lt;/p>
&lt;div class="product-box" data-asin="B0CLTNC6V6">
&lt;div class="product-box-image">&lt;img src="https://diymediaserver.com/images/products/minidesktop_hu_1a8dd2d800be51f0.webp" width="600" height="470" alt="ASRock Mini-Desktop Computer" loading="lazy" decoding="async">&lt;/div>
&lt;div class="product-box-content">
&lt;div class="product-box-description">
&lt;strong>ASRock Mini-Desktop Computer&lt;/strong>
A 1.92L barebone that takes any 65W LGA1700 chip from 12th through 14th Gen, so you pick the CPU rather than accepting whatever a vendor soldered down. Two SO-DIMM slots reach 64GB, and you get a Gen5 x4 M.2, a Gen4 x4 M.2 and two 2.5-inch bays. It&amp;rsquo;s a barebone, so budget for the CPU, RAM, cooler and drives on top of the sticker price.
&lt;/div>
&lt;div class="product-meta-row">
&lt;div class="product-price">
&lt;strong>Amazon Price:&lt;/strong>
&lt;span class="price-loading">Loading...&lt;/span>
&lt;span class="price-value" style="display:none;">&lt;/span>
&lt;/div>
&lt;div class="product-availability">
&lt;strong>Availability:&lt;/strong>
&lt;span class="availability-loading">Checking...&lt;/span>
&lt;span class="availability-value" style="display:none;">&lt;/span>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="product-box-links">
&lt;a href="https://amzn.to/4kVe2jP" class="affiliate-button" target="_blank" rel="noopener nofollow sponsored">Amazon&lt;/a>
&lt;/div>
&lt;div class="product-affiliate-disclaimer">
&lt;small>&lt;em>Contains affiliate links. I may earn a commission at no cost to you.&lt;/em>&lt;/small>
&lt;/div>
&lt;/div>
&lt;h2 id="the-fix-lxcgenerator-for-proxmox-lxc-templates">The Fix: lxc.generator for Proxmox LXC Templates
&lt;/h2>&lt;p>Debian includes a small but clever utility called &lt;strong>lxc.generator&lt;/strong> (part of the distrobuilder package) that solves this problem. It runs early in the systemd boot sequence and automatically patches unit files to make them container-friendly &lt;a class="link" href="https://sources.debian.org/src/distrobuilder/3.2-2/distrobuilder/lxc.generator/" target="_blank" rel="noopener"
>Debian Sources&lt;/a>. Here&amp;rsquo;s what it does:&lt;/p>
&lt;ul>
&lt;li>Detects when the system is running inside an LXC container or an unprivileged environment&lt;/li>
&lt;li>Strips problematic flags like &lt;code>LoadCredential=&lt;/code> and &lt;code>ImportCredential=&lt;/code> that cause the 243/CREDENTIALS errors&lt;/li>
&lt;li>Relaxes security hardening settings that don&amp;rsquo;t work properly in containers&lt;/li>
&lt;li>Masks services that would otherwise crash during container startup&lt;/li>
&lt;/ul>
&lt;p>The generator creates temporary drop-in files under &lt;code>/run/systemd/&lt;/code> rather than permanently modifying anything on disk. Nothing on your root filesystem changes, and the drop-ins are rebuilt from scratch on every boot.&lt;/p>
&lt;div class="alert alert-warning">
&lt;span class="alert-icon">⚠️&lt;/span>
&lt;div class="alert-content">
&lt;strong>Warning:&lt;/strong>
Tested on &lt;strong>Proxmox VE 9.x&lt;/strong> with &lt;strong>unprivileged&lt;/strong> Debian LXCs. It should also help in LXD or Incus, but I have not tested there.
&lt;/div>
&lt;/div>
&lt;h3 id="what-the-generator-actually-changes">What the generator actually changes
&lt;/h3>&lt;p>The original version of this post claimed the generator kept your security posture intact with no compromises. That wasn&amp;rsquo;t quite right, and anyone who read the script would have caught me out. Here&amp;rsquo;s the drop-in it writes to &lt;code>/run/systemd/system/service.d/zzz-lxc-service.conf&lt;/code> on a Debian 13 container, copied from the container this post was written in:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="k">[Service]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">ProcSubset&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">all&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">ProtectProc&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">default&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">ProtectControlGroups&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">no&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">ProtectKernelTunables&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">no&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">NoNewPrivileges&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">no&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">LoadCredential&lt;/span>&lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">PrivateNetwork&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">no&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">ImportCredential&lt;/span>&lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That&amp;rsquo;s a global drop-in. It applies to &lt;strong>every service in the container&lt;/strong>, and it turns off a meaningful chunk of systemd&amp;rsquo;s per-service sandboxing to do it. &lt;code>NoNewPrivileges=no&lt;/code> in particular is not nothing.&lt;/p>
&lt;p>So the honest framing is that both options cost you something. Nesting widens what the guest can see of the host. The generator widens what services inside the guest can do to each other. Neither is free, and which one you prefer depends on which boundary you actually care about.&lt;/p>
&lt;p>It also writes a per-unit override for the service that started this whole mess:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># This file was created by distrobuilder&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[Service]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">ExecStart&lt;/span>&lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">ExecStart&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">-/usr/lib/systemd/systemd-sysctl&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The leading &lt;code>-&lt;/code> tells systemd to tolerate a non-zero exit from &lt;code>systemd-sysctl&lt;/code> instead of failing the unit, which is why the container stops cascading into failure.&lt;/p>
&lt;h3 id="1-patch-each-debian-12-container-before-upgrading">1) Patch each Debian 12 container &lt;em>before&lt;/em> upgrading
&lt;/h3>&lt;p>Before you upgrade Debian 12 to 13, install a small fix that prevents systemd from breaking during the transition. Enter your Debian 12 (Bookworm) LXC container and run:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo mkdir -p /etc/systemd/system-generators
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -fsSL https://sources.debian.org/data/main/d/distrobuilder/3.2-2/distrobuilder/lxc.generator &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="p">|&lt;/span> sudo tee /etc/systemd/system-generators/lxc &amp;gt;/dev/null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chmod &lt;span class="m">0755&lt;/span> /etc/systemd/system-generators/lxc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl daemon-reload
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-tip">
&lt;span class="alert-icon">💡&lt;/span>
&lt;div class="alert-content">
&lt;strong>Tip:&lt;/strong>
The generator tells systemd to disable the credential features that cause the 243/CREDENTIALS error. Install it while the container is still healthy, so the fix is already in place when the new systemd arrives.
&lt;/div>
&lt;/div>
&lt;p>Now prove it took effect before you go any further. A &lt;code>daemon-reload&lt;/code> runs the generator, so the drop-in should exist immediately:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">cat /run/systemd/system/service.d/zzz-lxc-service.conf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If that file is missing, the generator didn&amp;rsquo;t run. Check that it&amp;rsquo;s executable (&lt;code>ls -l /etc/systemd/system-generators/lxc&lt;/code> should show &lt;code>0755&lt;/code>) and that the download wasn&amp;rsquo;t truncated (it&amp;rsquo;s roughly 7 KB). Fix that before upgrading, because this is the last comfortable moment to do it.&lt;/p>
&lt;h3 id="2-upgrade-to-debian-13-trixie">2) Upgrade to Debian 13 (Trixie)
&lt;/h3>&lt;p>Still inside your LXC container:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Make sure Bookworm is up to date&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo apt upgrade -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Update every sources file to Trixie, old-style and deb822 alike&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> f in /etc/apt/sources.list &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> /etc/apt/sources.list.d/*.list &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> /etc/apt/sources.list.d/*.sources&lt;span class="p">;&lt;/span> &lt;span class="k">do&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">[&lt;/span> -f &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo sed -i &lt;span class="s1">&amp;#39;s/bookworm/trixie/g&amp;#39;&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">done&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Upgrade across versions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt dist-upgrade -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Clean up junk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt autoremove -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt autoclean -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Modernize apt format (optional but recommended)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt modernize-sources &lt;span class="o">||&lt;/span> &lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Reload systemd configs and reboot&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl daemon-reload
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo reboot
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-warning">
&lt;span class="alert-icon">⚠️&lt;/span>
&lt;div class="alert-content">
&lt;strong>Warning:&lt;/strong>
Earlier versions of this post rewrote only &lt;code>/etc/apt/sources.list&lt;/code>. That misses two common cases: repositories dropped into &lt;code>/etc/apt/sources.list.d/&lt;/code>, and containers that already run the deb822 &lt;code>.sources&lt;/code> format, where &lt;code>/etc/apt/sources.list&lt;/code> may not exist at all. The loop above covers all three paths. Run &lt;code>apt update&lt;/code> and read the output before you commit to &lt;code>dist-upgrade&lt;/code>.
&lt;/div>
&lt;/div>
&lt;h3 id="3-verify">3) Verify
&lt;/h3>&lt;p>The upgrade takes a few minutes, depending on how big the container is and how fast your mirror is. When it comes back, check three things:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">cat /etc/os-release
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">systemctl is-system-running
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">systemctl --failed
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You should see something like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nv">PRETTY_NAME&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Debian GNU/Linux 13 (trixie)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">VERSION_ID&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;13&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">VERSION&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;13 (trixie)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">VERSION_CODENAME&lt;/span>&lt;span class="o">=&lt;/span>trixie
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DEBIAN_VERSION_FULL&lt;/span>&lt;span class="o">=&lt;/span>13.6
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See &amp;ldquo;trixie&amp;rdquo; in the output? Good. Now check the second and third commands: &lt;code>is-system-running&lt;/code> should print &lt;code>running&lt;/code>, and &lt;code>systemctl --failed&lt;/code> should list nothing. A &lt;code>degraded&lt;/code> result with &lt;code>243/CREDENTIALS&lt;/code> units in the list means the generator isn&amp;rsquo;t doing its job, so go back and check the drop-in from step 1.&lt;/p>
&lt;p>Debian 13.6 has been the current point release since 11 July 2026. Yours will differ depending on when you read this, and a higher &lt;code>DEBIAN_VERSION_FULL&lt;/code> is nothing to worry about.&lt;/p>
&lt;h3 id="4-leave-the-generator-in-place">4) Leave the generator in place
&lt;/h3>&lt;p>This is the one instruction I&amp;rsquo;ve reversed since first publishing this post, and it&amp;rsquo;s worth explaining why.&lt;/p>
&lt;p>The original advice was to delete &lt;code>/etc/systemd/system-generators/lxc&lt;/code> once the upgrade completed, on the theory that it was a temporary bridge. It isn&amp;rsquo;t. The credential behaviour that broke your container during the upgrade is the ordinary behaviour of systemd 257 on Debian 13, so removing the generator hands you the same failures back on the next reboot. That&amp;rsquo;s borne out by everyone who creates a &lt;em>fresh&lt;/em> Debian 13 container with nesting off and watches it come up degraded without ever having run an upgrade at all.&lt;/p>
&lt;p>The container I&amp;rsquo;m writing this in has had the generator installed since 14 September 2025. It&amp;rsquo;s been through the 13.1 through 13.6 point releases and every reboot along the way, the most recent on 24 July 2026, and it still reports zero failed units. Leave it alone.&lt;/p>
&lt;p>If you do want it gone, enable nesting first and reboot, then confirm the container still reports &lt;code>running&lt;/code> before you delete anything.&lt;/p>
&lt;h2 id="already-upgraded-and-now-the-container-wont-boot">Already upgraded and now the container won&amp;rsquo;t boot
&lt;/h2>&lt;p>If you found this post &lt;em>after&lt;/em> running the upgrade, you&amp;rsquo;re not stuck, and you almost certainly don&amp;rsquo;t need to restore from backup.&lt;/p>
&lt;p>The critical detail: &lt;strong>the Proxmox console dying doesn&amp;rsquo;t mean the container is unreachable.&lt;/strong> &lt;code>agetty&lt;/code> fails on credentials, which kills the noVNC console, but &lt;code>pct enter&lt;/code> attaches through a different path and keeps working. From the Proxmox host:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pct enter &amp;lt;CTID&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once you&amp;rsquo;re in, install the generator exactly as in step 1, then reload and reboot:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir -p /etc/systemd/system-generators
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -fsSL https://sources.debian.org/data/main/d/distrobuilder/3.2-2/distrobuilder/lxc.generator &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &amp;gt; /etc/systemd/system-generators/lxc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">0755&lt;/span> /etc/systemd/system-generators/lxc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">systemctl daemon-reload
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat /run/systemd/system/service.d/zzz-lxc-service.conf &lt;span class="c1"># proof it ran&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">exit&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># back on the host&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pct reboot &amp;lt;CTID&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The container should come back with a working console. If &lt;code>pct enter&lt;/code> also fails, or networking never came up so you can&amp;rsquo;t reach &lt;code>sources.debian.org&lt;/code>, enable nesting from the host as the fast way back to a shell:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pct &lt;span class="nb">set&lt;/span> &amp;lt;CTID&amp;gt; --features &lt;span class="nv">nesting&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pct reboot &amp;lt;CTID&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That gets you a bootable container immediately. You can decide afterwards whether to install the generator and turn nesting back off, or leave it on and call it done.&lt;/p>
&lt;div class="product-box" data-asin="B0CQ27H8VY">
&lt;div class="product-box-image">&lt;img src="https://diymediaserver.com/images/products/intel-i5-14500_hu_5e65f197d6b7bc5e.webp" width="600" height="661" alt="Intel® Core™ i5-14500 14th Generation Desktop Processor" loading="lazy" decoding="async">&lt;/div>
&lt;div class="product-box-content">
&lt;div class="product-box-description">
&lt;strong>Intel® Core™ i5-14500 14th Generation Desktop Processor&lt;/strong>
14 cores (6 performance plus 8 efficiency) and 20 threads turboing to 5.0 GHz, with UHD 770 graphics carrying the Quick Sync engine. That last part is why this chip keeps turning up in homelab builds: Jellyfin and Plex get hardware transcoding without a discrete GPU taking up a slot. The thread count suits a Proxmox host running a dozen containers that spend most of their lives idle.
&lt;/div>
&lt;div class="product-meta-row">
&lt;div class="product-price">
&lt;strong>Amazon Price:&lt;/strong>
&lt;span class="price-loading">Loading...&lt;/span>
&lt;span class="price-value" style="display:none;">&lt;/span>
&lt;/div>
&lt;div class="product-availability">
&lt;strong>Availability:&lt;/strong>
&lt;span class="availability-loading">Checking...&lt;/span>
&lt;span class="availability-value" style="display:none;">&lt;/span>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="product-box-links">
&lt;a href="https://link.amazon/B0hN5fvVV" class="affiliate-button" target="_blank" rel="noopener nofollow sponsored">Amazon&lt;/a>
&lt;/div>
&lt;div class="product-affiliate-disclaimer">
&lt;small>&lt;em>Contains affiliate links. I may earn a commission at no cost to you.&lt;/em>&lt;/small>
&lt;/div>
&lt;/div>
&lt;h2 id="starting-fresh-creating-a-debian-13-lxc-from-a-template">Starting fresh: creating a Debian 13 LXC from a template
&lt;/h2>&lt;p>Plenty of people arrive here not because an upgrade broke, but because they tried to create a new Debian 13 container and hit a wall. The credential problem is identical. The path to it is different.&lt;/p>
&lt;p>Grab the template from the host:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pveam update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pveam available --section system &lt;span class="p">|&lt;/span> grep debian-13
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pveam download &lt;span class="nb">local&lt;/span> &amp;lt;template-filename-from-the-list-above&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I&amp;rsquo;ve deliberately not hardcoded the filename here, because it carries the point release and changes every couple of months. Read it off the &lt;code>pveam available&lt;/code> output rather than copying a stale one out of a blog post.&lt;/p>
&lt;p>Once the container is created, it runs straight into the same systemd 257 credential behaviour that broke the upgrade path. A fresh Debian 13 container with nesting disabled comes up degraded, and the fix is the same generator install from step 1. This surprises people who assume the problem was caused by the upgrade process. It wasn&amp;rsquo;t. The upgrade was only when they first met it.&lt;/p>
&lt;h3 id="unsupported-debian-version-when-creating-the-container">&amp;ldquo;unsupported debian version&amp;rdquo; when creating the container
&lt;/h3>&lt;p>There&amp;rsquo;s a second, unrelated error that hits Debian 13 containers, and it looks like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">TASK ERROR: unable to create CT &lt;span class="m">200&lt;/span> - unsupported debian version &lt;span class="s1">&amp;#39;13.1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Some tooling surfaces it as a complaint that &lt;code>pct&lt;/code> reported an unsupported version and the LXC stack might be too old for the template. Same root cause either way: &lt;code>/usr/share/perl5/PVE/LXC/Setup/Debian.pm&lt;/code> on the host carries a hardcoded upper bound on the Debian version it will accept, and a template newer than that bound gets rejected before the container is ever created.&lt;/p>
&lt;p>The fix is to update Proxmox. Thomas Lamprecht confirmed the version check was reworked in &lt;code>pve-container&lt;/code> 6.0.10 for Proxmox VE 9 and 5.3.1 for Proxmox VE 8, both on the &lt;code>pve-no-subscription&lt;/code> repository. The refactor also stops the same thing recurring with each new point release, which is what made 13.0 work and 13.1 fail.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">apt update &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> apt install pve-container
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you genuinely can&amp;rsquo;t update the host right now, the interim workaround is to edit line 39 of &lt;code>/usr/share/perl5/PVE/LXC/Setup/Debian.pm&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-perl" data-lang="perl">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># before&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">die&lt;/span> &lt;span class="s">&amp;#34;unsupported debian version &amp;#39;$version&amp;#39;\n&amp;#34;&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$version&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">$version&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># after&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">die&lt;/span> &lt;span class="s">&amp;#34;unsupported debian version &amp;#39;$version&amp;#39;\n&amp;#34;&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$version&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nv">$version&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Restart the host afterwards. Treat this as a stopgap. A package update will overwrite the file, which is fine, because by then you won&amp;rsquo;t need the edit.&lt;/p>
&lt;h2 id="alternative-options-pick-your-poison">Alternative Options: Pick Your Poison
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Option&lt;/th>
&lt;th>What it costs you&lt;/th>
&lt;th>Effort&lt;/th>
&lt;th>Use when…&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Enable nesting (unprivileged)&lt;/strong>&lt;/td>
&lt;td>Host procfs and sysfs contents visible to the guest&lt;/td>
&lt;td>Low&lt;/td>
&lt;td>You want the configuration Proxmox documents and supports&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Use &lt;code>lxc.generator&lt;/code> (this post)&lt;/strong>&lt;/td>
&lt;td>systemd&amp;rsquo;s per-service sandboxing relaxed container-wide&lt;/td>
&lt;td>Low&lt;/td>
&lt;td>You want nesting to stay off, or you&amp;rsquo;re upgrading in place&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Flip to privileged LXC&lt;/strong>&lt;/td>
&lt;td>UID mapping isolation gone, much larger blast radius&lt;/td>
&lt;td>Medium&lt;/td>
&lt;td>You need kernel options that won&amp;rsquo;t work unprivileged&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Migrate to VM&lt;/strong>&lt;/td>
&lt;td>Real overhead and resource cost&lt;/td>
&lt;td>High&lt;/td>
&lt;td>You want zero container weirdness&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The top two are both defensible and I run the first one across my fleet. Avoid combining privileged with nesting, which Proxmox staff describe as essentially uncontained.&lt;/p>
&lt;h2 id="faqs">FAQs
&lt;/h2>&lt;details class="collapse md" >
&lt;summary>➤ What does `status=243/CREDENTIALS` mean, exactly?&lt;/summary>
&lt;div class="collapse-content">It&amp;rsquo;s a systemd error code that translates to &amp;ldquo;failed to set up credentials.&amp;rdquo; Starting with systemd 256, the system expects to mount sensitive files like API tokens into service units through tmpfs-backed namespaces. The problem? Unprivileged LXC containers don&amp;rsquo;t have the kernel options to support this feature, so services that rely on it fail to start.&lt;/div>
&lt;/details>
&lt;details class="collapse md" >
&lt;summary>➤ Why does Proxmox tell me to enable nesting if this post shows a way around it?&lt;/summary>
&lt;div class="collapse-content">Because nesting is the configuration Proxmox supports for modern systemd, and their warning reflects that. The generator is a legitimate alternative when you want nesting off, but it isn&amp;rsquo;t the officially blessed path. Both work. The generator trades systemd&amp;rsquo;s in-container sandboxing for the host visibility that nesting would give away.&lt;/div>
&lt;/details>
&lt;details class="collapse md" >
&lt;summary>➤ Does the systemd version number in the warning matter?&lt;/summary>
&lt;div class="collapse-content">No. Whether it says 256, 257 or 258 depends on which distribution release is inside the container. Debian 13 reports 257. The cause is the same credential handling in all of them and the fix doesn&amp;rsquo;t change, so guidance written against one number applies to the rest.&lt;/div>
&lt;/details>
&lt;details class="collapse md" >
&lt;summary>➤ Could I enable nesting and forget about it?&lt;/summary>
&lt;div class="collapse-content">Yes, and that&amp;rsquo;s what I do on my own fleet. Nesting exposes more of the host&amp;rsquo;s &lt;code>/proc&lt;/code> and &lt;code>/sys&lt;/code> to the container, which is a real cost, but on an unprivileged container with id mapping it&amp;rsquo;s the arrangement Proxmox recommends. Keep it away from privileged containers, where the combination removes most of the isolation.&lt;/div>
&lt;/details>
&lt;details class="collapse md" >
&lt;summary>➤ Is `lxc.generator` safe to leave on long-term?&lt;/summary>
&lt;div class="collapse-content">Yes, and you should. It only creates ephemeral drop-in files under &lt;code>/run/systemd/&lt;/code>, rebuilt on every boot. Removing it hands back the same 243/CREDENTIALS failures on the next reboot, because Debian 13&amp;rsquo;s credential behaviour doesn&amp;rsquo;t go away after the upgrade. Mine has run continuously since September 2025.&lt;/div>
&lt;/details>
&lt;details class="collapse md" >
&lt;summary>➤ My container won&amp;#39;t boot and the console is black. Have I lost it?&lt;/summary>
&lt;div class="collapse-content">Almost certainly not. The dead console is &lt;code>agetty&lt;/code> failing on credentials, not the container being down. Run &lt;code>pct enter &amp;lt;CTID&amp;gt;&lt;/code> from the Proxmox host, which uses a different path and usually still works, then install the generator and reboot. Failing that, enable nesting from the host to get a shell back.&lt;/div>
&lt;/details>
&lt;details class="collapse md" >
&lt;summary>➤ Can I use this on LXD instead of Proxmox?&lt;/summary>
&lt;div class="collapse-content">In theory, yes. The &lt;code>lxc.generator&lt;/code> is designed to work with LXC containers, not only Proxmox. But I&amp;rsquo;ve only run these steps on Proxmox VE 9 with unprivileged containers. On LXD or Incus the concepts should carry over fine, and you&amp;rsquo;d be the one testing that.&lt;/div>
&lt;/details>
&lt;details class="collapse md" >
&lt;summary>➤ Do I need to replace my `sources.list` with deb822 format?&lt;/summary>
&lt;div class="collapse-content">Not required. Your existing old-style sources keep working fine. Debian is nudging everyone toward the newer deb822 format though, and &lt;code>apt modernize-sources&lt;/code> handles the conversion for you if you decide you want it. There&amp;rsquo;s no hurry either way.&lt;/div>
&lt;/details>
&lt;h2 id="conclusion">Conclusion
&lt;/h2>&lt;p>Upgrading an unprivileged Debian container on Proxmox shouldn&amp;rsquo;t require a vocabulary lesson in creative profanity. The culprit is systemd&amp;rsquo;s credential defaults in 256 and later, which Debian 13 inherits at version 257.&lt;/p>
&lt;p>You&amp;rsquo;ve got two honest ways through it. Enable nesting, which is what Proxmox documents and what I run across my own containers. Or install &lt;strong>lxc.generator&lt;/strong>, keep nesting off, and accept that systemd&amp;rsquo;s per-service hardening gets relaxed inside the container instead. Install it, reload, upgrade, reboot, and then leave it in place. That last part is the correction I most wanted to make to this post: the generator is not scaffolding you remove once the building is up.&lt;/p>
&lt;p>If you&amp;rsquo;re already staring at a container that won&amp;rsquo;t boot, &lt;code>pct enter&lt;/code> is almost always still open to you. And if you&amp;rsquo;re creating a fresh Debian 13 container rather than upgrading one, expect exactly the same credential failures, plus a possible &lt;code>unsupported debian version&lt;/code> error that a &lt;code>pve-container&lt;/code> update clears.&lt;/p>
&lt;p>LXC template upgrades only &lt;em>look&lt;/em> straightforward until systemd changes the rules mid-game. So when a container comes up degraded after some future point release, run &lt;code>ls /run/systemd/system/service.d/&lt;/code> before you go digging through logs. One command tells you whether the generator is still doing its job.&lt;/p>
&lt;div class="product-box" data-asin="B07V5JTMV9">
&lt;div class="product-box-image">&lt;img src="https://diymediaserver.com/images/products/raspberry-pi-4_hu_209471afc7d01326.webp" width="600" height="459" alt="RaspberryPi 4GB" loading="lazy" decoding="async">&lt;/div>
&lt;div class="product-box-content">
&lt;div class="product-box-description">
&lt;strong>RaspberryPi 4GB&lt;/strong>
Quad-core ARM, 4GB of RAM, Gigabit Ethernet and dual-band Wi-Fi, sipping a few watts. It won&amp;rsquo;t run your media server and isn&amp;rsquo;t meant to. Think of it as the machine you keep around for Pi-hole or Home Assistant, and for the throwaway Debian install you can break on purpose to see what a failed upgrade looks like before you try it on something you care about.
&lt;/div>
&lt;div class="product-meta-row">
&lt;div class="product-price">
&lt;strong>Amazon Price:&lt;/strong>
&lt;span class="price-loading">Loading...&lt;/span>
&lt;span class="price-value" style="display:none;">&lt;/span>
&lt;/div>
&lt;div class="product-availability">
&lt;strong>Availability:&lt;/strong>
&lt;span class="availability-loading">Checking...&lt;/span>
&lt;span class="availability-value" style="display:none;">&lt;/span>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="product-box-links">
&lt;a href="https://amzn.to/3ZXTKg7" class="affiliate-button" target="_blank" rel="noopener nofollow sponsored">Amazon&lt;/a>
&lt;/div>
&lt;div class="product-affiliate-disclaimer">
&lt;small>&lt;em>Contains affiliate links. I may earn a commission at no cost to you.&lt;/em>&lt;/small>
&lt;/div>
&lt;/div>
&lt;h2 id="sources">Sources
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://sources.debian.org/src/distrobuilder/3.2-2/distrobuilder/lxc.generator/" target="_blank" rel="noopener"
>Debian Sources: lxc.generator&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://bugs.launchpad.net/bugs/2046486" target="_blank" rel="noopener"
>Launchpad bug report discussing credential errors&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/lxc/distrobuilder/releases" target="_blank" rel="noopener"
>LXC Distrobuilder Releases&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://forum.proxmox.com/threads/lxc-debian-13-with-nesting-disabled-no-console.173418/" target="_blank" rel="noopener"
>Proxmox forum: LXC Debian 13 with nesting disabled, no console&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://lists.proxmox.com/pipermail/pve-devel/2025-October/076160.html" target="_blank" rel="noopener"
>pve-devel: document that systemd requires nesting (bug #6897)&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://forum.proxmox.com/threads/debian-13-1-lxc-template-fails-to-create-start-fix.171435/" target="_blank" rel="noopener"
>Proxmox forum: Debian 13.1 LXC template fails to create/start&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/community-scripts/ProxmoxVE/issues/11204" target="_blank" rel="noopener"
>community-scripts/ProxmoxVE #11204: Debian 13 LXC starts degraded when nesting is disabled&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.debian.org/releases/trixie/" target="_blank" rel="noopener"
>Debian 13 point releases&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>