<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
  <title>static.apur.in — notes</title>
  <link>https://static.apur.in/</link>
  <description>Short notes and longer procedures on Linux administration.</description>
  <language>en</language>
  <lastBuildDate>Wed, 04 Nov 2026 10:05:00 +0000</lastBuildDate>
  <item>
    <title>In-place Ubuntu LTS upgrade on a remote box</title>
    <link>https://static.apur.in/docs/debian-upgrade.html</link>
    <guid>https://static.apur.in/docs/debian-upgrade.html</guid>
    <pubDate>Sun, 01 Nov 2026 11:20:00 +0000</pubDate>
    <description>Order of operations for do-release-upgrade where you cannot walk up to the machine, and the four things that break quietly afterwards.</description>
  </item>
  <item>
    <title>systemd timers that quietly stopped firing</title>
    <link>https://static.apur.in/notes.html#timers</link>
    <guid>https://static.apur.in/notes.html#timers</guid>
    <pubDate>Wed, 28 Oct 2026 07:30:00 +0000</pubDate>
    <description>Persistent= is not a detail, and a service that exits 0 while doing nothing is worse than one that fails.</description>
  </item>
  <item>
    <title>restic backups on a timer, and the restore drill</title>
    <link>https://static.apur.in/docs/restic-backups.html</link>
    <guid>https://static.apur.in/docs/restic-backups.html</guid>
    <pubDate>Mon, 19 Oct 2026 16:05:00 +0000</pubDate>
    <description>Two repositories with different failure domains, a prune policy you can defend, and a restore test that is scheduled rather than intended.</description>
  </item>
  <item>
    <title>PostgreSQL backup checklist</title>
    <link>https://static.apur.in/notes.html#backup</link>
    <guid>https://static.apur.in/notes.html#backup</guid>
    <pubDate>Sun, 11 Oct 2026 15:05:00 +0000</pubDate>
    <description>Five things that decide whether the backup is real.</description>
  </item>
  <item>
    <title>Triage for a noisy access log</title>
    <link>https://static.apur.in/notes.html#logs</link>
    <guid>https://static.apur.in/notes.html#logs</guid>
    <pubDate>Wed, 30 Sep 2026 18:40:00 +0000</pubDate>
    <description>Before fail2ban: work out what the traffic actually is.</description>
  </item>
  <item>
    <title>Reading SMART before the disk tells you</title>
    <link>https://static.apur.in/docs/smartd-checks.html</link>
    <guid>https://static.apur.in/docs/smartd-checks.html</guid>
    <pubDate>Mon, 21 Sep 2026 08:15:00 +0000</pubDate>
    <description>PASSED is not a verdict. Four attributes on spinning media, four on NVMe, and the two ways monitoring quietly covers for fewer disks than you own.</description>
  </item>
  <item>
    <title>journalctl recipes I kept re-deriving</title>
    <link>https://static.apur.in/docs/journalctl-cookbook.html</link>
    <guid>https://static.apur.in/docs/journalctl-cookbook.html</guid>
    <pubDate>Sun, 30 Aug 2026 13:45:00 +0000</pubDate>
    <description>Previous boot, exact field filters, cursors for polling scripts, and the storage setting that empties the journal at exactly the wrong moment.</description>
  </item>
  <item>
    <title>apt holds and pins, and how they rot</title>
    <link>https://static.apur.in/docs/apt-holds.html</link>
    <guid>https://static.apur.in/docs/apt-holds.html</guid>
    <pubDate>Tue, 14 Jul 2026 10:00:00 +0000</pubDate>
    <description>A hold stops security updates without saying so, and the reason it was added is usually gone two point-releases later.</description>
  </item>
  <item>
    <title>SPF, DKIM and DMARC for one small domain</title>
    <link>https://static.apur.in/docs/mail-auth.html</link>
    <guid>https://static.apur.in/docs/mail-auth.html</guid>
    <pubDate>Sat, 27 Jun 2026 12:30:00 +0000</pubDate>
    <description>Three records answering three different questions, the ten-lookup limit, and why p=none comes first.</description>
  </item>
  <item>
    <title>Static addressing on a headless box without locking yourself out</title>
    <link>https://static.apur.in/docs/netplan-static.html</link>
    <guid>https://static.apur.in/docs/netplan-static.html</guid>
    <pubDate>Tue, 19 May 2026 09:10:00 +0000</pubDate>
    <description>netplan try instead of netplan apply, drop-ins instead of typed routes, and reading the generated unit instead of guessing from the YAML.</description>
  </item>
  <item>
    <title>PostgreSQL maintenance that actually runs</title>
    <link>https://static.apur.in/docs/postgres-maintenance.html</link>
    <guid>https://static.apur.in/docs/postgres-maintenance.html</guid>
    <pubDate>Sat, 25 Apr 2026 14:25:00 +0000</pubDate>
    <description>Bloat you can measure, the idle-in-transaction that causes it, the XID deadline that is not negotiable, and why 400 connections is a symptom.</description>
  </item>
  <item>
    <title>Log rotation: the two ways it fails silently</title>
    <link>https://static.apur.in/docs/log-rotation.html</link>
    <guid>https://static.apur.in/docs/log-rotation.html</guid>
    <pubDate>Tue, 31 Mar 2026 08:40:00 +0000</pubDate>
    <description>copytruncate loses lines, a missing create line loses the log entirely, and the growing deleted file is invisible to du.</description>
  </item>
  <item>
    <title>SSH sessions worth configuring once</title>
    <link>https://static.apur.in/docs/ssh-sessions.html</link>
    <guid>https://static.apur.in/docs/ssh-sessions.html</guid>
    <pubDate>Thu, 05 Mar 2026 17:20:00 +0000</pubDate>
    <description>ControlPersist, keepalives that detect a dead peer instead of a dead kernel, the ~. escape, and why Include goes last.</description>
  </item>
  <item>
    <title>Kernel updates: what to keep, what to check, what breaks</title>
    <link>https://static.apur.in/docs/kernel-updates.html</link>
    <guid>https://static.apur.in/docs/kernel-updates.html</guid>
    <pubDate>Wed, 11 Feb 2026 11:05:00 +0000</pubDate>
    <description>A full /boot discovered mid-upgrade, DKMS skipped for lack of headers, and a one-off grub-reboot instead of a new default.</description>
  </item>
  <item>
    <title>What a power cut actually does to a server</title>
    <link>https://static.apur.in/docs/ups-shutdown.html</link>
    <guid>https://static.apur.in/docs/ups-shutdown.html</guid>
    <pubDate>Sat, 17 Jan 2026 20:30:00 +0000</pubDate>
    <description>The journal replayed fine, the SQLite file did not, and the backup that would have covered it had been skipped by a timer without Persistent=.</description>
  </item>
</channel>
</rss>
