<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>My random ramblings</title>
    <link>https://devblog.yvn.no/</link>
    <description>Recent content on My random ramblings</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>devblog@yvn.no</managingEditor>
    <webMaster>devblog@yvn.no</webMaster>
    <lastBuildDate>Tue, 02 Jun 2026 13:00:00 +0200</lastBuildDate>
    <atom:link href="https://devblog.yvn.no/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Notes on IPv6</title>
      <link>https://devblog.yvn.no/posts/notes-on-ipv6/</link>
      <pubDate>Tue, 02 Jun 2026 13:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/notes-on-ipv6/</guid>
      <description>&lt;p&gt;So due to a few reasons IPv6 ended up on my radar again recently and I decided to take a new look into it. Last time I asked my ISP (NextGenTel) they said that they could enable it if I plugged in their box. I did not want to plug in their box and left it at that.&lt;/p&gt;&#xA;&lt;p&gt;This time however I wanted to at least &lt;em&gt;try&lt;/em&gt;!&lt;/p&gt;&#xA;&lt;h2 id=&#34;enabling-ipv6&#34;&gt;Enabling IPv6&lt;/h2&gt;&#xA;&lt;p&gt;First step was to enable IPv6 in my router/gateway. My very modest network is Ubiquity hardware in the Unifi lineup as I have had decent experience with exposing power user features of networking to someone that is not a network engineer. They are not without their critics out there, including for less than stellar support for IPv6 but they have not been terrible enough for me to consider replacing my hardware.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disable systemd stub resolver on Ubuntu</title>
      <link>https://devblog.yvn.no/posts/disable-systemd-stub-resolver-ubuntu/</link>
      <pubDate>Fri, 29 May 2026 14:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/disable-systemd-stub-resolver-ubuntu/</guid>
      <description>&lt;p&gt;Ever had trouble listening to port 53 on an Ubuntu installation? It is due to systemd having it&amp;rsquo;s own internal resolver doing some caching Fine, but here is how I disable it.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo sed -r -i.orig &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/#?DNSStubListener=yes/DNSStubListener=no/g&amp;#39;&lt;/span&gt; /etc/systemd/resolved.conf &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;sudo sh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;rm /etc/resolv.conf &amp;amp;&amp;amp; ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;sudo systemctl restart systemd-resolved&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now feel free to claim port 53 for Pihole, Technitium or whatever other DNS server you want listening to port 53.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Logitech MX Mini on Mac OS</title>
      <link>https://devblog.yvn.no/posts/logitech-mx-mini-mac-os/</link>
      <pubDate>Fri, 29 May 2026 13:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/logitech-mx-mini-mac-os/</guid>
      <description>&lt;p&gt;I use a (few) Logitech MX keys mini and my work laptop is a Macbook.&lt;/p&gt;&#xA;&lt;p&gt;Twice now I&amp;rsquo;ve had the situation where the keyboard is configured to be in Mac OS mode but on my Norwegian keyboard (physically and logically) the &lt;code&gt;&amp;lt;&lt;/code&gt; and &lt;code&gt;&#39;&lt;/code&gt; keys have been inverted.&lt;/p&gt;&#xA;&lt;p&gt;So for future reference the recipe to fix that is:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1. Hold fn+O for three seconds to ensure Mac OS layout&#xA;2. Hold fn+U for three seconds to toggle &amp;#34;hybrid layout&amp;#34; (requires step 1!)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bonus points&lt;/p&gt;</description>
    </item>
    <item>
      <title>Self Hosted DNS with a twist</title>
      <link>https://devblog.yvn.no/posts/self-hosted-dns/</link>
      <pubDate>Sun, 08 Mar 2026 21:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/self-hosted-dns/</guid>
      <description>&lt;p&gt;I decided to take a crack at self hosting authoritative DNS servers for my domains.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-self-hosting-dns&#34;&gt;Why self hosting DNS&lt;/h2&gt;&#xA;&lt;p&gt;In short:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Controll and compentency&lt;/li&gt;&#xA;&lt;li&gt;Cutting a dependency&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Controlling the DNS part of my setup is a part of being in charge and knowing how things fit together. For the last few years I had been using Cloudflare for my authoritative nameservers as they provide an API for updating entries - something I needed due to hosting services behind a dynamic IP address. Being re-assigned an IP I would need to update the records for my services automatically to avoid much downtime (spoiler, this is still the case), and Cloudflare made this pretty easy, in addition to actually providing a solid service for free.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Meshtastic Norway</title>
      <link>https://devblog.yvn.no/posts/meshtastic-norway/</link>
      <pubDate>Sat, 31 Jan 2026 13:15:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/meshtastic-norway/</guid>
      <description>&lt;p&gt;If you are using Meshtastic in Norway these are the settings you should set your node to:&lt;/p&gt;&#xA;&lt;p&gt;Going to &lt;code&gt;Settings -&amp;gt; LoRa&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Un-toggle &amp;#34;Use Preset&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Bandwidth: 62 (kHz)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Spread Factor: 8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Coding Rate: 5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Frequency Override: 869.618&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;why&#34;&gt;Why?&lt;/h2&gt;&#xA;&lt;p&gt;It looks like the default EU Meshtastic preset overlaps with the Norwegian network of smart power meters (AMS) so there is a lot of noise. The community has moved to these settings and hopefully there will be a push to provide them as a preset in the applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Mesh Sized Hole</title>
      <link>https://devblog.yvn.no/posts/a-mesh-sized-hole/</link>
      <pubDate>Fri, 30 Jan 2026 08:00:08 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/a-mesh-sized-hole/</guid>
      <description>&lt;p&gt;This is a very short post as I really don&amp;rsquo;t have much to say about this yet.&lt;/p&gt;&#xA;&lt;p&gt;Just before Christmas I stumbled upon &lt;a href=&#34;https://en.wikipedia.org/wiki/LoRa&#34;&gt;LoRa&lt;/a&gt; which brought me to reading about &lt;a href=&#34;https://meshtastic.org/&#34;&gt;Meshtastic&lt;/a&gt;. I ended up buying a &lt;a href=&#34;https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-E-for-Meshtastic-p-5913.html&#34;&gt;T1000-E&lt;/a&gt; as well as a &lt;a href=&#34;https://www.christech.no/868mhz/2043-lilygo-lora-disaster-radio-868915mhz.html&#34;&gt;Lilygo V2.1_1.6.1&lt;/a&gt;. Turns out the Lilygo was a bad idea as it&amp;rsquo;s pretty old and I&amp;rsquo;ve managed to seemingly buy one of the very few &lt;a href=&#34;https://github.com/meshtastic/firmware/issues/4775&#34;&gt;incompatible device combos&lt;/a&gt; out there.&lt;/p&gt;&#xA;&lt;p&gt;For now the mesh in Oslo is somewhat sparse but a few people have set up nodes to improve coverage. I&amp;rsquo;m considering how helpful it would be to have a node on Ekeberg.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Publishing PGP Keys With WKD</title>
      <link>https://devblog.yvn.no/posts/publishing-pgp-keys-with-wkd/</link>
      <pubDate>Thu, 06 Nov 2025 08:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/publishing-pgp-keys-with-wkd/</guid>
      <description>&lt;h2 id=&#34;why&#34;&gt;Why?&lt;/h2&gt;&#xA;&lt;p&gt;While having a sort of rough reputation amongst security die-hards PGP is still a good way of increasing security around your presence on the web. At least without tieing yourself to a given platform. Signal is perhaps the gold standard for encrypted communications today, but it is still centralized and can therefore more easily be blocked or restricted.&lt;/p&gt;&#xA;&lt;p&gt;So yes, encrypting email with PGP is perhaps not the best you can do for secure communcations, but it is a heck of a lot better than sending plain text. And if you sign the message with an established key as well, the recipient can be pretty confident that the message was written by you and not someone else.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fairphone 6 with e/OS (or state of de-googling part 3 I guess)</title>
      <link>https://devblog.yvn.no/posts/fairphone-6/</link>
      <pubDate>Sun, 02 Nov 2025 16:15:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/fairphone-6/</guid>
      <description>&lt;h2 id=&#34;reasoning&#34;&gt;Reasoning&lt;/h2&gt;&#xA;&lt;p&gt;It was finally time to put my Samsung S20 to rest. I didn&amp;rsquo;t want to as it ran just fine - perhaps with the exeption of the battery. But no more security updates, together with one last meeting with the bathroom tiles one morning was the final nail in the coffin. I briefly ran LineageOS on it but that&amp;rsquo;s a story for another time.&lt;/p&gt;&#xA;&lt;p&gt;I landed on The Fairphone gen 6 or just Fairphone 6 as it should have been called as my replacement. Why? Well in short form these would be my pros:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sending Mail From Servers</title>
      <link>https://devblog.yvn.no/posts/sending-mail-from-servers/</link>
      <pubDate>Wed, 20 Aug 2025 16:15:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/sending-mail-from-servers/</guid>
      <description>&lt;p&gt;Email is old, tried and tested. But one thing I never actually sat down and did properly was to configure email sending (smtp) on my server(s).&lt;/p&gt;&#xA;&lt;p&gt;Turns out it&amp;rsquo;s not too bad albeit with a few quirks. My example uses &lt;a href=&#34;https://migadu.com&#34;&gt;Migadu&lt;/a&gt; and assumes you&amp;rsquo;ve created an email address to send from (in my case `&lt;a href=&#34;mailto:alerts@domain.com&#34;&gt;alerts@domain.com&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;setup&#34;&gt;Setup&lt;/h2&gt;&#xA;&lt;p&gt;Start by installing &lt;code&gt;mailutils&lt;/code&gt; and &lt;code&gt;ssmtp&lt;/code&gt;. On Ubuntu 24.04 that means:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo apt install mailutils ssmtp&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Syncing Kobo and Calibre Web</title>
      <link>https://devblog.yvn.no/posts/syncing-kobo-and-calibre-web/</link>
      <pubDate>Wed, 18 Jun 2025 23:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/syncing-kobo-and-calibre-web/</guid>
      <description>&lt;p&gt;Boy oh boy was this one a pain to get exactly right &amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll try to keep it brief for anyone stumbling upon this, but I might add more details later if I feel like it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;premise&#34;&gt;Premise&lt;/h2&gt;&#xA;&lt;p&gt;My wife has a Kobo that we&amp;rsquo;d (I&amp;rsquo;d?) like to keep synced to Calibre-web so we can have a common family library. Calibre-web supports this but ever since settings this up some months ago it has been – ahem – &lt;em&gt;unstable&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rebooting my reading with a Kindle Jailbreak</title>
      <link>https://devblog.yvn.no/posts/kindle-jailbreak/</link>
      <pubDate>Sun, 08 Jun 2025 14:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/kindle-jailbreak/</guid>
      <description>&lt;p&gt;Many years ago (11 in fact) I bought an Amazon Kindle Paperwhite. It completely changed my approach to reading and within a few years I&amp;rsquo;m pretty sure I&amp;rsquo;d read more books on my Kindle than I had before. The simple, small, light, single-purpose device with fantastic battery life quickly became what I dubbed &amp;ldquo;my most un-regretable tech-purchase&amp;rdquo; – meaning that while all other tech in my life had pros and cons this was just &amp;ldquo;without downsides&amp;rdquo; for mye use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Maps Timeline With Owntracks</title>
      <link>https://devblog.yvn.no/posts/replacing-maps-timeline-with-owntracks/</link>
      <pubDate>Sun, 06 Apr 2025 13:30:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/replacing-maps-timeline-with-owntracks/</guid>
      <description>&lt;figure&gt;&lt;img src=&#34;https://devblog.yvn.no/posts/replacing-maps-timeline-with-owntracks/images/timeline-example.png&#34;&#xA;    alt=&#34;Example view of Google Maps Timeline&#34; width=&#34;600px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#timeline-is-sort-of-shutting-down&#34;&gt;Why move?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#where-to-go&#34;&gt;Where to go?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#setting-it-up&#34;&gt;Setting it all up&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#mqtt&#34;&gt;MQTT&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#owntracks-recorder&#34;&gt;Owntracks Recorder&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#importing-timeline-data&#34;&gt;Importing Timeline Data&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#home-assistant-as-the-location-tracker&#34;&gt;Using Home Assistant as location tracer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;timeline-is-sort-of-shutting-down&#34;&gt;Timeline is (sort of) shutting down&lt;/h2&gt;&#xA;&lt;p&gt;Does this look familiar?&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://devblog.yvn.no/posts/replacing-maps-timeline-with-owntracks/images/maps-warning.png&#34;&#xA;    alt=&#34;Maps nagging about local only timeline&#34; width=&#34;600px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Maps has been nagging me about Timeline going device-only for quite a few months now. That means that it will no longer be accesible in a browser, only on the local device Google Maps app. And while I&amp;rsquo;ve been &lt;a href=&#34;https://devblog.yvn.no/posts/state-of-degoogling/&#34;&gt;phasing out Google services&lt;/a&gt; for a while now it&amp;rsquo;s finally the push I needed to seriously look into alternatives for this particular use case.&lt;/p&gt;</description>
    </item>
    <item>
      <title>State of De-Googling Part 2</title>
      <link>https://devblog.yvn.no/posts/state-of-degoogling-part-2/</link>
      <pubDate>Thu, 20 Mar 2025 22:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/state-of-degoogling-part-2/</guid>
      <description>&lt;p&gt;Continuing on &lt;a href=&#34;https://devblog.yvn.no/posts/state-of-degoogling/&#34;&gt;part 1&lt;/a&gt; I want to run through some more Google services I&amp;rsquo;ve gotten rid of the last couple of years. For more about why you should probably head to part 1. I&amp;rsquo;ll also remind you that this mostly isn&amp;rsquo;t going to be a list of alternative cloud services as a big motivation is taking back control of my own data by selfhosting what I can.&lt;/p&gt;&#xA;&lt;h2 id=&#34;de-google-take-2&#34;&gt;De-Google take 2&lt;/h2&gt;&#xA;&lt;h3 id=&#34;gmail-to-protonmail-to-migadu&#34;&gt;Gmail to Protonmail To Migadu&lt;/h3&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start off with the exception to the selfhosting goal. Email has a notorious reputation in the selfhosting community due to how quickly you can end up on spam listings. While email is inherintly distributed as a technology, in practice a very big percentage of poeple you will be trying to deliver your mail to is going to be with a very select few providers. The big two are Gmail and some flavour of Outlook. That means that if either of these two decide to not deliver email from you properly you&amp;rsquo;re going to have a very bad time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>State of De-Googling</title>
      <link>https://devblog.yvn.no/posts/state-of-degoogling/</link>
      <pubDate>Fri, 07 Mar 2025 11:30:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/state-of-degoogling/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s march 2025 and I thought it was time to do a quick check in on my progress in &amp;ldquo;de-googling&amp;rdquo;. It&amp;rsquo;s funny how a company and service that became so ubiquitous its name replaced &amp;ldquo;searching&amp;rdquo; in everyday speach, now is far enough on the path to &lt;a href=&#34;https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys&#34;&gt;enshitification&lt;/a&gt; that degoogling has become its own verb.&lt;/p&gt;&#xA;&lt;p&gt;Like it or not, Google has created some fantastic products for more than two decades. It has also filled the &lt;a href=&#34;https://killedbygoogle.com/&#34;&gt;graveyard of time&lt;/a&gt; with dozens of more or less memorable products. While always being an advertising-giant first and foremost it has become more and more obvious how &amp;ldquo;paying with your data&amp;rdquo; has fueled this ad-empire. And, in my opinion, over the last few years Google has gradually shifted away from making excellent products towards maximizing profits.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Baikal CalDAV Hosting</title>
      <link>https://devblog.yvn.no/posts/baikal-caldav-hosting/</link>
      <pubDate>Wed, 12 Feb 2025 21:30:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/baikal-caldav-hosting/</guid>
      <description>&lt;p&gt;Oh boy, this one was quite the journey. If you want to skip straight to how to install Baïkal and work around all the quirks missing in the documentation you can &lt;a href=&#34;#how&#34;&gt;click here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why&#34;&gt;Why&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m slowly but steadily moving away from as much Google (or rather big tech in general) services as I can. Where sensible I want to take back control all the way back &amp;ldquo;in house&amp;rdquo;. Quite literally. As a matter of fact everything I mention here, and the very blog you&amp;rsquo;re reading this on is hosted on my home server safely living in my living room media console.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disaster Recovery</title>
      <link>https://devblog.yvn.no/posts/disaster-recovery/</link>
      <pubDate>Thu, 16 Jan 2025 19:30:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/disaster-recovery/</guid>
      <description>&lt;p&gt;I made a &lt;a href=&#34;https://github.com/hernil/disaster-recovery&#34;&gt;plan for disaster recovery&lt;/a&gt; and so can you.&lt;/p&gt;&#xA;&lt;p&gt;I have covered things like account access and loosing everything except the clothes on my back (them too actually), even - I guess - my memory.&lt;/p&gt;&#xA;&lt;p&gt;Hopefully this was a complete waste of time!&lt;/p&gt;&#xA;&lt;p&gt;I should mention that my wife is also a developer so she would be better placed than most to follow the minimal set of instructions to get up and running. For a complete novice more hand-holding would probably be required. At the very least bundling some &lt;code&gt;gpg&lt;/code&gt; binaries and ensuring that the scripts run on Windows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenPGP With Yubikey</title>
      <link>https://devblog.yvn.no/posts/openpgp-with-yubikey/</link>
      <pubDate>Thu, 09 Jan 2025 20:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/openpgp-with-yubikey/</guid>
      <description>&lt;h1 id=&#34;openpgp-with-yubikey&#34;&gt;OpenPGP with Yubikey&lt;/h1&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve recently been wanting to use my Yubikey(s) a bit more actively. Or rather, I&amp;rsquo;ve considered them a potential solution to storing encrypted data publically. Requiring a physical key to unencrypt would balance the fact that the potentially sensitive data could be available online - albeit in an encrypted state.&lt;/p&gt;&#xA;&lt;p&gt;I could of course create a super-long password, write it down, put it it my drawer and call it a day but as I already had two Yubikeys in somewhat active use as my 2fa for my password manager login I figured it was time to explore an unused part of the Yubikeys.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sertifikater Forklart</title>
      <link>https://devblog.yvn.no/posts/sertifikater-forklart/</link>
      <pubDate>Fri, 03 Jan 2025 15:15:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/sertifikater-forklart/</guid>
      <description>&lt;p&gt;This was written for internal documentation at work and I figured it might as well be posted here as well. An english translation might exist at a later point.&lt;/p&gt;&#xA;&lt;h2 id=&#34;generelt-om-sertifikater&#34;&gt;Generelt om sertifikater&lt;/h2&gt;&#xA;&lt;p&gt;Om du jobber med utviklere eller er en selv er sjansen stor for at du før eller siden hører snakk om sertifikater. Denne siden forsøker å forklare hva et Sertifikat er og litt om hvordan de fungerer.&lt;/p&gt;&#xA;&lt;h3 id=&#34;hvem-trenger-å-vite-dette&#34;&gt;Hvem trenger å vite dette?&lt;/h3&gt;&#xA;&lt;p&gt;Sertifikater er først og fremst noe som brukes i infrastruktur, til integrasjoner og blant utviklere. Likevel har disse en tendens til å treffe andre roller på teamet og også sluttbrukere - spesielt når noe går galt. Det kan derfor være litt interessant å vite hva det prates om.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migrating From Protonmail With Docker and Imapsync</title>
      <link>https://devblog.yvn.no/posts/migrating-from-protonmail-with-docker-and-imapsync/</link>
      <pubDate>Fri, 20 Sep 2024 23:30:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/migrating-from-protonmail-with-docker-and-imapsync/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve written about &lt;a href=&#34;https://devblog.yvn.no/posts/from-protonmail-to-migadu&#34;&gt;my rationale&lt;/a&gt; from moving away from Proton Mail. Here is how to do that using Proton Bridge, Docker and Imapsync.&lt;/p&gt;&#xA;&lt;h2 id=&#34;proton-bridge&#34;&gt;Proton bridge&lt;/h2&gt;&#xA;&lt;p&gt;Protonmail does &lt;a href=&#34;https://proton.me/support/imap-smtp-and-pop3-setup&#34;&gt;not expose standard imap interfaces&lt;/a&gt; for their accounts so you need to set up the Proton mail bridge to use common migration tools like Imapsync.&lt;/p&gt;&#xA;&lt;p&gt;As Proton bridge is going to be a temporary installation I just wanted to have it in Docker for easy purging when done. Turns out &lt;a href=&#34;https://github.com/shenxn/protonmail-bridge-docker&#34;&gt;someone has already dockerized it&lt;/a&gt; and a quick look through the project seems to show that it is a pretty bare bones wrapper for building the bridge from source. This should let us access our Proton mail account through standard Imap ports&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Protonmail to Migadu</title>
      <link>https://devblog.yvn.no/posts/from-protonmail-to-migadu/</link>
      <pubDate>Fri, 20 Sep 2024 21:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/from-protonmail-to-migadu/</guid>
      <description>&lt;h2 id=&#34;the-how&#34;&gt;The How&lt;/h2&gt;&#xA;&lt;p&gt;If you just want to know the how of migrating away from Proton Mail using the Proton Bridge &lt;a href=&#34;https://devblog.yvn.no/posts/migrating-from-protonmail-with-docker-and-imapsync&#34;&gt;here is your link&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;story-time&#34;&gt;Story time&lt;/h2&gt;&#xA;&lt;p&gt;A loong time ago I was a part of a student association. We used email extensively for communication using mailing lists and it was &lt;em&gt;awesome&lt;/em&gt;. I think I&amp;rsquo;ll write a short post about proper email etiquete at some point but suffice to say it&amp;rsquo;s almost impossible to do email well in the age of Outlook, and partly Gmail. Nevertheless I as most other tech-inclined people at the time ended up with Gmail as my email client because of a few creature comforts. Server side filtering rules that worked across devices being the main one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 24.04 Docker Watchtower Problems</title>
      <link>https://devblog.yvn.no/posts/ubuntu-2404-docker-watchtower-problems/</link>
      <pubDate>Fri, 09 Aug 2024 15:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/ubuntu-2404-docker-watchtower-problems/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve seen this kind of output from your Watchtower logs recently you might have ended up in the right place.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Error response from daemon: Cannot kill container: af791ab8aad584fa7488eba4cdad91ab7252d9f2cb04041c2a36ce80ae546145: &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Cannot kill container af791ab8aad584fa7488eba4cdad91ab7252d9f2cb04041c2a36ce80ae546145: &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unknown error after kill: runc did not terminate successfully: &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit status 1: unable to signal init: permission denied&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;Watchtower is granted some access to the Docker socket which it uses to send signals that interact with running containers. Spesifically it needs to stop or kill running containers that use outdated images so that it can spin them up again fully updated. Apparmor is used to &lt;code&gt;&amp;quot;confine programs to a limited set of resources.&amp;quot;&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Somehow there are Apparmor restrictions set on a component of Docker or it&amp;rsquo;s accompanying tools (the culprit seems to be confinement of &lt;code&gt;runc&lt;/code&gt; which is the default Docker container runtime) that seem to block the signals Watchtower are trying to send to running containers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ZFS Encrypted Backups</title>
      <link>https://devblog.yvn.no/posts/zfs-encrypted-backup/</link>
      <pubDate>Wed, 26 Jun 2024 22:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/zfs-encrypted-backup/</guid>
      <description>&lt;p&gt;This post assumes you use &lt;code&gt;sanoid&lt;/code&gt; and/or &lt;code&gt;syncoid&lt;/code&gt; in some way.&lt;/p&gt;&#xA;&lt;p&gt;ZFS supports native encrypted datasets which is neat. Although I don&amp;rsquo;t really need or want to use them locally as I don&amp;rsquo;t consider the added risk of failure or complicated recovery process worth it to safeguard from potential family photo leakage in the event of a break in. There is a use case where the encryption comes in very handy though and that is off site backups to another ZFS target. See the brief discussion about it on the &lt;a href=&#34;https://discourse.practicalzfs.com/t/backup-targets-for-zfs/1433/16&#34;&gt;ZFS discourse&lt;/a&gt; that Jim Salter set up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moving From Philips Hue Hub to Home Assistant Zigbee</title>
      <link>https://devblog.yvn.no/posts/moving-from-hue-hub-to-home-assistant-zigbee/</link>
      <pubDate>Mon, 27 May 2024 09:30:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/moving-from-hue-hub-to-home-assistant-zigbee/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;Long story short: I needed some temperature readings in our apartment and wanted the measurements logged in Home Assistant (and thus available to act on with automations later on). Only hard requirements were HA integration and no Internet connection required. That means no cloud, no app no nothing. I ended up going with &lt;a href=&#34;https://www.aqara.com/en/temperature-and-humidity-sensor-t1/&#34;&gt;these from Aqara&lt;/a&gt;. They work over Zigbee, and even though I have some Philips Hue devices and a Hub/Bridge I would have to use a dedicated Zigbee controller to talk to them in Home Assistant.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adjusting Thule Glide 2 Drift</title>
      <link>https://devblog.yvn.no/posts/adjusting-thule-glide-2-drift/</link>
      <pubDate>Sun, 12 May 2024 11:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/adjusting-thule-glide-2-drift/</guid>
      <description>&lt;p&gt;This isn&amp;rsquo;t really &amp;ldquo;dev&amp;rdquo;-y at all but sometimes there&amp;rsquo;s just a missing piece of information on the internet that needs some elaborating.&lt;/p&gt;&#xA;&lt;p&gt;We have a Thule Glide 2 running stroller / buggy that we are super happy with. Highly recommended if you are in the market for a running one. It handles even pretty rough terrain well as and long as you don&amp;rsquo;t mind slowing down for the really rough patches you&amp;rsquo;ll be surprised of where you can take this. Note: This is the &lt;em&gt;Glide 2&lt;/em&gt; - not the Urban Glide!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Stow and Git for Config Files</title>
      <link>https://devblog.yvn.no/posts/using-stow-and-git-for-config-files/</link>
      <pubDate>Tue, 09 Apr 2024 12:00:00 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/using-stow-and-git-for-config-files/</guid>
      <description>&lt;p&gt;Want to skip my ramblings and go straight to the meat of using &lt;code&gt;stow&lt;/code&gt; for configurations? &lt;a href=&#34;#dead-simple-config-file-management&#34;&gt;Click here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A year or so ago my homelab was a rather over-powered Dell R720 I had gotten my hands on from my former employer when they decommisioned a data center. I ran Proxmox on it so services were on a mix of VMs and LXC containers. I downsized the server to a HP Microserver for mostly noise reasons. Turns out stuff built for the data center have other priorities than small-ish urban appartments. Who would have thought?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploy Your Applications With Watchtower</title>
      <link>https://devblog.yvn.no/posts/deploy-your-applications-with-watchtower/</link>
      <pubDate>Thu, 04 Apr 2024 14:02:39 +0200</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/deploy-your-applications-with-watchtower/</guid>
      <description>&lt;p&gt;Automated deploys, continous integration and continous deployments are neat but can often be somewhat complex to set up just right. That overhead might be a bit much - especially in a homelab environment.&lt;/p&gt;&#xA;&lt;p&gt;So why not simplify the process and KISS? Let&amp;rsquo;s explain some background, or &lt;a href=&#34;#the-setup&#34;&gt;jump straight down to the answer&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;h2 id=&#34;watchtower-101&#34;&gt;Watchtower 101&lt;/h2&gt;&#xA;&lt;p&gt;Watchtower describes itself as:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A container-based solution for automating Docker container base image updates.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;and is often already deployed in a homelab environment to help keep services up to date. Either automatically or by monitoring and notifying. A typical docker-compose config might look like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Block Paths With Traefik</title>
      <link>https://devblog.yvn.no/posts/block-paths-with-traefik/</link>
      <pubDate>Mon, 11 Mar 2024 09:20:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/block-paths-with-traefik/</guid>
      <description>&lt;p&gt;Note: This post was updated &lt;code&gt;2024-09-24T13:00:00+02:00&lt;/code&gt; to Traefik v3 syntax.&lt;/p&gt;&#xA;&lt;h1 id=&#34;limit-access-to-certain-paths-with-traefik-routing-rules&#34;&gt;Limit access to certain paths with traefik routing rules&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#the-solution&#34;&gt;Jump straight to the solution&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Traefik is a reverse proxy and load balancer - most often found in front of a container-based application infrastructure. Most often either straight Docker or using Kubernestes. I started using it as I was under the impression that it was a more modern alternative to using Nginx for the same purpose but after some time I&amp;rsquo;ve landed on them each having strength and weeknesses.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Digging Through Internet History</title>
      <link>https://devblog.yvn.no/posts/digging-through-internet-history/</link>
      <pubDate>Fri, 16 Feb 2024 08:30:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/digging-through-internet-history/</guid>
      <description>&lt;p&gt;&lt;em&gt;note: This post was originally written on an internal company Slack. Some tweaks have been made.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;From time to time I wonder about weird things which requires me to dig a bit around to see if I can get to the bottom of something. Today&amp;rsquo;s shower-thought (actually from quite a while back but never bothered to track down an answer): Why is the host part of an URL (or URI) read from most to least specific? Especially when the path part just after is the opposite being read from least to most specific! Intuitively (or at least from a file system way of thinking) the path way of doing it by defining a root and drilling down to a leaf seems more reasonable. Being consistent would result in &lt;code&gt;.no.yvn.devblog/posts/digging-through-internet-history/&lt;/code&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Reading this out makes all the sense as we simply start at the root and drill down to &lt;code&gt;no&lt;/code&gt;, then &lt;code&gt;yvn&lt;/code&gt; and all the way down to whatever client is hosting &lt;code&gt;devblog&lt;/code&gt; (which could be several more steps down) and continue drilling down a specific path on that host. This &amp;ldquo;least to most&amp;rdquo; specific way of writing is also used in a few programming languages to define packages or namespaces, in addition to all file systems (that I know of at least). So why is this not how we navigate the Internet all day every day? Looking at RFC3986 for URIs &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; we see that they&amp;rsquo;re actually not that fuzzed about which way one chooses to look up a host (they even mention the yellow pages!) but they do admit that&lt;/p&gt;</description>
    </item>
    <item>
      <title>RSS Feeds and Miniflux</title>
      <link>https://devblog.yvn.no/posts/rss-feeds-and-miniflux/</link>
      <pubDate>Sun, 04 Feb 2024 10:19:48 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/rss-feeds-and-miniflux/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s 2024 and I&amp;rsquo;ve rediscovered RSS-feeds.&lt;/p&gt;&#xA;&lt;p&gt;I do remember using them actively in what has to have been the late 2000 - early 2010s. Yikes. In that period i jumped a bit between Opera which had a built in reader if I&amp;rsquo;m not mistaken and Firefox using the Sage rss extension which actually has a &lt;a href=&#34;http://sagerss.com/&#34;&gt;site up&lt;/a&gt; and running although it looks like it hasn&amp;rsquo;t been updated since 2017.&lt;/p&gt;&#xA;&lt;p&gt;So what happened? I just - stopped - I guess. Probably my keeping up-to-date with the various information sources I followed got covered by the &amp;ldquo;new&amp;rdquo; platforms. Facebook, Twitter and even Google+.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notes From Non Booting Ubuntu Server</title>
      <link>https://devblog.yvn.no/posts/notes-from-non-booting-ubuntu-server/</link>
      <pubDate>Thu, 01 Feb 2024 08:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/notes-from-non-booting-ubuntu-server/</guid>
      <description>&lt;p&gt;Update 2024-03-21: This was probably due to &lt;a href=&#34;https://bugs.launchpad.net/ubuntu/+source/grub2-unsigned/+bug/2051999&#34;&gt;this bug&lt;/a&gt; being triggered. Effectively rendering the bpool subvolume unusable by grub after snapshotting. The &lt;a href=&#34;https://github.com/zbm-dev/zfsbootmenu/discussions/600&#34;&gt;top response here&lt;/a&gt; might be a good starting point for working around this with ZFSBootMenu which is what I ended up doing as well.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Original post:&lt;/p&gt;&#xA;&lt;p&gt;Yesterday my server did not come back up. After a scheduled downtime due to a power outage in the building the server was supposed to boot back up but never came online. When looking into it it turned out it was stuck on the grub rescue menu claiming it did not find the kernel listed. This was a 6.5 kernel that I did spot being installed some time ago as part of the server being enrolled in the HWE kernel lifecycle.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Samba and the Recycle Bin</title>
      <link>https://devblog.yvn.no/posts/samba-and-the-recycle-bin/</link>
      <pubDate>Fri, 26 Jan 2024 16:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/samba-and-the-recycle-bin/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://devblog.yvn.no/posts/samba-and-windows-shadow-copies/&#34;&gt;ZFS snapshots&lt;/a&gt; might make the good old Recycle Bin a bit superfluous but sometimes knowing &lt;em&gt;what&lt;/em&gt; was deleted is the first step in restoring it. Here is the config needed to enable the Samba recycle module that moves deleted files in seperate folder for you to manage later on.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vfs objects &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; recycle&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;recycle:repository &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; .recycle/%U&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;recycle:directory_mode &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0550&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;recycle:subdir_mode &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0550&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;recycle:keeptree &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;recycle:touch &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;recycle:versions &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;code&gt;%U&lt;/code&gt; syntax means that deleted files are ordered by the user that deleted them&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;keeptree&lt;/code&gt; recreates the file path in the recycle folder so you know where it came from&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;touch&lt;/code&gt; updates the file access time with the deletion timestamp&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;versions&lt;/code&gt; will keep multiple versions if files with the same name (and path) are deleted again&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are also ways to set min and max file sizes that should be included in the bin as well as exclution patterns for file paths. See &lt;a href=&#34;https://www.samba.org/samba/docs/current/man-html/vfs_recycle.8.html&#34;&gt;the docs&lt;/a&gt; for more info.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ZFS Metrics in Prometheus</title>
      <link>https://devblog.yvn.no/posts/zfs-metrics-in-prometheus/</link>
      <pubDate>Wed, 24 Jan 2024 15:35:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/zfs-metrics-in-prometheus/</guid>
      <description>&lt;p&gt;Now that we have set up &lt;a href=&#34;https://devblog.yvn.no/posts/prometheus-alertmanager-and-ntfy/&#34;&gt;Prometheus alerting via ntfy&lt;/a&gt; we want to monitor some actually useful metrics and be alerted when things look out of place. We start off by monitoring perhaps the most important part of a system - the filesystem. Thankfully both ZFS and Prometheus are pretty common out there and we can stand on shoulders to get this set up. See sources at the bottom of the article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prometheus Alertmanager and Ntfy</title>
      <link>https://devblog.yvn.no/posts/prometheus-alertmanager-and-ntfy/</link>
      <pubDate>Tue, 23 Jan 2024 15:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/prometheus-alertmanager-and-ntfy/</guid>
      <description>&lt;p&gt;So this is a very minimal setup of the following services managed with docker-compose. It does not contain any actual monitoring or alerts outside a very basic polling of Traefik metrics. That will come later. Ntfy is hosted outside this setup and simply assumed available on an endpoint.&lt;/p&gt;&#xA;&lt;p&gt;Some of the labels assume a Traefik setup for exposing containers. Adapt to your own needs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setup&#34;&gt;Setup&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Prometheus -&amp;gt; Alertmanager -&amp;gt; ntfy-alertmanager -&amp;gt; Ntfy&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;file-structure&#34;&gt;File structure&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;monitoring&#xA;├── alertmanager&#xA;│   └── alertmanager.yml&#xA;├── ntfy_alertmananger_config&#xA;│   └── config&#xA;├── prometheus&#xA;│   └── prometheus.yml&#xA;└── docker-compose.yml&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-files&#34;&gt;The files&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;alertmanager/alertmanager.yml&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Non Root ZFS Replication with Syncoid</title>
      <link>https://devblog.yvn.no/posts/non-root-zfs-replication/</link>
      <pubDate>Fri, 19 Jan 2024 13:30:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/non-root-zfs-replication/</guid>
      <description>&lt;p&gt;One of the key strenghts of using ZFS as a file server is the extremely effecient replication that can be used for backup purposes. Sanoid and Syncoid are abstractions over the built in &lt;code&gt;zfs snapshot&lt;/code&gt; and &lt;code&gt;zfs send&lt;/code&gt; functionality that makes life a little simpler &lt;em&gt;and&lt;/em&gt; should also help speed up transfers.&lt;/p&gt;&#xA;&lt;p&gt;This guide is pretty bare bones and was written previously as a step by step reminder of how I set up my backup server pull data from my laptop.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Samba and Default Pam Restrictions</title>
      <link>https://devblog.yvn.no/posts/samba-and-default-pam-restrictions/</link>
      <pubDate>Thu, 18 Jan 2024 08:35:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/samba-and-default-pam-restrictions/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;obey pam restrictions &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I don&amp;rsquo;t know exactly why this particular line in a Samba config messes up with file permissions but it sure does. It is set by default in a new Ubuntu (server) install as of 22.04 at least and cost me fair few hours to get to the bottom of.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html&#34;&gt;The Samba docs&lt;/a&gt; are not exactly crystal clear on what this setting implies but it looks like it&amp;rsquo;s supposed to be set to &lt;code&gt;no&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>zfsutils-linux and HWE Kernels</title>
      <link>https://devblog.yvn.no/posts/zfsutils-linux-and-hwe-kernels/</link>
      <pubDate>Wed, 17 Jan 2024 17:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/zfsutils-linux-and-hwe-kernels/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;June 2025 update: Ubuntu 23.10 Mantic Minotaur that this post refers to is out of support. If you somehow need a kernel newer than what is shipped in the latest LTS (24.04 as of writing), and run into these kinds of issues then you need to adapt the instructions to your current HWE-kernel and match that to the corresponding Ubuntu repos (24.10 or 25.04 as of writing). I would however suggest staying with the non-HWE kernel if that is at all an option. Good luck!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Samba Catia Mappings and Norwegian Characters</title>
      <link>https://devblog.yvn.no/posts/samba-catia-mappings-and-norwegian-characters/</link>
      <pubDate>Tue, 16 Jan 2024 22:36:28 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/samba-catia-mappings-and-norwegian-characters/</guid>
      <description>&lt;p&gt;From the Catia docs:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Catia CAD package commonly creates filenames that use characters that are illegal in CIFS filenames. The vfs_catia VFS module implements a character mapping so that these files can be shared with CIFS clients.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Turns out there&amp;rsquo;s a big gotcha for some special characters - in this case for the Norwegian character &amp;ldquo;ø&amp;rdquo; which ends up failing more or less silently when trying to manipulate files with this character over Samba.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exposing Sanoid ZFS snapshots as Windows Shadow Copies over Samba</title>
      <link>https://devblog.yvn.no/posts/samba-and-windows-shadow-copies/</link>
      <pubDate>Tue, 16 Jan 2024 18:00:00 +0100</pubDate><author>devblog@yvn.no</author>
      <guid>https://devblog.yvn.no/posts/samba-and-windows-shadow-copies/</guid>
      <description>&lt;p&gt;ZFS snapshots are super convenient for keeping dataset histories and fascilitating backups. &lt;a href=&#34;https://github.com/jimsalterjrs/sanoid/&#34;&gt;Sanoid and Syncoid&lt;/a&gt; are commonly used abstractions on top of the ZFS native snapshot and send tools for managing taking and pruning snapshot with a policy based config.&lt;/p&gt;&#xA;&lt;p&gt;In addition to being a nice security for a sysadmin we can actually expose some of these conveniences to the users of a Samba file share. Spesifically Windows users - by exposing the snapshot as &amp;ldquo;Windows Shadow Copies&amp;rdquo;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
