<?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>Debian on inetshell</title><link>https://inet.sh/en/tags/debian/</link><description>Recent content in Debian on inetshell</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 25 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/en/tags/debian/index.xml" rel="self" type="application/rss+xml"/><item><title>Proxmox VE without a subscription: no-subscription repositories on PVE 9 (deb822) and PVE 8</title><link>https://inet.sh/en/posts/proxmox/no-subscription-repos/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/en/posts/proxmox/no-subscription-repos/</guid><description>How to keep a Proxmox VE without a subscription updating with no 401 errors: disable pve-enterprise and enable pve-no-subscription (plus Ceph) on PVE 9 with deb822 .sources files and on PVE 8 with .list files. Includes apt modernize-sources and the Proxmox Backup Server equivalent.</description><content:encoded><![CDATA[<h2 id="tldr">TL;DR</h2>
<p><strong>PVE 9</strong> (Debian 13 <em>trixie</em>, deb822 format):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">cat &gt; /etc/apt/sources.list.d/proxmox.sources <span class="s">&lt;&lt;&#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">Types: deb
</span></span></span><span class="line"><span class="cl"><span class="s">URIs: http://download.proxmox.com/debian/pve
</span></span></span><span class="line"><span class="cl"><span class="s">Suites: trixie
</span></span></span><span class="line"><span class="cl"><span class="s">Components: pve-no-subscription
</span></span></span><span class="line"><span class="cl"><span class="s">Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Disable enterprise (without a subscription it returns 401 on every apt update)</span>
</span></span><span class="line"><span class="cl">grep -q <span class="s1">&#39;^Enabled:&#39;</span> /etc/apt/sources.list.d/pve-enterprise.sources <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="o">||</span> <span class="nb">echo</span> <span class="s1">&#39;Enabled: false&#39;</span> &gt;&gt; /etc/apt/sources.list.d/pve-enterprise.sources
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">apt update <span class="o">&amp;&amp;</span> apt full-upgrade
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>PVE 8</strong> (Debian 12 <em>bookworm</em>, one-line format):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription&#39;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  &gt; /etc/apt/sources.list.d/pve-no-subscription.list
</span></span><span class="line"><span class="cl">sed -i <span class="s1">&#39;s/^deb /# deb /&#39;</span> /etc/apt/sources.list.d/pve-enterprise.list
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">apt update <span class="o">&amp;&amp;</span> apt full-upgrade
</span></span></code></pre></td></tr></table>
</div>
</div><p>If the host runs Ceph, the Ceph enterprise repo has to be disabled too and swapped for its <code>no-subscription</code> (<a href="/en/posts/proxmox/no-subscription-repos/#ceph">below</a>).</p>
<h2 id="what-each-repository-does">What each repository does</h2>
<table>
  <thead>
      <tr>
          <th>Repo</th>
          <th>Purpose</th>
          <th>Without a subscription</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>pve-enterprise</code></td>
          <td>Stable packages, the most tested. Needs a subscription key</td>
          <td><code>apt update</code> returns <strong>401 Unauthorized</strong></td>
      </tr>
      <tr>
          <td><code>pve-no-subscription</code></td>
          <td>Public. Same packages, a bit earlier and with less testing</td>
          <td>Works</td>
      </tr>
      <tr>
          <td><code>pve-test</code></td>
          <td>Bleeding edge, for testing</td>
          <td>Works</td>
      </tr>
  </tbody>
</table>
<p>Proxmox is clear about it: <code>pve-no-subscription</code> is for <strong>testing and non-production use</strong>; in production they want you to pay for a subscription and use enterprise. For a lab or a homelab it is the normal repo.</p>
<p>The enterprise 401 does not break anything by itself, but every <code>apt update</code> ends in an error and the other repos are left half refreshed. Disabling it is the fix; there is no need to delete it.</p>
<h2 id="pve-9-sources-files-deb822">PVE 9: .sources files (deb822)</h2>
<p>Since PVE 9 the installer already writes <code>/etc/apt/sources.list.d/pve-enterprise.sources</code> in deb822 format. A <code>.sources</code> file is a block of keys:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># /etc/apt/sources.list.d/pve-enterprise.sources
</span></span><span class="line"><span class="cl">Types: deb
</span></span><span class="line"><span class="cl">URIs: https://enterprise.proxmox.com/debian/pve
</span></span><span class="line"><span class="cl">Suites: trixie
</span></span><span class="line"><span class="cl">Components: pve-enterprise
</span></span><span class="line"><span class="cl">Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
</span></span><span class="line"><span class="cl">Enabled: false
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>Enabled: false</code> keeps it written but inactive. The no-subscription block is the one in the <a href="/en/posts/proxmox/no-subscription-repos/#tldr">TL;DR</a>; the test one is the same with <code>Components: pve-test</code>.</p>
<p>If you carry <code>.list</code> files from an upgrade off PVE 8, apt 3 converts them for you:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">apt modernize-sources
</span></span></code></pre></td></tr></table>
</div>
</div><p>It rewrites each <code>.list</code> as <code>.sources</code> and leaves the original as <code>.list.bak</code>.</p>
<h2 id="pve-8-list-files">PVE 8: .list files</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># /etc/apt/sources.list.d/pve-enterprise.list
</span></span><span class="line"><span class="cl"># deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># /etc/apt/sources.list.d/pve-no-subscription.list
</span></span><span class="line"><span class="cl">deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
</span></span></code></pre></td></tr></table>
</div>
</div><p>Commenting the enterprise line with <code>#</code> is the deb822 <code>Enabled: false</code> equivalent.</p>
<h2 id="ceph">Ceph</h2>
<p>The installer also leaves the Ceph <strong>enterprise</strong> repo. Same treatment; the repo name carries the Ceph release the cluster runs (<code>ceph -v</code>):</p>
<p>PVE 9:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># /etc/apt/sources.list.d/ceph.sources
</span></span><span class="line"><span class="cl">Types: deb
</span></span><span class="line"><span class="cl">URIs: http://download.proxmox.com/debian/ceph-tentacle
</span></span><span class="line"><span class="cl">Suites: trixie
</span></span><span class="line"><span class="cl">Components: no-subscription
</span></span><span class="line"><span class="cl">Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
</span></span></code></pre></td></tr></table>
</div>
</div><p>Swap <code>ceph-tentacle</code> for <code>ceph-squid</code> if you are still on Squid. If the original file had <code>Components: enterprise</code>, replace the whole file with this one.</p>
<p>PVE 8:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># /etc/apt/sources.list.d/ceph.list
</span></span><span class="line"><span class="cl"># deb https://enterprise.proxmox.com/debian/ceph-squid bookworm enterprise
</span></span><span class="line"><span class="cl">deb http://download.proxmox.com/debian/ceph-squid bookworm no-subscription
</span></span></code></pre></td></tr></table>
</div>
</div><p>On bookworm there are <code>ceph-quincy</code>, <code>ceph-reef</code>, and <code>ceph-squid</code>; use the one matching your cluster, not the newest.</p>
<h2 id="proxmox-backup-server">Proxmox Backup Server</h2>
<p>Identical pattern with <code>pbs</code> in the URI and <code>pbs-no-subscription</code> as the component:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># /etc/apt/sources.list.d/proxmox.sources (PBS 4, trixie)
</span></span><span class="line"><span class="cl">Types: deb
</span></span><span class="line"><span class="cl">URIs: http://download.proxmox.com/debian/pbs
</span></span><span class="line"><span class="cl">Suites: trixie
</span></span><span class="line"><span class="cl">Components: pbs-no-subscription
</span></span><span class="line"><span class="cl">Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
</span></span></code></pre></td></tr></table>
</div>
</div><p>And <code>Enabled: false</code> in <code>pbs-enterprise.sources</code>.</p>
<h2 id="traps">Traps</h2>
<ul>
<li><strong>Do not mix suites.</strong> <code>bookworm</code> on PVE 8, <code>trixie</code> on PVE 9. One line with the wrong suite breaks the next <code>full-upgrade</code>.</li>
<li><strong>The keyring is already there.</strong> <code>/usr/share/keyrings/proxmox-archive-keyring.gpg</code> ships with any ISO install. You only need to download it when installing Proxmox on top of a clean Debian (the official guide for that path covers it).</li>
<li><strong><code>Signed-By</code> is mandatory in deb822</strong>; without that line apt ignores the repo with a warning.</li>
<li><strong>If apt fails with <code>pve-apt-hook: not found</code></strong>, that is not a repo problem: <a href="/en/posts/proxmox/pve-apt-hook-not-found/">separate post</a>.</li>
<li><strong>The GUI&rsquo;s &ldquo;no valid subscription&rdquo; notice</strong> is independent of the repos and is not fixed here; a Community subscription removes it and gives you the enterprise repo as a bonus.</li>
</ul>
<p>Reference: <a href="https://pve.proxmox.com/wiki/Package_Repositories">Package Repositories</a> on the Proxmox wiki.</p>
]]></content:encoded></item><item><title>Proxmox: /usr/share/proxmox-ve/pve-apt-hook: not found when updating</title><link>https://inet.sh/en/posts/proxmox/pve-apt-hook-not-found/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/en/posts/proxmox/pve-apt-hook-not-found/</guid><description>apt fails on Proxmox VE with &amp;#39;/bin/sh: 1: /usr/share/proxmox-ve/pve-apt-hook: not found&amp;#39; because the proxmox-ve package is gone but its apt snippet is still there. How to unblock apt with an empty hook and reinstall proxmox-ve, or drop the snippet if you really removed Proxmox.</description><content:encoded><![CDATA[<h2 id="tldr">TL;DR</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">mkdir -p /usr/share/proxmox-ve
</span></span><span class="line"><span class="cl">touch /usr/share/proxmox-ve/pve-apt-hook
</span></span><span class="line"><span class="cl">chmod +x /usr/share/proxmox-ve/pve-apt-hook
</span></span><span class="line"><span class="cl">apt install -f
</span></span><span class="line"><span class="cl">apt install proxmox-ve
</span></span></code></pre></td></tr></table>
</div>
</div><p>Once <code>proxmox-ve</code> is reinstalled, the real hook replaces the empty one and <code>apt</code> is back to normal.</p>
<h2 id="the-error">The error</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">/bin/sh: 1: /usr/share/proxmox-ve/pve-apt-hook: not found
</span></span><span class="line"><span class="cl">E: Failure running script /usr/share/proxmox-ve/pve-apt-hook
</span></span></code></pre></td></tr></table>
</div>
</div><p>It shows up on any <code>apt install</code>, <code>apt upgrade</code>, or <code>apt full-upgrade</code>, and blocks everything, including whatever you try in order to fix it.</p>
<h2 id="why-it-happens">Why it happens</h2>
<p>The <code>proxmox-ve</code> package installs two things that belong together:</p>
<table>
  <thead>
      <tr>
          <th>File</th>
          <th>What it is</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>/etc/apt/apt.conf.d/10pveapthook</code></td>
          <td>Tells apt to run the hook before every dpkg operation</td>
      </tr>
      <tr>
          <td><code>/usr/share/proxmox-ve/pve-apt-hook</code></td>
          <td>The hook: protects <code>proxmox-ve</code> and the Proxmox kernel from being removed by mistake</td>
      </tr>
  </tbody>
</table>
<p>If <code>proxmox-ve</code> went away (a miscalculated <code>apt remove</code> or <code>autoremove</code>, an interrupted <code>dist-upgrade</code>, a half-installed package), the script disappears but the file under <code>/etc/apt/apt.conf.d/</code> is a <em>conffile</em> and stays. apt keeps trying to run a script that no longer exists and fails before touching anything.</p>
<h2 id="fix-if-you-want-to-keep-proxmox">Fix if you want to keep Proxmox</h2>
<p>The empty hook only gets apt running; the point is to reinstall <code>proxmox-ve</code>:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">mkdir -p /usr/share/proxmox-ve
</span></span><span class="line"><span class="cl">touch /usr/share/proxmox-ve/pve-apt-hook
</span></span><span class="line"><span class="cl">chmod +x /usr/share/proxmox-ve/pve-apt-hook
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">apt install -f            <span class="c1"># close broken dependencies first (Proxmox staff recommendation)</span>
</span></span><span class="line"><span class="cl">apt install proxmox-ve    <span class="c1"># brings back the real hook and whatever else is missing</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Check that the hook is now the real one and not your empty file:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">dpkg -S /usr/share/proxmox-ve/pve-apt-hook   <span class="c1"># proxmox-ve: /usr/share/proxmox-ve/pve-apt-hook</span>
</span></span><span class="line"><span class="cl">head -1 /usr/share/proxmox-ve/pve-apt-hook   <span class="c1"># #!/usr/bin/perl</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>After that, <code>apt full-upgrade</code> and a reboot to confirm the Proxmox kernel comes up.</p>
<h2 id="fix-if-you-removed-proxmox-on-purpose">Fix if you removed Proxmox on purpose</h2>
<p>If the box is going back to plain Debian, the snippet is leftover:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">rm /etc/apt/apt.conf.d/10pveapthook
</span></span><span class="line"><span class="cl"><span class="c1"># or, cleaner, purge what is left of the package:</span>
</span></span><span class="line"><span class="cl">dpkg --purge proxmox-ve
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>apt remove</code> leaves conffiles behind; <code>purge</code> takes them with it.</p>
<h2 id="traps">Traps</h2>
<ul>
<li><strong>Do not leave the empty hook in place.</strong> It exists so apt cannot remove <code>proxmox-ve</code> or the <code>proxmox-kernel-*</code> package by accident. With the empty file that protection is gone.</li>
<li><strong>Check what left together with <code>proxmox-ve</code>.</strong> If apt removed it, it probably took dependencies along; <code>apt install proxmox-ve</code> brings them back, but read the list before accepting.</li>
<li><strong>If <code>apt install proxmox-ve</code> cannot find the package</strong>, the problem is in the repos: <a href="/en/posts/proxmox/no-subscription-repos/">no-subscription repositories</a>.</li>
<li>Reference: <a href="https://forum.proxmox.com/threads/error-with-update-bin-sh-1-usr-share-proxmox-ve-pve-apt-hook-not-found.45436/">Proxmox forum thread</a>.</li>
</ul>
]]></content:encoded></item><item><title>Installing ssacli on Proxmox (HPE Smart Storage) when the guide fails</title><link>https://inet.sh/en/posts/proxmox/ssacli-proxmox/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/en/posts/proxmox/ssacli-proxmox/</guid><description>Install ssacli on Proxmox / Debian bookworm to manage HPE Smart Array controllers. The usual guide fails in 3 spots: dead HTTP, stale GPG key, and a false deprecation notice. Corrected copy/paste procedure.</description><content:encoded><![CDATA[<h2 id="tldr">TL;DR</h2>
<p>To manage an <strong>HPE Smart Array</strong> controller from Proxmox you need <code>ssacli</code>. The guide that ranks first on Google (<a href="https://aljax.us/install-ssacli-on-pve/">aljax.us</a>) is out of date and, as written, <strong>fails</strong>. Three things changed:</p>
<ol>
<li>The HPE repo <strong>no longer answers over HTTP</strong> (port 80) → use <code>https://</code>.</li>
<li>The <strong>GPG key in the guide is the old one</strong> → today it signs with <code>GPG-KEY2-mcp</code>.</li>
<li>The guide warns &ldquo;HPE removed the repo in Feb 2026&rdquo; → <strong>false</strong>, it&rsquo;s still live.</li>
</ol>
<p>Jump straight to the <a href="/en/posts/proxmox/ssacli-proxmox/#corrected-procedure-copypaste">corrected procedure</a> if you just want the copy/paste.</p>
<p>Tested on <strong>Proxmox VE 8 (Debian bookworm)</strong> on a host with an <strong>HPE Smart Array P840ar</strong> controller, on 2026-09-23.</p>
<h2 id="the-problem">The problem</h2>
<p><code>ssacli</code> (formerly <code>hpssacli</code>) is HPE&rsquo;s CLI for Smart Array controllers: it lets you see controllers, physical disks, logical arrays, and their health without going into iLO or rebooting into the ROM. On a Proxmox node it&rsquo;s the practical way to identify bays and check disks while the box is running.</p>
<p>The community &ldquo;standard&rdquo; path is to add HPE&rsquo;s MCP repo to <code>apt</code>. But if you copy the steps from old guides you hit two errors, one after the other:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Connection failed [IP: ... 80]
</span></span></code></pre></td></tr></table>
</div>
</div><p>and, if you fix the first but not the second:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">W: GPG error: https://downloads.linux.hpe.com/SDR/repo/mcp bookworm/current Release:
</span></span><span class="line"><span class="cl">   The following signatures couldn&#39;t be verified because the public key is not available:
</span></span><span class="line"><span class="cl">   NO_PUBKEY E3FE26E774C3A4A2
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="1-the-http-endpoint-is-dead">1. The HTTP endpoint is dead</h3>
<p>The MCP repo stopped serving over cleartext HTTP. The guides register <code>deb http://downloads.linux.hpe.com/...</code> and <code>apt update</code> hangs with <em>Connection failed</em> on port 80. The fix is simply to use <strong>HTTPS</strong> in the <code>sources.list</code> (<code>apt-transport-https</code> already ships in bookworm).</p>
<h3 id="2-the-gpg-key-in-the-guide-is-wrong">2. The GPG key in the guide is wrong</h3>
<p>Guides point to <code>hpePublicKey2048_key1.pub</code>. The repo <strong>no longer signs with that key</strong>: today it uses <code>GPG-KEY2-mcp</code>.</p>
<ul>
<li><strong>File:</strong> <code>GPG-KEY2-mcp</code></li>
<li><strong>Type:</strong> RSA-4096</li>
<li><strong>Fingerprint:</strong> <code>9E8C 4A25 C494 08EF A8D0 9D96 E3FE 26E7 74C3 A4A2</code></li>
<li><strong>Validity:</strong> 2024-09-05 → 2034-09-05</li>
</ul>
<p>Without it, <code>apt update</code> fails with <code>NO_PUBKEY E3FE26E774C3A4A2</code> (the last 16 hex of the fingerprint).</p>
<h3 id="3-the-repo-removed-notice-is-false-for-now">3. The &ldquo;repo removed&rdquo; notice is false (for now)</h3>
<p>Several guides warn that HPE took down its public repository in February 2026. As of today (2026-09-23) the <strong>MCP repo for bookworm is still live</strong> and serves <code>ssacli 6.15-11.0</code> without issue. Even so, there&rsquo;s an <a href="/en/posts/proxmox/ssacli-proxmox/#fallback-if-the-repo-disappears">RPM fallback</a> below in case the prophecy comes true one day.</p>
<h2 id="corrected-procedure-copypaste">Corrected procedure (copy/paste)</h2>
<p>As <code>root</code> on the Proxmox host:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 1. Install the correct GPG key (GPG-KEY2-mcp)</span>
</span></span><span class="line"><span class="cl">mkdir -p /etc/apt/keyrings
</span></span><span class="line"><span class="cl">curl -fsSL https://downloads.linux.hpe.com/SDR/repo/mcp/GPG-KEY2-mcp <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="p">|</span> gpg --dearmor &gt; /etc/apt/keyrings/hpePublicKey2-mcp.gpg
</span></span><span class="line"><span class="cl">chmod <span class="m">0644</span> /etc/apt/keyrings/hpePublicKey2-mcp.gpg
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 2. Register the repo (HTTPS, not HTTP; adjust the codename if not bookworm)</span>
</span></span><span class="line"><span class="cl">cat &gt; /etc/apt/sources.list.d/hp-mcp.list <span class="s">&lt;&lt;&#39;EOT&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">deb [signed-by=/etc/apt/keyrings/hpePublicKey2-mcp.gpg] https://downloads.linux.hpe.com/SDR/repo/mcp bookworm/current non-free
</span></span></span><span class="line"><span class="cl"><span class="s">EOT</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 3. Update indexes and install</span>
</span></span><span class="line"><span class="cl">apt-get update
</span></span><span class="line"><span class="cl">apt-get install -y ssacli
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 4. Verify</span>
</span></span><span class="line"><span class="cl">ssacli version
</span></span><span class="line"><span class="cl">ssacli ctrl all show
</span></span></code></pre></td></tr></table>
</div>
</div><p>On a lab node the verification looked like this:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">root@pve-node1:~# ssacli version
</span></span><span class="line"><span class="cl">   SSACLI Version:  6.15.11.0  2022-11-01
</span></span><span class="line"><span class="cl">   SOULAPI Version: 6.15.11.0  2022-11-01
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">root@pve-node1:~# ssacli ctrl all show
</span></span><span class="line"><span class="cl">Smart Array P840ar in Slot 0 (Embedded)   (sn: &lt;serial&gt;)
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="useful-ssacli-commands">Useful ssacli commands</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">ssacli ctrl all show                     <span class="c1"># list controllers</span>
</span></span><span class="line"><span class="cl">ssacli ctrl <span class="nv">slot</span><span class="o">=</span><span class="m">0</span> show detail           <span class="c1"># controller detail for slot 0</span>
</span></span><span class="line"><span class="cl">ssacli ctrl <span class="nv">slot</span><span class="o">=</span><span class="m">0</span> pd all show status    <span class="c1"># physical disk status</span>
</span></span><span class="line"><span class="cl">ssacli ctrl <span class="nv">slot</span><span class="o">=</span><span class="m">0</span> ld all show status    <span class="c1"># logical array status</span>
</span></span><span class="line"><span class="cl">ssacli ctrl <span class="nv">slot</span><span class="o">=</span><span class="m">0</span> show config           <span class="c1"># full topology (arrays, LDs, PDs)</span>
</span></span><span class="line"><span class="cl">ssacli ctrl <span class="nv">slot</span><span class="o">=</span><span class="m">0</span> modify <span class="nv">drivewritecache</span><span class="o">=</span><span class="nb">enable</span>
</span></span><span class="line"><span class="cl">ssacli ctrl <span class="nv">slot</span><span class="o">=</span><span class="m">0</span> ld <span class="m">1</span> modify <span class="nv">caching</span><span class="o">=</span><span class="nb">enable</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>To identify a physical bay by serial number (handy when someone is at the rack swapping a disk), <code>ssacli ctrl slot=0 pd all show detail</code> gives you serial, bay, and status per disk. In HBA mode, inserting a disk may transiently flag <em>&ldquo;Degraded (Not authenticated)&rdquo;</em> and then clear to OK; nothing functional changes.</p>
<h2 id="fallback-if-the-repo-disappears">Fallback if the repo disappears</h2>
<p>If <code>downloads.linux.hpe.com/SDR/repo/mcp</code> ever stops responding, download the <code>.rpm</code> from the HPE support portal and extract it by hand (Debian doesn&rsquo;t use RPM, so we just unpack it):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">rpm2cpio ssacli-*.rpm <span class="p">|</span> cpio -idmv
</span></span><span class="line"><span class="cl">cp -rv ./opt/* /opt
</span></span><span class="line"><span class="cl">cp -rv ./usr/* /usr
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="applies-to">Applies to</h2>
<p>The same procedure works on any <strong>Proxmox / Debian bookworm</strong> node with an HPE Smart Array controller (Gen8 / Gen9 / Gen10). For <strong>bullseye</strong> or <strong>trixie</strong>, change the codename in the <code>sources.list</code>.</p>
]]></content:encoded></item></channel></rss>