<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>News on mig5 system administration</title>
    <link>https://mig5.net/news/</link>
    <description>Recent content in News on mig5 system administration</description>
    <generator>Hugo</generator>
    <language>en-au</language>
    <lastBuildDate>Sat, 12 Sep 2026 00:00:00 +1000</lastBuildDate>
    <atom:link href="https://mig5.net/news/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Starting a Qube and its dependencies in Qubes OS</title>
      <link>https://mig5.net/news/qubes-start-deps/</link>
      <pubDate>Sat, 12 Sep 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/qubes-start-deps/</guid>
      <description>A howto for qvm-start-deps: a dom0 script that recursively starts a qube&amp;rsquo;s declared dependencies (Split SSH vaults, service qubes, custom cross-qube relationships) before the target, using qvm-features as dependency tags.</description>
    </item>
    <item>
      <title>A private AI assistant over Signal</title>
      <link>https://mig5.net/news/signal-ai-assistant/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/signal-ai-assistant/</guid>
      <description>A walkthrough of building a private AI assistant over Signal - with conversation memory, an emoji-driven context reset, a sender allowlist, and a choice between local Ollama inference and a cloud API.</description>
    </item>
    <item>
      <title>Running OnionShare CLI as a systemd service</title>
      <link>https://mig5.net/news/onionshare-cli-systemd/</link>
      <pubDate>Sat, 29 Aug 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/onionshare-cli-systemd/</guid>
      <description>A worked example of running OnionShare CLI as a boot-time systemd service: a persistent Tor onion address for sharing or receiving files, with no torrc edits and no web server to write.</description>
    </item>
    <item>
      <title>Secure WebSocket push notifications from Node-RED</title>
      <link>https://mig5.net/news/nodered-websocket-push/</link>
      <pubDate>Sat, 22 Aug 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/nodered-websocket-push/</guid>
      <description>Pushing real-time updates to browser clients is easy. Doing it securely - with proper token auth, multi-tab support, and a clean fan-out - is less easy. This is a Node-RED flow that does all three, using a &amp;lsquo;secure hello&amp;rsquo; pattern where the client sends a short-lived token after connecting.</description>
    </item>
    <item>
      <title>php-sqlcipher: encrypted SQLite for PHP, done properly</title>
      <link>https://mig5.net/news/php-sqlcipher-history/</link>
      <pubDate>Sat, 15 Aug 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/php-sqlcipher-history/</guid>
      <description>php-sqlcipher has been building drop-in SQLCipher-linked PHP packages since early 2013. What started as a sed-and-compile script is now a Docker + gvisor/runsc pipeline inside a QubesOS VM, tracking SQLCipher across PHP 7.4-8.5 and five Debian/Ubuntu releases.</description>
    </item>
    <item>
      <title>Why you should be using SysMD&#39;s GuardUtils</title>
      <link>https://mig5.net/news/guardutils/</link>
      <pubDate>Sat, 08 Aug 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/guardutils/</guid>
      <description>GuardUtils is a suite of four small Python CLIs by Marco D&amp;rsquo;Aleo (SysMD) that share a common philosophy: take the irreversible, mistake-prone commands every sysadmin runs daily and make them reversible, previewable, and fail-closed. chguard, mirro, resrm, and filedust each address a different jam.</description>
    </item>
    <item>
      <title>cspresso: brewing Content Security Policies from real page loads</title>
      <link>https://mig5.net/news/cspresso-history/</link>
      <pubDate>Sat, 01 Aug 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/cspresso-history/</guid>
      <description>cspresso uses Playwright&amp;rsquo;s headless Chromium to crawl a site, observe what loads, and emit a draft Content-Security-Policy header. Over its first few releases it gained CSP bypass, policy evaluation, and non-HTML filtering.</description>
    </item>
    <item>
      <title>Wiring Enroll drift detection to Signal</title>
      <link>https://mig5.net/news/enroll-diff-webhook/</link>
      <pubDate>Sat, 25 Jul 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/enroll-diff-webhook/</guid>
      <description>When a server drifts, you want to know now - not the next time you run a compliance audit. This is a small Node-RED flow that catches Enroll diff webhooks, formats the changes into a readable summary, and sends it to your phone via Signal. Nine nodes, one honest security note.</description>
    </item>
    <item>
      <title>JinjaTurtle: turning config files into templates, safely</title>
      <link>https://mig5.net/news/jinjaturtle-history/</link>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/jinjaturtle-history/</guid>
      <description>JinjaTurtle started as a quick way to turn TOML and INI files into Jinja2 templates and Ansible defaults. It now handles seven config formats, generates loops from repeated structures, and neutralises template metacharacters to prevent injection from harvested config.</description>
    </item>
    <item>
      <title>Enroll: from snowflake harvester to hardened Ansible generator</title>
      <link>https://mig5.net/news/enroll-history/</link>
      <pubDate>Sat, 11 Jul 2026 00:00:00 +1000</pubDate>
      <guid>https://mig5.net/news/enroll-history/</guid>
      <description>Enroll started as a way to snapshot a snowflake server&amp;rsquo;s /etc into Ansible roles. After months of development and several security audits, it&amp;rsquo;s a hardened harvesting tool with remote mode, SOPS encryption, drift detection, and a focus on fail-closed safety.</description>
    </item>
  </channel>
</rss>
