<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Home on mig5 system administration</title>
    <link>https://mig5.net/</link>
    <description>Recent content in Home 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/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>
    <item>
      <title>About</title>
      <link>https://mig5.net/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mig5.net/about/</guid>
      <description>About Miguel Jacq (he/him) Melbourne-based sysadmin and DevSecOps consultant. Making systems integrate since 2007. Quick facts Australian &amp; French citizen Linux, automation, monitoring, security Remote-friendly (UTC+10/11) How I work I&#39;m known for lateral thinking and pattern recognition - especially when systems are under pressure, or when old infrastructure needs to meet new requirements. Despite many years on the command-line, I have a background in creative writing and can document work and talk through problems clearly, for both technical and non-technical audiences.</description>
    </item>
    <item>
      <title>Bouquin</title>
      <link>https://mig5.net/projects/bouquin/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mig5.net/projects/bouquin/</guid>
      <description>Bouquin A local-first notebook &amp; planner with encrypted storage Bouquin (&#34;Book-ahn&#34;) is a notebook and planner application written in Python/Qt, backed by SQLCipher so the notebook database is encrypted at rest. Repo Design goals Encrypted-at-rest Every note is a calendar date All changes are version controlled, with a &#39;diff&#39; viewer Revert to any previous version without losing newer versions Live markdown rendering as you type No syncing: deliberately offline-first Tagging and search One-off or recurring reminders with webhook support Time tracking, invoicing and document storage features Multi-lingual (English, French and Italian translations) Links Source repo Need encryption &amp; key management help?</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://mig5.net/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mig5.net/contact/</guid>
      <description>Contact Get in touch Tell me what you&#39;re running, what&#39;s hurting, and where you want to be in 3–6 weeks.&#xA;Fastest path Contact form Encrypted email? Use the GPG key link below. Ways to reach me Contact form GPG key Signal: mig5.55 What to include What stack and hosting you&#39;re on Where you want to end up (uptime, deploy speed, auditability, costs, etc.) Any deadlines, compliance requirements, or constraints Whether you want ongoing support or a fixed-scope engagement Quick note I&#39;m based in Melbourne (UTC+10/11).</description>
    </item>
    <item>
      <title>cspresso</title>
      <link>https://mig5.net/projects/cspresso/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mig5.net/projects/cspresso/</guid>
      <description>cspresso Turn real page loads into a CSP you can ship cspresso crawls same-origin pages with headless Chromium (Playwright), watches the assets that load, and emits a draft Content-Security-Policy header. Visit cspresso.cafe Repo Copy $ pipx install cspresso $ cspresso https://example.com --max-pages 10 Why it exists CSP is powerful but notoriously fiddly. cspresso automates the &#34;observe what loads&#34; part by letting a real browser execute the app and then distilling observed origins into CSP directives.</description>
    </item>
    <item>
      <title>Enroll</title>
      <link>https://mig5.net/projects/enroll/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mig5.net/projects/enroll/</guid>
      <description>Enroll Get an existing Linux host into Ansible in seconds Enroll inspects a Debian-like or RedHat-like system, harvests the state that matters, and generates Ansible roles/playbooks so you can bring snowflakes under management fast. Visit enroll.sh Repo Copy $ enroll single-shot --harvest ./harvest --out ./ansible $ cd ./ansible &amp;&amp; tree -L 2 What it&#39;s for Hosts with no config management Fast DR snapshots you can turn into playbooks Detecting drift over time (diff mode + notifications) Highlights Fast Harvest state, then render playbooks locally.</description>
    </item>
    <item>
      <title>JinjaTurtle</title>
      <link>https://mig5.net/projects/jinjaturtle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mig5.net/projects/jinjaturtle/</guid>
      <description>JinjaTurtle Convert real config files into templates you can manage JinjaTurtle is a CLI tool that helps you generate Jinja2 templates and Ansible inventory/vars from native config files (toml/yaml/json/ini/xml and friends). Repo Copy $ jinjaturtle /etc/myapp/config.toml # → Jinja2 template + Ansible defaults When it&#39;s useful You inherited a complex config file and need to make it data-driven You want clean diffs and repeatable rollouts You&#39;re gradually migrating manual changes into config management Pairs nicely with Enroll Enroll can detect structured configs and hand off to JinjaTurtle for templating.</description>
    </item>
    <item>
      <title>Thanks</title>
      <link>https://mig5.net/thanks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mig5.net/thanks/</guid>
      <description> Message received Thanks for reaching out! I&#39;ll get back to you soon.&#xA;Explore services Browse projects Back home In the meantime Check out Enroll and cspresso If you need encrypted email, grab the GPG key </description>
    </item>
  </channel>
</rss>
