<?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>Posts on Schwitzd</title>
    <link>https://www.schwitzd.me/posts/</link>
    <description>Recent content in Posts on Schwitzd</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 23 Aug 2026 12:37:38 +0000</lastBuildDate>
    <atom:link href="https://www.schwitzd.me/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Moved to Libvirt</title>
      <link>https://www.schwitzd.me/posts/moved-to-libvirt/</link>
      <pubDate>Sun, 23 Aug 2026 12:37:38 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/moved-to-libvirt/</guid>
      <description>&lt;p&gt;During the hot &lt;a href=&#34;https://en.wikipedia.org/wiki/Ferragosto&#34;&gt;Ferragosto&lt;/a&gt; weekend, I decided to take a break and try out &lt;a href=&#34;https://libvirt.org/&#34;&gt;Libvirt&lt;/a&gt;. It had been on my to-do list for a long time, but I never had the motivation (or maybe just laziness?) to try it as a replacement for &lt;a href=&#34;https://www.virtualbox.org/&#34;&gt;VirtualBox&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The stack I&amp;rsquo;m going to use will be, &lt;a href=&#34;https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine&#34;&gt;KVM&lt;/a&gt; (Kernel-based Virtual Machine) built directly into the Linux kernel to handle CPU and memory virtualization, while &lt;a href=&#34;https://en.wikipedia.org/wiki/QEMU&#34;&gt;QEMU&lt;/a&gt; emulates the remaining hardware components like storage and graphics. &lt;a href=&#34;https://wiki.archlinux.org/title/Libvirt&#34;&gt;Libvirt&lt;/a&gt; acts as the management layer bridging everything together, allowing me to control my VMs through both a graphical interface (&lt;code&gt;virt-manager&lt;/code&gt;) and the command line (&lt;code&gt;virsh&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Openvino Notes</title>
      <link>https://www.schwitzd.me/posts/my-openvino-notes/</link>
      <pubDate>Sun, 07 Dec 2025 07:52:41 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/my-openvino-notes/</guid>
      <description>&lt;p&gt;These are my notes explaining on how to run models on an Arch Linux machine using the &lt;a href=&#34;https://docs.openvino.ai/2025/model-server/ovms_what_is_openvino_model_server.html&#34;&gt;OpenVINO model server&lt;/a&gt; inside a Docker container. My Medion notebook is equipped with both an Intel &lt;a href=&#34;https://en.wikipedia.org/wiki/Neural_processing_unit&#34;&gt;NPU&lt;/a&gt; and an Intel ARC GPU. I tried running models on both.&lt;/p&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install required driver packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPU&lt;/strong&gt;: intel-compute-runtime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NPU&lt;/strong&gt;: intel-npu-driver&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the user to groups &lt;code&gt;render&lt;/code&gt; and &lt;code&gt;video&lt;/code&gt;:&lt;/p&gt;
&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;-webkit-text-size-adjust:none;&#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 usermod -aG render,video &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$USER&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To check that everything has been installed on the local machine, run the following code snippet inside a Python virtual environment with the &lt;code&gt;openvino&lt;/code&gt; package installed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Argocd: from Opentofu to Applicationset</title>
      <link>https://www.schwitzd.me/posts/argocd-from-opentofu-to-applicationset/</link>
      <pubDate>Sun, 09 Nov 2025 15:46:09 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/argocd-from-opentofu-to-applicationset/</guid>
      <description>&lt;p&gt;Since starting to work on my &lt;a href=&#34;https://github.com/Schwitzd/IaC-HomeK3s&#34;&gt;Home Cluster&lt;/a&gt;, I have already tried three different deployment strategies for managing workloads. To provide context for the new approach, it is helpful to review how the workflow has evolved.&lt;/p&gt;
&lt;p&gt;Initially, I used &lt;a href=&#34;https://opentofu.org/&#34;&gt;OpenTofu&lt;/a&gt;, deploying everything with the &lt;code&gt;helm_release&lt;/code&gt; resource from the &lt;a href=&#34;https://registry.terraform.io/providers/hashicorp/helm/latest&#34;&gt;Helm provider&lt;/a&gt;. This was straightforward and fully controlled from the IaC repository.&lt;/p&gt;
&lt;p&gt;Later, I introduced &lt;a href=&#34;https://argo-cd.readthedocs.io/en/stable/&#34;&gt;Argo CD&lt;/a&gt;, adopting a hybrid strategy. OpenTofu continued to deploy workloads using the &lt;code&gt;helm_release&lt;/code&gt; resource until Argo CD was fully operational; then it created Argo CD applications using the &lt;code&gt;argocd_application&lt;/code&gt; resource. While this approach was effective, it resulted in duplication and unnecessary coupling between OpenTofu and Argo CD.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I Automated Garage Deployment</title>
      <link>https://www.schwitzd.me/posts/how-i-automated-garage-deployment/</link>
      <pubDate>Sun, 26 Oct 2025 08:40:48 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/how-i-automated-garage-deployment/</guid>
      <description>&lt;p&gt;After MinIO&amp;rsquo;s decision to &lt;a href=&#34;https://github.com/minio/object-browser/pull/3509&#34;&gt;remove all the features&lt;/a&gt; from the community edition, I switched to &lt;a href=&#34;https://garagehq.deuxfleurs.fr&#34;&gt;Garage&lt;/a&gt;. After the initial deployment test, I quickly realized that many manual steps were required before it could be used.  For example, you must &lt;a href=&#34;https://garagehq.deuxfleurs.fr/documentation/quick-start/#creating-a-cluster-layout&#34;&gt;create a layout&lt;/a&gt; for storing the buckets and then create the buckets themselves.&lt;/p&gt;
&lt;p&gt;As usual I decided to come up with my overcomplicated solution:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use a Kubernetes job to bootstrap the layout.&lt;/li&gt;
&lt;li&gt;Create an Admin Garage API token with a K3s job.&lt;/li&gt;
&lt;li&gt;Use my &lt;a href=&#34;https://search.opentofu.org/provider/schwitzd/garage/latest&#34;&gt;Terraform Garage provider&lt;/a&gt; to deploy buckets.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The idea behind my home cluster is that everything should be automated as code and deployed with &lt;a href=&#34;https://argoproj.github.io/cd/&#34;&gt;Argo CD&lt;/a&gt;. As I mentioned, I created a bootstrap process to prepare Garage to create buckets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Secure DNS Networkd Resolved</title>
      <link>https://www.schwitzd.me/posts/secure-dns-networkd-resolved/</link>
      <pubDate>Sat, 23 Aug 2025 11:42:42 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/secure-dns-networkd-resolved/</guid>
      <description>&lt;p&gt;This article will be very similar to &lt;a href=&#34;https://www.schwitzd.me/posts/integrate-dnscrypt-proxy-with-a-home-dns-server/&#34;&gt;Integrate Dnscrypt-proxy with a Home DNS Server&lt;/a&gt;, with the main difference that instead of using &lt;a href=&#34;https://github.com/DNSCrypt/dnscrypt-proxy&#34;&gt;Dnscrypt-proxy&lt;/a&gt; to forward DNS queries to your preferred &lt;a href=&#34;https://github.com/curl/curl/wiki/DNS-over-HTTPS&#34;&gt;DoH nameserver&lt;/a&gt;, I will use &lt;a href=&#34;https://www.freedesktop.org/software/systemd/man/latest/systemd-resolved.service.html&#34;&gt;systemd-resolved&lt;/a&gt;.
At the moment, &lt;code&gt;systemd-resolved&lt;/code&gt; only supports &lt;a href=&#34;https://en.wikipedia.org/wiki/DNS_over_TLS&#34;&gt;DoT (DNS over TLS)&lt;/a&gt;. Support for DoH is still under development (&lt;a href=&#34;https://github.com/systemd/systemd/issues/8639&#34;&gt;issue #8639&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&#34;configure-systemd-resolved&#34;&gt;Configure systemd-resolved&lt;/h2&gt;
&lt;p&gt;Make sure it&amp;rsquo;s running and that &lt;code&gt;/etc/resolv.conf&lt;/code&gt; points to it.&lt;/p&gt;
&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;-webkit-text-size-adjust:none;&#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 systemctl enable --now systemd-resolved
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Symlink &lt;code&gt;/etc/resolv.conf&lt;/code&gt; to the stub resolver:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arch Post Install</title>
      <link>https://www.schwitzd.me/posts/arch-post-install/</link>
      <pubDate>Sat, 23 Aug 2025 07:18:14 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/arch-post-install/</guid>
      <description>&lt;p&gt;I decided to buy a new laptop so is become the time perform a new installation of Arch, in the past I already installed it from scratch, trying to fine tune every single settings, was really funny but this time I will opt for a more chilly approach and I will use &lt;a href=&#34;https://archinstall.archlinux.page/&#34;&gt;Archinstall&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Because I would like to use different technologies I will test my installation first in &lt;a href=&#34;https://www.virtualbox.org/&#34;&gt;VirtualBox&lt;/a&gt; leveraging the installation over SSH as I explained on a past article &lt;a href=&#34;posts/install-arch-with-ssh/&#34;&gt;Install Arch with SSH&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mikrotik - Tunnelbroker with Route64</title>
      <link>https://www.schwitzd.me/posts/mikrotik-tunnelbroker-with-route64/</link>
      <pubDate>Mon, 18 Aug 2025 19:29:54 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/mikrotik-tunnelbroker-with-route64/</guid>
      <description>&lt;p&gt;For learning purposes, I started looking into &lt;a href=&#34;https://en.wikipedia.org/wiki/IPv6&#34;&gt;IPv6&lt;/a&gt;. First, I enabled a &lt;a href=&#34;https://en.wikipedia.org/wiki/Unique_local_address&#34;&gt;Unique local address&lt;/a&gt; subnet to leverage &lt;a href=&#34;https://docs.k3s.io/networking/basic-network-options#dual-stack-ipv4--ipv6-networking&#34;&gt;K3s dual-stack&lt;/a&gt; on my &lt;a href=&#34;https://github.com/Schwitzd/IaC-HomeK3s&#34;&gt;Home Cluster&lt;/a&gt;. Then I thought it would be cool to be able to connect to my home from abroad, so I started investigating VPNs. It is at this point that I discovered that my &lt;a href=&#34;https://en.wikipedia.org/wiki/Internet_service_provider&#34;&gt;ISP&lt;/a&gt; currently is only offering IPv4 behind &lt;a href=&#34;https://en.wikipedia.org/wiki/Carrier-grade_NAT&#34;&gt;CGNAT&lt;/a&gt; for mobile devices (My Mikrotik connects to internet over &lt;a href=&#34;https://en.wikipedia.org/wiki/LTE_(telecommunication)&#34;&gt;LTE&lt;/a&gt;.
Surfing the web I learned about &lt;a href=&#34;https://en.wikipedia.org/wiki/Tunnel_broker&#34;&gt;tunnel broker&lt;/a&gt; is a service that provides IPv6 connectivity over an existing IPv4-only internet connection by encapsulating IPv6 traffic inside IPv4 packets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Troubleshooting Longhorn Slow Startup</title>
      <link>https://www.schwitzd.me/posts/troubleshooting-longhorn-slow-startup/</link>
      <pubDate>Sun, 13 Jul 2025 11:29:42 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/troubleshooting-longhorn-slow-startup/</guid>
      <description>&lt;p&gt;In my K3s home cluster, I use Longhorn as the storage engine for my stateful workloads. Since I&amp;rsquo;m just starting out and shutting down the cluster every day (to safe my power bill), I&amp;rsquo;ve noticed that Longhorn takes a long time to be ready, with a messy startup involving a lot of errors and pods going into the &lt;code&gt;CrashLoopBackOff&lt;/code&gt; state.&lt;/p&gt;
&lt;p&gt;Spoiler: It&amp;rsquo;s always DNS :)&lt;/p&gt;
&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;
&lt;p&gt;I decided to take a look, so I began my troubleshooting journey by analyzing one of the affected pods.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From iptables to nftables with Docker</title>
      <link>https://www.schwitzd.me/posts/from-iptables-to-nftables-with-docker/</link>
      <pubDate>Fri, 20 Jun 2025 06:53:41 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/from-iptables-to-nftables-with-docker/</guid>
      <description>&lt;p&gt;This blog post was initially intended to explain how to migrate from &lt;code&gt;iptables&lt;/code&gt; to &lt;code&gt;nftables&lt;/code&gt; — there are plenty of similar posts all over the internet. However, I soon realised that I was also running Docker on my laptop, which still does not &lt;a href=&#34;https://github.com/docker/for-linux/issues/1472&#34;&gt;natively support&lt;/a&gt; &lt;code&gt;nftables&lt;/code&gt; at the time of writing.
I therefore decided to write a dual-aim article: switching to &lt;code&gt;nftables&lt;/code&gt; and allowing Docker containers to access the network.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update - 2025-12-07&lt;/em&gt;: Docker 29 introduced experimental support for nftables, more details in the page &lt;a href=&#34;https://docs.docker.com/engine/network/firewall-nftables/&#34;&gt;Docker with nftables&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Update - 2026-08-23&lt;/em&gt;: Optimized nftables rules for Docker 29&lt;/p&gt;</description>
    </item>
    <item>
      <title>Home K3s Cluster: My Journey Into Self-Hosting &amp; Automation</title>
      <link>https://www.schwitzd.me/posts/home-k3s-cluster-my-journey-into-self-hosting-automation/</link>
      <pubDate>Sun, 01 Jun 2025 11:30:23 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/home-k3s-cluster-my-journey-into-self-hosting-automation/</guid>
      <description>&lt;h2 id=&#34;why-i-did-it&#34;&gt;Why I Did It&lt;/h2&gt;
&lt;p&gt;At first, this was a learning project. I wanted to understand the real nuts and bolts of Kubernetes — not just on paper, but on actual, bare-metal hardware in my home.&lt;/p&gt;
&lt;p&gt;But over time, it became something more. It became my &lt;strong&gt;platform&lt;/strong&gt; — the place where I host the things I care about, where I experiment, where I break things and fix them again.&lt;/p&gt;
&lt;h2 id=&#34;what-i-wanted&#34;&gt;What I Wanted&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;To &lt;strong&gt;learn&lt;/strong&gt; how things really work under the hood&lt;/li&gt;
&lt;li&gt;To &lt;strong&gt;automate everything&lt;/strong&gt; — no clicking, no guesswork&lt;/li&gt;
&lt;li&gt;To &lt;strong&gt;host my own services&lt;/strong&gt; with security and flexibility in mind&lt;/li&gt;
&lt;li&gt;To &lt;strong&gt;power things down&lt;/strong&gt; when I don’t need them, and boot them up instantly when I do&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-i-built&#34;&gt;What I Built&lt;/h2&gt;
&lt;p&gt;The stack is simple but powerful:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let’s Encrypt Certificates with SWAG Docker Swarm</title>
      <link>https://www.schwitzd.me/posts/lets-encrypt-certificates-with-swag-docker-swarm/</link>
      <pubDate>Mon, 07 Oct 2024 19:26:02 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/lets-encrypt-certificates-with-swag-docker-swarm/</guid>
      <description>&lt;p&gt;Having worked out how to handle &lt;a href=&#34;https://www.schwitzd.me/posts/lets-encrypt-certificates-with-traefik/&#34;&gt;TLS traffic on my K3S&lt;/a&gt; setup, it is time to achieve the same goal on Docker. In this guide, I&amp;rsquo;ll show you how to set up a Raspberry Pi running Docker Swarm, SWAG (Secure Web Application Gateway), and Let&amp;rsquo;s Encrypt to secure your containerized applications with free TLS certificates. While I&amp;rsquo;ll use Jellyfin as an example, this approach works for most containerized applications.&lt;/p&gt;
&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A Raspberry Pi with Docker and Docker Swarm.&lt;/li&gt;
&lt;li&gt;A public domain managed, for example, by Cloudflare.&lt;/li&gt;
&lt;li&gt;Containerized applications, such as Jellyfin, running on Docker.&lt;/li&gt;
&lt;li&gt;SWAG to handle reverse proxy and TLS certificates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;folder-structure&#34;&gt;Folder structure&lt;/h3&gt;
&lt;p&gt;All my Docker containers data is stored on &lt;a href=&#34;https://www.schwitzd.me/posts/raspberry-btrfs/&#34;&gt;BTRFS volume&lt;/a&gt; under &lt;code&gt;/opt/my_pool&lt;/code&gt; where I have created a folder for each container and the &lt;code&gt;nas-stack.yml&lt;/code&gt; file with all the Docker instructions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let’s Encrypt certificates with Traefik</title>
      <link>https://www.schwitzd.me/posts/lets-encrypt-certificates-with-traefik/</link>
      <pubDate>Sun, 01 Sep 2024 15:42:50 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/lets-encrypt-certificates-with-traefik/</guid>
      <description>&lt;p&gt;In this article, we&amp;rsquo;ll look at using &lt;a href=&#34;https://traefik.io/&#34;&gt;Traefik&lt;/a&gt; in &lt;a href=&#34;https://k3s.io/&#34;&gt;K3S&lt;/a&gt; alongside &lt;a href=&#34;https://cert-manager.io/&#34;&gt;cert-manager&lt;/a&gt; to act as an &lt;a href=&#34;https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment&#34;&gt;ACME&lt;/a&gt; (Automatic Certificate Management Environment) client for acquiring certificates from &lt;a href=&#34;https://letsencrypt.org/&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In order to obtain certificates, it is necessary to prove domain ownership to a Certificate Authority (CA). One method of verifying ownership is through a &lt;a href=&#34;https://letsencrypt.org/docs/challenge-types/#dns-01-challenge&#34;&gt;DNS-01 challenge&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For this guide, we will use Cloudflare as our DNS provider, but the principles outlined can easily be adapted for use with other DNS providers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mikrotik OpenTofu - Part #1</title>
      <link>https://www.schwitzd.me/posts/mikrotik-opentofu-part-%231/</link>
      <pubDate>Sun, 04 Aug 2024 18:16:26 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/mikrotik-opentofu-part-%231/</guid>
      <description>&lt;p&gt;This is the first part of my MikroTik and &lt;a href=&#34;https://opentofu.org&#34;&gt;OpenTofu&lt;/a&gt; series, where I will explain my old and current setup and answer a lot of questions about why.&lt;/p&gt;
&lt;h2 id=&#34;old-setup&#34;&gt;Old setup&lt;/h2&gt;
&lt;p&gt;Many, many years ago I decided to abandon the traditional two-pair wiring hDSL (most widespread, at least in Switzerland) because I was bored of paying the electrician at each house change due to the required changes on the building telephone panel.
To cut a long story short, I chose the LTE modem for its versatility, I have no need for high performance and therefore did not choose fibre optics.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrate Dnscrypt-proxy with a Home DNS Server</title>
      <link>https://www.schwitzd.me/posts/integrate-dnscrypt-proxy-with-a-home-dns-server/</link>
      <pubDate>Wed, 31 Jul 2024 04:47:14 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/integrate-dnscrypt-proxy-with-a-home-dns-server/</guid>
      <description>&lt;p&gt;I recently bought a MikroTik router and I&amp;rsquo;m spending a lot of time configuring it and trying to understand/learn as much as I can (some posts coming in the near future). With the new router I would like to go a step further and set up some static DNS entries within my home for my devices and for my lab.&lt;/p&gt;
&lt;p&gt;In this post we will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prevent dhcpd and NetworkManager to overwrite &lt;code&gt;/etc/resolv.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Configure &lt;a href=&#34;https://github.com/DNSCrypt/dnscrypt-proxy&#34;&gt;Dnscrypt-proxy&lt;/a&gt; to use &lt;a href=&#34;https://quad9.net/&#34;&gt;Quad9&lt;/a&gt; with &lt;a href=&#34;https://en.m.wikipedia.org/wiki/DNS_over_HTTPS&#34;&gt;DoH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&#34;https://github.com/DNSCrypt/dnscrypt-proxy&#34;&gt;Dnscrypt-proxy&lt;/a&gt; &lt;a href=&#34;https://github.com/dnscrypt/dnscrypt-proxy/wiki/Forwarding&#34;&gt;forwarding&lt;/a&gt; feature to resolve hostnames of home devices&lt;/li&gt;
&lt;li&gt;Manually configure &lt;code&gt;/etc/resolv.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-dhcpd&#34;&gt;Configure dhcpd&lt;/h2&gt;
&lt;p&gt;By default, dhcpd obtains nameservers from the DHCP server and configures them in &lt;code&gt;/etc/resolv.conf&lt;/code&gt;. If you are a frequent traveller, this means that you will use whatever name servers are configured on the networks you connect to, with some potential security threads (MiTM, DNS Spoofing/Hijacking and privacy risks). To avoid this, we will configure dhcpd to ignore the DNS servers received from the dhcp server and always use Dnscrypt-proxy listening on &lt;code&gt;localhost:53&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embracing Man Pages</title>
      <link>https://www.schwitzd.me/posts/embracing-man-pages/</link>
      <pubDate>Thu, 11 Jul 2024 19:49:49 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/embracing-man-pages/</guid>
      <description>&lt;p&gt;Nowadays, the browser is always open on my computer and I spend most of my time there. If there is a problem or I need to look up the parameters of a command, the first thing I do is look it up on the web. Now I want to go back to using man pages and rediscover the romance and essence that they convey.&lt;/p&gt;
&lt;h2 id=&#34;why-man-pages&#34;&gt;Why Man Pages?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Always there when you need them&lt;/strong&gt;: Unlike the internet, which requires connectivity, man pages are always right there on your system. Whether you&amp;rsquo;re on a plane, in a remote area, or just want to avoid the distractions of the web, man pages are a reliable companion.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Raspberry Btrfs</title>
      <link>https://www.schwitzd.me/posts/raspberry-btrfs/</link>
      <pubDate>Wed, 10 Jul 2024 15:52:10 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/raspberry-btrfs/</guid>
      <description>&lt;p&gt;I would like to build a simple NAS using my Raspberry Pi 5, equipped with the &lt;a href=&#34;https://wiki.geekworm.com/X1011&#34;&gt;Geekworm X1011&lt;/a&gt; and an M.2 NVMe drives. This project will also provide me with the opportunity to use &lt;a href=&#34;https://en.wikipedia.org/wiki/Btrfs&#34;&gt;BTRFS&lt;/a&gt; for the first time.&lt;/p&gt;
&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To install BTRFS excecute the following commnad:&lt;/p&gt;
&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;-webkit-text-size-adjust:none;&#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 apt install btrfs-progs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Uses &lt;code&gt;lsblk&lt;/code&gt; to get the current partitions status&lt;/p&gt;
&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;-webkit-text-size-adjust:none;&#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;$ lsblk 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mmcblk0     179:0    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;  14.9G  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; disk 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├─mmcblk0p1 179:1    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;   512M  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; part /boot/firmware
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└─mmcblk0p2 179:2    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;  14.4G  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; part /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nvme0n1     259:0    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; 476.9G  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; disk 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└─nvme0n1p1 259:1    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; 476.9G  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; part 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nvme1n1     259:2    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; 238.5G  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; disk 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nvme2n1     259:7    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; 238.5G  &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; disk 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If necessary, use one of the many tools, such as &lt;code&gt;wipefs&lt;/code&gt;, &lt;code&gt;fdisk&lt;/code&gt;, &lt;code&gt;cfdisk&lt;/code&gt;, or &lt;code&gt;parted&lt;/code&gt;, to remove the old partitions, for example:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debian Preseed late_command</title>
      <link>https://www.schwitzd.me/posts/debian-preseed-late_command/</link>
      <pubDate>Mon, 01 Jul 2024 16:05:02 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/debian-preseed-late_command/</guid>
      <description>&lt;p&gt;In Debian installation process, the &lt;code&gt;preseed.cfg&lt;/code&gt; file allows for automated installations by pre-configuring various installation parameters. In this article I will focus on the &lt;code&gt;d-i preseed/late_command string&lt;/code&gt; parameter, which is used to run custom commands at the end of the installation process.&lt;/p&gt;
&lt;p&gt;Here is an example that I recently used in my &lt;a href=&#34;https://github.com/Schwitzd/packer-vbox-debian-latest&#34;&gt;packer-vbox-debian-latest&lt;/a&gt; project:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;d-i preseed/late_command string \
mkdir --mode=700 /target/home/testuser/.ssh; \
wget -q http://10.0.2.2:8081/key.pub -O /target/home/testuser/.ssh/authorized_keys; \
in-target chown testuser:testuser /home/testuser/.ssh; \
in-target chown testuser:testuser /home/testuser/.ssh/authorized_keys; \
in-target chmod 0600 /home/testuser/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As you can see, sometimes &lt;code&gt;/target&lt;/code&gt; is used, other times &lt;code&gt;in-target&lt;/code&gt;, I must admit I struggled a bit to understand the difference and when to use one instead of the other.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install Arch with SSH</title>
      <link>https://www.schwitzd.me/posts/install-arch-with-ssh/</link>
      <pubDate>Sat, 22 Jun 2024 07:33:40 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/install-arch-with-ssh/</guid>
      <description>&lt;p&gt;My current Arch Linux installation has many years and I&amp;rsquo;d like to reinstall it using other technologies like LVM and BTRFS, but before reinstalling my laptop, I&amp;rsquo;m testing the installation process inside a VirtualBox VM. This morning I got bored of typing all the commands and in my head popped up &lt;a href=&#34;https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/powershell-direct&#34;&gt;Powershell Direct with Hyper-V&lt;/a&gt;. Basically you can attach a Powershell session directly to the Hyper-V VM.&lt;/p&gt;
&lt;p&gt;I found a similar approach by configuring port forwarding in VirtualBox and connecting via SSH.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NVM on Enterprise</title>
      <link>https://www.schwitzd.me/posts/nvm-on-enterprise/</link>
      <pubDate>Tue, 11 Jun 2024 19:44:00 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/nvm-on-enterprise/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/coreybutler/nvm-windows&#34;&gt;Node Version Manager for Windows&lt;/a&gt; is the de facto tool for managing multiple versions of &lt;a href=&#34;https://nodejs.org/en&#34;&gt;Node.js&lt;/a&gt;, and is widely used by developers. In organisations where high security standards are in place, it can be a challenge to allow developers to use NVM.&lt;/p&gt;
&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;
&lt;p&gt;The aim of this short guide is to enable your developers to use NVM for Windows without the need for administrator rights, applying the concept of least privilege.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Raspberry Pi Notes</title>
      <link>https://www.schwitzd.me/posts/raspberry-pi-notes/</link>
      <pubDate>Fri, 31 May 2024 10:27:03 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/raspberry-pi-notes/</guid>
      <description>&lt;p&gt;These evolving personal notes document my journey and discoveries as I explore the versatile Raspberry Pi. At present, all information pertains specifically to the &lt;strong&gt;Raspberry Pi 5&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;power&#34;&gt;Power&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Minimum required&lt;/strong&gt;: 5V / 3A (can&amp;rsquo;t connect any bus-powered HDDs/SSDs)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best performance&lt;/strong&gt;: 5v / 5A&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Remainder: x Volt * y Amp = z Watt&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Pogo_Pin_Connectors.jpg/1920px-Pogo_Pin_Connectors.jpg&#34;&gt;Pogo Pin&lt;/a&gt;: A pogo pin is a spring-loaded connector used to create reliable electrical connections in electronics without the need for soldering, commonly for programming and connecting peripherals.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Not in My Picture</title>
      <link>https://www.schwitzd.me/posts/not-in-my-picture/</link>
      <pubDate>Fri, 10 May 2024 11:39:18 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/not-in-my-picture/</guid>
      <description>&lt;p&gt;Surely you have been in a situation where you wanted to wait before taking a photo because there were other people in the lens. Or think about how beautiful the photo of that square would have been without the people.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it&amp;hellip; I do this almost every time I take a photo (apart from the time I was in the middle of nowhere in Iceland).
So I said to myself: either I get up at 5am and take the photo, hoping that nobody else has had my bright idea, or we try to remove the objects with AI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I Set Up This Site</title>
      <link>https://www.schwitzd.me/posts/how-i-set-up-this-site/</link>
      <pubDate>Sat, 04 May 2024 09:23:32 +0000</pubDate>
      <guid>https://www.schwitzd.me/posts/how-i-set-up-this-site/</guid>
      <description>&lt;p&gt;While creating this blog, I thought why not write my first post documenting the steps I took to make it all happen? Maybe this could help other people who have decided to take the same journey as me, so let&amp;rsquo;s get started!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update - 2026-08-23&lt;/em&gt;: Removed Gist shortcut&lt;/p&gt;
&lt;h2 id=&#34;past-experiences&#34;&gt;Past experiences&lt;/h2&gt;
&lt;p&gt;Actually this is my second blog, for several years I maintained a website called TuxLinux where I wrote about my first experiences in the Linux world, all using &lt;a href=&#34;https://wordpress.com/&#34;&gt;WordPress&lt;/a&gt;. But this time I was more determined to try something new (at least for me), so I started searching the internet for something like this:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
