<?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 iTrooz&#39;s website</title>
    <link>https://itrooz.fr/posts/</link>
    <description>Recent content in Posts on iTrooz&#39;s website</description>
    <generator>Hugo -- 0.159.1</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://itrooz.fr/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Avoid granting s3:DeleteObjectVersion by mistake in MinIO</title>
      <link>https://itrooz.fr/posts/delete_objects_permission_minio/</link>
      <pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/delete_objects_permission_minio/</guid>
      <description>&lt;p&gt;This article is an answer to my bug report here: &lt;a href=&#34;https://github.com/minio/minio/issues/21735&#34;&gt;https://github.com/minio/minio/issues/21735&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;context&#34;&gt;Context&lt;/h1&gt;
&lt;p&gt;S3 buckets can be configured to keep old versions of objects when overwriting/deleting them. This is called a &lt;a href=&#34;https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html&#34;&gt;versioned bucket&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Calling &lt;code&gt;DeleteObject&lt;/code&gt; on an object in a versioned bucket will not really delete it, but mark it as so with a &lt;em&gt;delete marker&lt;/em&gt;. The object will appear deleted, but can still be viewed/deleted by specifying its &lt;code&gt;versionId&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This behaviour is really useful, for example for backups, where you want a client to upload its backups, but not be able to delete them all instantly. In this case, you would allow the client to do &lt;code&gt;DeleteObject&lt;/code&gt; calls, but not &lt;code&gt;DeleteObjectVersion&lt;/code&gt;, and clean up old versions periodically.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using nftables as your firewall</title>
      <link>https://itrooz.fr/posts/using_nftables_as_firewall/</link>
      <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/using_nftables_as_firewall/</guid>
      <description>&lt;p&gt;I love nftables. I&amp;rsquo;ve personally found it to be both more simple and featureful compared to other mainstream firewall services.&lt;/p&gt;
&lt;p&gt;It can be configured from a file with a simple yet powerful syntax, allowing you to create simple port-blocking rules, but also precisely classify and act on traffic.&lt;/p&gt;
&lt;p&gt;Plus, it can be used side by side with other firewall-like services running on your Linux machine, allowing it to be deployed nearly everywhere without disturbing existing applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My tweaks to Arch Linux package management</title>
      <link>https://itrooz.fr/posts/my_tweaks_to_arch_package_management/</link>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/my_tweaks_to_arch_package_management/</guid>
      <description>&lt;p&gt;The Arch Linux package management is &lt;em&gt;great&lt;/em&gt;. But there are some things I had to change to fit my workflow. There are listed here.&lt;/p&gt;
&lt;h1 id=&#34;force-yourself-to-read-arch-news-before-upgrading&#34;&gt;Force yourself to read Arch news before upgrading&lt;/h1&gt;
&lt;p&gt;Arch Linux will sometimes upload package updates that will break your systems. On the top of my head, I can think of &lt;a href=&#34;https://archlinux.org/news/grub-bootloader-upgrade-and-configuration-incompatibilities/&#34;&gt;a grub update breaking my system in 2022&lt;/a&gt;, or &lt;a href=&#34;https://archlinux.org/news/linux-firmware-2025061312fe085f-5-upgrade-requires-manual-intervention/&#34;&gt;linux-firmware in 2025&lt;/a&gt;.&lt;br&gt;
While these breakages are rare, they can happen, and they can leave your computer unusable after an update. Arch Linux expects you to read the &lt;a href=&#34;https://archlinux.org/news/&#34;&gt;Arch News&lt;/a&gt; and be aware of them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to make RKE2 share port 80/443 with another application</title>
      <link>https://itrooz.fr/posts/rke2_share_port_80/</link>
      <pubDate>Wed, 12 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/rke2_share_port_80/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;TLDR; destination-IP NAT that redirects to RKE2&amp;rsquo;s ingress input chain&lt;/p&gt;
&lt;p&gt;I recently had to make my RKE2 cluster cohabitate with an in-house service running on the same machines, and also exposing a website through port 80.&lt;/p&gt;
&lt;p&gt;The obvious problem here is: RKE2 clusters (most of the time) also need to listen on port 80 in order to make our RKE2-hosted websites work. So, how do we share port 80 between RKE2, and another application ?&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to create encrypted Kubernetes backups with Velero</title>
      <link>https://itrooz.fr/posts/velero_encrypted_backups/</link>
      <pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/velero_encrypted_backups/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Velero allows you to create backups of your k8s cluster. It handles both the resources (the yaml files), and the volumes. But it has a drawback (as of writing): the lack of encryption. In this post, we&amp;rsquo;re going to see how we can produce encrypted backups, by chaining velero with rclone.&lt;/p&gt;
&lt;p&gt;The key point of this post is: rclone is awesome and a Ops&amp;rsquo;s dream tool. In our case, the 2 features of rclone that we will use are its &lt;a href=&#34;https://rclone.org/crypt/&#34;&gt;crypt&lt;/a&gt; remote, and its &lt;a href=&#34;https://rclone.org/commands/rclone_serve_s3/&#34;&gt;serve (s3)&lt;/a&gt; feature.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to backup your bitwarden vault with restic ?</title>
      <link>https://itrooz.fr/posts/bitwarden_restic_backup/</link>
      <pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/bitwarden_restic_backup/</guid>
      <description>&lt;p&gt;My goal is to make a daily backup of my bitwarden vault, using restic. I also want to not store my master password on disk, which means backuping the encrypted vault.&lt;/p&gt;
&lt;p&gt;The solution to do that is to use a &lt;a href=&#34;https://bitwarden.com/help/personal-api-key/&#34;&gt;Bitwarden API key&lt;/a&gt;. API keys do not seem to have the capability to decrypt the vault, as you need to &lt;a href=&#34;https://bitwarden.com/help/cli/#unlock&#34;&gt;enter your master password yourself&lt;/a&gt; to unlock the vault before viewing items, which make them the perfect tool for the job.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating renewal of a wildcard TLS certificate for a specific subdomain on a OHV domain</title>
      <link>https://itrooz.fr/posts/ovh_dns_zone_tls/</link>
      <pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/ovh_dns_zone_tls/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Recently, I wanted to create a bunch of domains on my friend&amp;rsquo;s server, and have TLS certificates delivered.&lt;br&gt;
The option I find easiest to manage certificates is to ask my CA (Lets Encrypt) for a single, wildcard TLS certificate (e.g. &lt;code&gt;*.itrooz.fr&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;If you are using OVH to manage your domain, you can do that automatically by creating an API key for your account, and using the certbot OVH plugin to create/renew the certificate.&lt;br&gt;
Usually, tutorials will tell you to give &lt;a href=&#34;https://supersonique-studio.com/2020/06/creation-de-certificats-lets-encrypt-a-travers-les-dns-ovh-dns-01-challenge/&#34;&gt;these permissiont to the API key&lt;/a&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why do I use &#39;GPL-2.0-only OR GPL-3.0-or-later with proxy being me&#39; as licence for my Open Source projects ?</title>
      <link>https://itrooz.fr/posts/gpl_licence/</link>
      <pubDate>Sun, 27 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/gpl_licence/</guid>
      <description>&lt;p&gt;If you stumble on one of my projects, you may have seen this licence:&lt;br&gt;
Licence: GPL-2.0-only OR GPL-3.0-or-later with proxy being me&lt;/p&gt;
&lt;p&gt;What does that mean ? Why did I choose such a long, and weird licence ?&lt;/p&gt;
&lt;p&gt;The reason is that I want:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;to be covered by a strong copyleft licence&lt;/li&gt;
&lt;li&gt;while being compatible with past/future GPL licences (and not block my project from being used with one that uses a different version of the GPL.)&lt;/li&gt;
&lt;li&gt;and not give power to the FSF to issue a new licence in the future that I would not agree with.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The solution to this last point is the proxy clause. Quoting GPL 3.0:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Connect a docker container to a WireGuard VPN (while keeping it accessible to other containers)</title>
      <link>https://itrooz.fr/posts/connect_container_to_wireguard/</link>
      <pubDate>Sun, 01 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/connect_container_to_wireguard/</guid>
      <description>&lt;p&gt;A friend of mine wanted to make one of their docker containers go through Wireguard to connect to Internet. I came up with a solution using a docker container to manage the wireguard VPN itself. This allows us to fully isolate the VPN, and use &lt;code&gt;AllowedIPs=0.0.0.0/0&lt;/code&gt; without affecting the rest of the system.&lt;/p&gt;
&lt;p&gt;This solution is both simple technically (we just share the same network namespaces) and in usage (just add another container, without even changing the original).&lt;/p&gt;</description>
    </item>
    <item>
      <title>A list of Celeste/Everest bugs I&#39;ve encountered, and how to fix them</title>
      <link>https://itrooz.fr/posts/celeste_bugs/</link>
      <pubDate>Sun, 20 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://itrooz.fr/posts/celeste_bugs/</guid>
      <description>&lt;p&gt;This is a list of bugs I&amp;rsquo;ve encountered while playing Celeste/Everest with the Olympus launcher, and how to fix them.&lt;/p&gt;
&lt;h2 id=&#34;1&#34;&gt;1&lt;/h2&gt;
&lt;p&gt;Bugged light, I can see squares with &amp;ldquo;more light&amp;rdquo;, that makes gameplay hard to see&lt;br&gt;
Solution: replace OpenGL renderer with Vulkan. There are several ways to do this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if using Everest, you need to find everest-launch.txt (in your Celeste install folder) and change &lt;code&gt;#--graphics OpenGL&lt;/code&gt; to &lt;code&gt;--graphics Vulkan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;if using vanilla Celeste, you need to add &lt;code&gt;/gldevice:Vulkan&lt;/code&gt; to CLI arguments (you can do that with launch options in Steam)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Link: &lt;a href=&#34;https://www.reddit.com/r/celestegame/comments/1bnan6m/comment/m6nly5c/?context=3&#34;&gt;https://www.reddit.com/r/celestegame/comments/1bnan6m/comment/m6nly5c/?context=3&lt;/a&gt;&lt;br&gt;
Link 2: &lt;a href=&#34;https://www.reddit.com/r/linux_gaming/comments/1hmrtu0/comment/m4jzvgj/&#34;&gt;https://www.reddit.com/r/linux_gaming/comments/1hmrtu0/comment/m4jzvgj/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
