<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Debian on Blog</title>
    <link>https://stephan.lachnit.xyz/tags/debian/</link>
    <description>Recent content in Debian on Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 10 Dec 2024 15:53:11 +0100</lastBuildDate><atom:link href="https://stephan.lachnit.xyz/tags/debian/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Creating a bootable USB stick that can still be used as normal storage</title>
      <link>https://stephan.lachnit.xyz/posts/2024-12-10-bootable-usb-with-normal-storage/</link>
      <pubDate>Tue, 10 Dec 2024 15:53:11 +0100</pubDate>
      
      <guid>https://stephan.lachnit.xyz/posts/2024-12-10-bootable-usb-with-normal-storage/</guid>
      
        <description>&lt;p&gt;As someone who daily drives rolling release operating systems, having a bootable USB stick with a live install of Debian is essential. It has saved reverting broken packages and making my device bootable again at least a couple of times. However, creating a bootable USB stick usually uses the entire storage of the USB stick, which seems unnecessary given that USB sticks easily have 64GiB or more these days while live ISOs still don&amp;rsquo;t use more than 8GiB.&lt;/p&gt;
&lt;p&gt;In this how-to, I will explain how to create a bootable USB stick, that also holds a FAT32 partition, which allows the USB stick used as usual.&lt;/p&gt;
&lt;h1 id=&#34;creating-the-partition-partble&#34;&gt;Creating the partition partble&lt;/h1&gt;
&lt;p&gt;The first step is to create the partition table on the new drive. There are several tools to do this, I recommend the &lt;a href=&#34;https://wiki.archlinux.org/title/Partitioning&#34;&gt;ArchWiki page&lt;/a&gt; on this topic for details. For best compatibility, MBR should be used instead of the more modern GPT.
For simplicity I just went with the GParted since it has an easy GUI, but feel free to use any other tool.
The layout should look like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Type  │ Partition │ Suggested size
──────┼───────────┼───────────────
EFI   │ /dev/sda1 │           8GiB
FAT32 │ /dev/sda2 │      remainder
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The disk names are just an example and have to be adjusted for your system.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t set disk labels, they don&amp;rsquo;t appear on the new install anyway and some UEFIs might not like it on your boot partition.&lt;/li&gt;
&lt;li&gt;If you used GParted, create the EFI partition as FAT32 and set the &lt;code&gt;esp&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;mounting-the-iso-and-usb-stick&#34;&gt;Mounting the ISO and USB stick&lt;/h1&gt;
&lt;p&gt;The next step is to download your ISO and mount it. I personally use a &lt;a href=&#34;https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/&#34;&gt;Debian Live ISO&lt;/a&gt; for this.
To mount the ISO, use the &lt;code&gt;loop&lt;/code&gt; mounting option:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir -p /tmp/mnt/iso
sudo mount -o loop /path/to/image.iso /tmp/mnt/iso
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Similarily, mount your USB stick:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir -p /tmp/mnt/usb
sudo mount /dev/sda1 /tmp/mnt/usb
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;copy-the-iso-contents&#34;&gt;Copy the ISO contents&lt;/h1&gt;
&lt;p&gt;To copy the contents from the ISO to the USB stick, use this command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo cp -r -L /tmp/mnt/iso/. /tmp/mnt/usb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;-L&lt;/code&gt; option is required to deference the symbolic links present in the ISO, since FAT32 does not support symbolic links.
Note that you might get warning about cyclic symbolic links. Nothing can be done to fix those, except hoping that they won&amp;rsquo;t cause a problem. For me this never was a problem though.&lt;/p&gt;
&lt;h1 id=&#34;finishing-touches&#34;&gt;Finishing touches&lt;/h1&gt;
&lt;p&gt;Umnount the ISO and USB stick:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo umount /tmp/mnt/usb
sudo umount /tmp/mnt/iso
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now the USB stick should be bootable and have a usable data partition that can be used on essentially every operating system.
I recommend testing that the stick is bootable to make sure it actually works in case of an emergency.&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>Setting up fast Debian package builds using sbuild, mmdebstrap and apt-cacher-ng</title>
      <link>https://stephan.lachnit.xyz/posts/2023-02-08-debian-sbuild-mmdebstrap-apt-cacher-ng/</link>
      <pubDate>Wed, 08 Feb 2023 19:49:11 +0100</pubDate>
      
      <guid>https://stephan.lachnit.xyz/posts/2023-02-08-debian-sbuild-mmdebstrap-apt-cacher-ng/</guid>
      
        <description>&lt;p&gt;In this post I will give a quick tutorial on how to set up fast Debian package builds using &lt;code&gt;sbuild&lt;/code&gt; with &lt;code&gt;mmdebstrap&lt;/code&gt; and &lt;code&gt;apt-cacher-ng&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The usual tool for building Debian packages is &lt;code&gt;dpkg-buildpackage&lt;/code&gt;, or a user-friendly wrapper like &lt;code&gt;debuild&lt;/code&gt;, and while these are geat tools, if you want to upload something to the Debian archive they lack the required separation from the system they are run on to ensure that your packaging also works on a different system. The usual candidate here is &lt;code&gt;sbuild&lt;/code&gt;. But setting up a &lt;code&gt;schroot&lt;/code&gt; is tedious and performance tuning can be annoying. There is an alternative backend for &lt;code&gt;sbuild&lt;/code&gt; that promises to make everything simpler: &lt;code&gt;unshare&lt;/code&gt;. In this tutorial I will show you how to set up &lt;code&gt;sbuild&lt;/code&gt; with this backend.&lt;/p&gt;
&lt;p&gt;Additionally to the normal performance tweaking, caching downloaded packages can be a huge performance increase when rebuilding packages. I do rebuilds quite often, mostly when a new dependency got introduced I didn&amp;rsquo;t specify in &lt;code&gt;debian/control&lt;/code&gt; yet or &lt;code&gt;lintian&lt;/code&gt; notices a something I can easily fix. So let&amp;rsquo;s begin with setting up this caching.&lt;/p&gt;
&lt;h1 id=&#34;setting-up-apt-cacher-ng&#34;&gt;Setting up apt-cacher-ng&lt;/h1&gt;
&lt;p&gt;Install &lt;code&gt;apt-cacher-ng&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install apt-cacher-ng
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A pop-up will appear, if you are unsure how to answer it select no, we don&amp;rsquo;t need it for this use-case.&lt;/p&gt;
&lt;p&gt;To enable &lt;code&gt;apt-cacher-ng&lt;/code&gt; on your system, create &lt;code&gt;/etc/apt/apt.conf.d/02proxy&lt;/code&gt; and insert:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Acquire::http::proxy &amp;#34;http://127.0.0.1:3142&amp;#34;;
Acquire::https::proxy &amp;#34;DIRECT&amp;#34;;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In &lt;code&gt;/etc/apt-cacher-ng/acng.conf&lt;/code&gt; you can increase the value of &lt;code&gt;ExThreshold&lt;/code&gt; to hold packages for a shorter or longer duration.
The length depends on your specific use case and resources. A longer threshold takes more disk space, a short threshold like one day effecitvely only reduces the build time for rebuilds.&lt;/p&gt;
&lt;p&gt;If you encounter weird issues on &lt;code&gt;apt update&lt;/code&gt; at some point the future, you can try to clean the cache from &lt;code&gt;apt-cacher-ng&lt;/code&gt;.
You can use this script:
&lt;script src=&#34;https://gist.github.com/stephanlachnit/55e5b549e222c925a8899c8b0e1a5242.js&#34;&gt;&lt;/script&gt;&lt;/p&gt;
&lt;h1 id=&#34;setting-up-mmdebstrap&#34;&gt;Setting up mmdebstrap&lt;/h1&gt;
&lt;p&gt;Install &lt;code&gt;mmdebstrap&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install mmdebstrap
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We will create a small helper script to ease creating a chroot. Open &lt;code&gt;~/.local/bin/mmupdate&lt;/code&gt; and insert:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh
mmdebstrap \
  --variant=buildd \
  --aptopt=&amp;#39;Acquire::http::proxy &amp;#34;http://127.0.0.1:3142&amp;#34;;&amp;#39; \
  --arch=amd64 \
  --components=main,contrib,non-free \
  unstable \
  ~/.cache/sbuild/unstable-amd64.tar.xz \
  http://deb.debian.org/debian
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptopt&lt;/code&gt; enables &lt;code&gt;apt-cacher-ng&lt;/code&gt; inside the chroot.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--arch&lt;/code&gt; sets the CPU architecture (see &lt;a href=&#34;https://wiki.debian.org/SupportedArchitectures&#34;&gt;Debian Wiki&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--components&lt;/code&gt; sets the archive components, if you don&amp;rsquo;t want non-free pacakges you might want to remove some entries here.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unstable&lt;/code&gt; sets the Debian release, you can also set for example &lt;code&gt;bookworm-backports&lt;/code&gt; here.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unstable-amd64.tar.xz&lt;/code&gt; is the output tarball containing the chroot, change accordingly to your pick of the CPU architecture and Debian release.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://deb.debian.org/debian&lt;/code&gt; is the Debian mirror, you should set this to the same one you use in your &lt;code&gt;/etc.apt/sources.list&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Make &lt;code&gt;mmupdate&lt;/code&gt; executable and run it once:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chmod +x ~/.local/bin/mmupdate
mkdir -p ~/.cache/sbuild
~/.local/bin/mmupdate
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you execute &lt;code&gt;mmupdate&lt;/code&gt; again you can see that the downloading stage is much faster thanks to &lt;code&gt;apt-cacher-ng&lt;/code&gt;. For me the difference is from about 115s to about 95s. Your results may vary, this depends on the speed of your internet, Debian mirror and disk.&lt;/p&gt;
&lt;p&gt;If you have used the &lt;code&gt;schroot&lt;/code&gt; backend and &lt;code&gt;sbuild-update&lt;/code&gt; before, you probably notice that creating a new chroot with &lt;code&gt;mmdebstrap&lt;/code&gt; is slower. It would be a bit annoying to do this manually before we start a new Debian packaging session, so let&amp;rsquo;s create a systemd service that does this for us.&lt;/p&gt;
&lt;p&gt;First create a folder for user services:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir -p ~/.config/systemd/user
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create &lt;code&gt;~/.config/systemd/user/mmupdate.service&lt;/code&gt; and add:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Unit]
Description=Run mmupdate
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=%h/.local/bin/mmupdate
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Start the service and test that it works:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;systemctl --user daemon-reload
systemctl --user start mmupdate
systemctl --user status mmupdate
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create &lt;code&gt;~/.config/systemd/user/mmupdate.timer&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[Unit]
Description=Run mmupdate daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Enable the timer:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;systemctl --user enable mmupdate.timer
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now every day &lt;code&gt;mmupdate&lt;/code&gt; will be run automatically. You can adjust the period if you think daily rebuilds are a bit excessive.&lt;/p&gt;
&lt;p&gt;A neat advantage of period rebuilds is that they the base files in your &lt;code&gt;apt-cacher-ng&lt;/code&gt; cache warm every time they run.&lt;/p&gt;
&lt;h1 id=&#34;setting-up-sbuild&#34;&gt;Setting up sbuild&lt;/h1&gt;
&lt;p&gt;Install &lt;code&gt;sbuild&lt;/code&gt; and (optionally) &lt;code&gt;autopkgtest&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install --no-install-recommends sbuild autopkgtest
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create &lt;code&gt;~/.sbuildrc&lt;/code&gt; and insert:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# backend for using mmdebstrap chroots
$chroot_mode = &amp;#39;unshare&amp;#39;;

# build in tmpfs
$unshare_tmpdir_template = &amp;#39;/dev/shm/tmp.sbuild.XXXXXXXX&amp;#39;;

# upgrade before starting build
$apt_update = 1;
$apt_upgrade = 1;

# build everything including source for source-only uploads
$build_arch_all = 1;
$build_arch_any = 1;
$build_source = 1;
$source_only_changes = 1;

# go to shell on failure instead of exiting
$external_commands = { &amp;#34;build-failed-commands&amp;#34; =&amp;gt; [ [ &amp;#39;%SBUILD_SHELL&amp;#39; ] ] };

# always clean build dir, even on failure
$purge_build_directory = &amp;#34;always&amp;#34;;

# run lintian
$run_lintian = 1;
$lintian_opts = [ &amp;#39;-i&amp;#39;, &amp;#39;-I&amp;#39;, &amp;#39;-E&amp;#39;, &amp;#39;--pedantic&amp;#39; ];

# do not run piuparts
$run_piuparts = 0;

# run autopkgtest
$run_autopkgtest = 1;
$autopkgtest_root_args = &amp;#39;&amp;#39;;
$autopkgtest_opts = [ &amp;#39;--apt-upgrade&amp;#39;, &amp;#39;--&amp;#39;, &amp;#39;unshare&amp;#39;, &amp;#39;--release&amp;#39;, &amp;#39;%r&amp;#39;, &amp;#39;--arch&amp;#39;, &amp;#39;%a&amp;#39;, &amp;#39;--prefix=/dev/shm/tmp.autopkgtest.&amp;#39; ];

# set uploader for correct signing
$uploader_name = &amp;#39;Stephan Lachnit &amp;lt;stephanlachnit@debian.org&amp;gt;&amp;#39;;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You should adjust &lt;code&gt;uploader_name&lt;/code&gt;. If you don&amp;rsquo;t want to run &lt;code&gt;autopkgtest&lt;/code&gt; or &lt;code&gt;lintian&lt;/code&gt; by default you can also disable it here. Note that for packages that need a lot of space for building, you might want to comment the &lt;code&gt;unshare_tmpdir_template&lt;/code&gt; line to prevent a OOM build failure.&lt;/p&gt;
&lt;p&gt;You can now build your Debian packages with the &lt;code&gt;sbuild&lt;/code&gt; command :)&lt;/p&gt;
&lt;h1 id=&#34;finishing-touches&#34;&gt;Finishing touches&lt;/h1&gt;
&lt;p&gt;You can add these variables to your &lt;code&gt;~/.bashrc&lt;/code&gt; as bonus (with adjusted name / email):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;export DEBFULLNAME=&amp;#34;&amp;lt;your_name&amp;gt;&amp;#34;
export DEBEMAIL=&amp;#34;&amp;lt;your_email&amp;gt;&amp;#34;
export DEB_BUILD_OPTIONS=&amp;#34;parallel=&amp;lt;threads&amp;gt;&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In particular adjust the value of &lt;code&gt;parallel&lt;/code&gt; to ensure parallel builds.&lt;/p&gt;
&lt;p&gt;If you are new to signing / uploading your package, first install the required tools:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install devscripts dput-ng
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create &lt;code&gt;~/.devscripts&lt;/code&gt; and insert:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;DEBSIGN_KEYID=&amp;lt;your_gpg_fingerprint&amp;gt;
USCAN_SYMLINK=rename
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can now sign the &lt;code&gt;.changes&lt;/code&gt; file with:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;debsign ../&amp;lt;pkgname_version_arch&amp;gt;.changes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And for source-only uploads with:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;debsign -S ../&amp;lt;pkgname_version_arch&amp;gt;_source.changes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you don&amp;rsquo;t introduce a new binary package, you always want to go with source-only changes.&lt;/p&gt;
&lt;p&gt;You can now upload the package to Debian with&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dput ../&amp;lt;filename&amp;gt;.changes
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;update-feb-22-advanced-options-in-mmdebstrap&#34;&gt;Update Feb 22: Advanced options in mmdebstrap&lt;/h1&gt;
&lt;p&gt;Jochen Sprickerhof, who originally advised me to use the unshare backend, commented that one can also use &lt;code&gt;--include=auto-apt-proxy&lt;/code&gt; instead of the &lt;code&gt;--aptopt&lt;/code&gt; option in mmdebstrap to detect apt proxies automatically.
He also let me know that it is possible to use autopkgtest on tmpfs (config in the blog post is updated) and added an entry on the sbuild wiki page on how to setup sbuild+unshare with ccache if you often need to build a large package.&lt;/p&gt;
&lt;p&gt;Further, using &lt;code&gt;--variant=apt&lt;/code&gt; and &lt;code&gt;--include=build-essential&lt;/code&gt; will produce smaller build chroots if wished. On the contrary, one can of course also use the &lt;code&gt;--include&lt;/code&gt; option to include &lt;code&gt;debhelper&lt;/code&gt; and &lt;code&gt;lintian&lt;/code&gt; (or any other packages you like) to further decrease the setup time. However, staying with &lt;code&gt;buildd&lt;/code&gt; variant is a good choice for official uploads.&lt;/p&gt;
&lt;h1 id=&#34;update-aug-23-building-for-experimental&#34;&gt;Update Aug 23: Building for experimental&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;mmdebstrap&lt;/code&gt; does not allow to create tarballs with packages from experimental. Luckily, we don&amp;rsquo;t actually need this, we can simply solve this with in &lt;code&gt;sbuild&lt;/code&gt; by adding experimental as additional repository to our existing unstable tarball and changing the dependency resolver. Let&amp;rsquo;s create a new script &lt;code&gt;~/.local/bin/sbuild-experimental&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh
sbuild --dist=experimental --extra-repository=&amp;#39;deb http://deb.debian.org/debian experimental main contrib non-free&amp;#39; --build-dep-resolver=aspcud $@
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Let&amp;rsquo;s not forget to make the file executable:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chmod +x ~/.local/bin/sbuild-experimental
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The last step is to create a symlink for the experimental tarball pointing to our existing tarball:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ln -s -r ~/.cache/sbuild/unstable-amd64.tar.xz ~/.cache/sbuild/experimental-amd64.tar.xz
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Thanks to josch and smcv on IRC for helping me out with this!&lt;/p&gt;
&lt;h1 id=&#34;resources-for-further-reading&#34;&gt;Resources for further reading&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.debian.org/sbuild&#34;&gt;https://wiki.debian.org/sbuild&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://www.unix-ag.uni-kl.de/~bloch/acng/html/index.html&#34;&gt;https://www.unix-ag.uni-kl.de/~bloch/acng/html/index.html&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://wiki.ubuntu.com/SimpleSbuild&#34;&gt;https://wiki.ubuntu.com/SimpleSbuild&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/Systemd/Timers&#34;&gt;https://wiki.archlinux.org/title/Systemd/Timers&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://manpages.debian.org/unstable/autopkgtest/autopkgtest-virt-unshare.1.en.html&#34;&gt;https://manpages.debian.org/unstable/autopkgtest/autopkgtest-virt-unshare.1.en.html&lt;/a&gt; &lt;br&gt;
Thanks for reading!&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>Installing Debian on F2FS rootfs with deboostrap and systemd-boot</title>
      <link>https://stephan.lachnit.xyz/posts/2023-02-07-install-debian-debootstrap-f2fs-systemd-boot/</link>
      <pubDate>Tue, 07 Feb 2023 23:37:56 +0100</pubDate>
      
      <guid>https://stephan.lachnit.xyz/posts/2023-02-07-install-debian-debootstrap-f2fs-systemd-boot/</guid>
      
        <description>&lt;p&gt;I recently got a new NVME drive. My plan was to create a fresh Debian install on an &lt;a href=&#34;https://en.wikipedia.org/wiki/F2FS&#34;&gt;F2FS&lt;/a&gt; root partition with compression for maximum performance. As it turns out, this is not entirely trivil to accomplish.
For one, the Debian installer does not support F2FS (&lt;a href=&#34;https://salsa.debian.org/stephanlachnit/partman-f2fs&#34;&gt;here is my attempt to add it from 2021&lt;/a&gt;).
And even if it did, &lt;a href=&#34;https://wiki.archlinux.org/title/F2FS#GRUB_support&#34;&gt;grub does not support F2FS with the &lt;code&gt;extra_attr&lt;/code&gt; flag&lt;/a&gt; that is required for compression support (at least as of grub 2.06).&lt;/p&gt;
&lt;p&gt;Luckily, we can install Debian anyway with all these these shiny new features when we go the manual road with &lt;code&gt;debootstrap&lt;/code&gt; and using &lt;code&gt;systemd-boot&lt;/code&gt; as bootloader.
We can break down the process into several steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;#creating-the-partition-partble&#34;&gt;Creating the partition table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#creating-and-mounting-the-root-partition&#34;&gt;Creating and mounting the root partition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bootstrapping-with-debootstrap&#34;&gt;Bootstrapping with &lt;code&gt;debootstrap&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#chrooting-into-the-system&#34;&gt;Chrooting into the system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#configure-the-base-system&#34;&gt;Configure the base system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#define-static-file-system-information&#34;&gt;Define static file system information&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#installing-the-kernel-and-bootloader&#34;&gt;Installing the kernel and bootloader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#finishing-touches&#34;&gt;Finishing touches&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;: Playing around with partitions can easily result in data if you mess up! Make sure to double check your commands and create a data backup if you don&amp;rsquo;t feel confident about the process.&lt;/p&gt;
&lt;h1 id=&#34;creating-the-partition-partble&#34;&gt;Creating the partition partble&lt;/h1&gt;
&lt;p&gt;The first step is to create the GPT partition table on the new drive. There are several tools to do this, I recommend the &lt;a href=&#34;https://wiki.archlinux.org/title/Partitioning&#34;&gt;ArchWiki page&lt;/a&gt; on this topic for details.
For simplicity I just went with the GParted since it has an easy GUI, but feel free to use any other tool.
The layout should look like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Type       │ Partition      │ Suggested size
───────────┼────────────────┼───────────────
EFI        │ /dev/nvme0n1p1 │           1GiB
Linux swap │ /dev/nvme0n1p2 │           1GiB
Linux fs   │ /dev/nvme0n1p3 │      remainder
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The disk names are just an example and have to be adjusted for your system.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t set disk labels, they don&amp;rsquo;t appear on the new install anyway and some UEFIs might not like it on your boot partition.&lt;/li&gt;
&lt;li&gt;The size of the EFI partition &lt;em&gt;can&lt;/em&gt; be smaller, in practive it&amp;rsquo;s unlikely that you need more than 300 MiB. However some UEFIs might be buggy and if you ever want to install an additional kernel or something like memtest86+ you will be happy to have the extra space.&lt;/li&gt;
&lt;li&gt;The swap partition &lt;em&gt;can&lt;/em&gt; be omitted, it is not strictly needed. If you need more swap for some reason you can also add more using a swap file later (see &lt;a href=&#34;https://wiki.archlinux.org/title/Swap&#34;&gt;ArchWiki page&lt;/a&gt;). If you know you want to use suspend-to-RAM, you want to increase the size to something &lt;em&gt;more&lt;/em&gt; than the size of your memory.&lt;/li&gt;
&lt;li&gt;If you used GParted, create the EFI partition as FAT32 and set the &lt;code&gt;esp&lt;/code&gt; flag. For the root partition use ext4 or F2FS if available.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;creating-and-mounting-the-root-partition&#34;&gt;Creating and mounting the root partition&lt;/h1&gt;
&lt;p&gt;To create the root partition, we need to install the &lt;code&gt;f2fs-tools&lt;/code&gt; first:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install f2fs-tools
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we can create the file system with the correct flags:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkfs.f2fs -O extra_attr,inode_checksum,sb_checksum,compression,encrypt /dev/nvme0n1p3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For details on the flags visit the &lt;a href=&#34;https://wiki.archlinux.org/title/F2FS&#34;&gt;ArchWiki page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Next, we need to mount the partition with the correct flags. First, create a working directory:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir bootstrap
cd bootstrap
mkdir root
export DFS=$(pwd)/root
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then we can mount the partition:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo mount -o compress_algorithm=zstd:6,compress_chksum,gc_merge,lazytime /dev/nvme0n1p3 $DFS
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Again, for details on the mount options visit the above mentioned ArchWiki page.&lt;/p&gt;
&lt;h1 id=&#34;bootstrapping-with-debootstrap&#34;&gt;Bootstrapping with &lt;code&gt;debootstrap&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;First we need to install the &lt;code&gt;debootstrap&lt;/code&gt; package:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install debootstrap
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we can do the bootstrapping:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;debootstrap --arch=amd64 --components=main,contrib,non-free,non-free-firmware unstable $DFS http://deb.debian.org/debian
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--arch&lt;/code&gt; sets the CPU architecture (see &lt;a href=&#34;https://wiki.debian.org/SupportedArchitectures&#34;&gt;Debian Wiki&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--components&lt;/code&gt; sets the archive components, if you don&amp;rsquo;t want non-free pacakges you might want to remove some entries here.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unstable&lt;/code&gt; is the Debian release, you might want to change that to &lt;code&gt;testing&lt;/code&gt; or &lt;code&gt;bookworm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$DFS&lt;/code&gt; points to the mounting point of the root partition.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://deb.debian.org/debian&lt;/code&gt; is the Debian mirror, you might want to set that to &lt;code&gt;http://ftp.de.debian.org/debian&lt;/code&gt; or similar if you have a fast mirror in you area.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;chrooting-into-the-system&#34;&gt;Chrooting into the system&lt;/h1&gt;
&lt;p&gt;Before we can chroot into the newly created system, we need to prepare and mount virtual kernel file systems. First create the directories:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo mkdir -p $DFS/dev $DFS/dev/pts $DFS/proc $DFS/sys $DFS/run $DFS/sys/firmware/efi/efivars $DFS/boot/efi
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then bind-mount the directories from your system to the mount point of the new system:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo mount -v -B /dev $DFS/dev
sudo mount -v -B /dev/pts $DFS/dev/pts
sudo mount -v -B /proc $DFS/proc
sudo mount -v -B /sys $DFS/sys
sudo mount -v -B /run $DFS/run
sudo mount -v -B /sys/firmware/efi/efivars $DFS/sys/firmware/efi/efivars
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As a last step, we need to mount the EFI partition:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo mount -v /dev/nvme0n1p1 $DFS/boot/efi
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we can chroot into new system:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo chroot $DFS /bin/bash
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;configure-the-base-system&#34;&gt;Configure the base system&lt;/h1&gt;
&lt;p&gt;The first step in the chroot is setting the locales. We need this since we might leak the locales from our base system into the chroot and if this happens we get a lot of annoying warnings.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;export LC_ALL=C.UTF-8 LANG=C.UTF-8
apt install locales console-setup
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Set your locales:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dpkg-reconfigure locales
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Set your keyboard layout:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dpkg-reconfigure keyboard-configuration
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Set your timezone:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dpkg-reconfigure tzdata
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now you have a fully functional Debian chroot! However, it is not bootable yet, so let&amp;rsquo;s fix that.&lt;/p&gt;
&lt;h1 id=&#34;define-static-file-system-information&#34;&gt;Define static file system information&lt;/h1&gt;
&lt;p&gt;The first step is to make sure the system mounts all partitions on startup with the correct mount flags.
This is done in &lt;code&gt;/etc/fstab&lt;/code&gt; (see &lt;a href=&#34;https://wiki.archlinux.org/title/Fstab&#34;&gt;ArchWiki page&lt;/a&gt;).
Open the file and change its content to:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# file system                               mount point   type   options                                                       dump   pass

# NVME efi partition
UUID=XXXX-XXXX                              /boot/efi     vfat   umask=0077                                                    0      0

# NVME swap
UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   none          swap   sw                                                            0      0

# NVME main partition
UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /             f2fs   compress_algorithm=zstd:6,compress_chksum,gc_merge,lazytime   0      1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You need to fill in the UUIDs for the partitions. You can use&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ls -lAph /dev/disk/by-uuid/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;to match the UUIDs to the more readable disk name under &lt;code&gt;/dev&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&#34;installing-the-kernel-and-bootloader&#34;&gt;Installing the kernel and bootloader&lt;/h1&gt;
&lt;p&gt;First install the &lt;code&gt;systemd-boot&lt;/code&gt; and &lt;code&gt;efibootmgr&lt;/code&gt; packages:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt install systemd-boot efibootmgr
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we can install the bootloader:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bootctl install --path=/boot/efi
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can verify the procedure worked with&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;efibootmgr -v
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The next step is to install the kernel, you can find a fitting image with:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt search linux-image-*
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In my case:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt install linux-image-amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After the installation of the kernel, apt will add an entry for &lt;code&gt;systemd-boot&lt;/code&gt; automatically. Neat!&lt;/p&gt;
&lt;p&gt;However, since we are in a chroot the current settings are not bootable.
The first reason is the boot partition, which will likely be the one from your current system.
To change that, navigate to &lt;code&gt;/boot/efi/loader/entries&lt;/code&gt;, it should contain one config file.
When you open this file, it should look something like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;title      Debian GNU/Linux bookworm/sid
version    6.1.0-3-amd64
machine-id 2967cafb6420ce7a2b99030163e2ee6a
sort-key   debian
options    root=PARTUUID=f81d4fae-7dec-11d0-a765-00a0c91e6bf6 ro systemd.machine_id=2967cafb6420ce7a2b99030163e2ee6a
linux      /2967cafb6420ce7a2b99030163e2ee6a/6.1.0-3-amd64/linux
initrd     /2967cafb6420ce7a2b99030163e2ee6a/6.1.0-3-amd64/initrd.img-6.1.0-3-amd64
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The PARTUUID needs to point to the partition equivalent to &lt;code&gt;/dev/nvme0n1p3&lt;/code&gt; on your system. You can use&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ls -lAph /dev/disk/by-partuuid/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;to match the PARTUUIDs to the more readable disk name under &lt;code&gt;/dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The second problem is the &lt;code&gt;ro&lt;/code&gt; flag in &lt;code&gt;options&lt;/code&gt; which tell the kernel to boot in read-only mode.
The default is &lt;code&gt;rw&lt;/code&gt;, so you can just remove the &lt;code&gt;ro&lt;/code&gt; flag.&lt;/p&gt;
&lt;p&gt;Once this is fixed, the new system should be bootable. You can change the boot order with:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;efibootmgr --bootorder
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;However, before we reboot we might add well add a user and install some basic software.&lt;/p&gt;
&lt;h1 id=&#34;finishing-touches&#34;&gt;Finishing touches&lt;/h1&gt;
&lt;p&gt;Add a user:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;useradd -m -G sudo -s /usr/bin/bash -c &amp;#39;Full Name&amp;#39; username
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Debian provides a TUI to install Desktop Environment. To open it, run:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tasksel
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now you can finally reboot into your new system:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;reboot
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;resources-for-further-reading&#34;&gt;Resources for further reading&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://ivanb.neocities.org/blogs/y2022/debootstrap&#34;&gt;https://ivanb.neocities.org/blogs/y2022/debootstrap&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://www.debian.org/releases/stable/amd64/apds03.en.html&#34;&gt;https://www.debian.org/releases/stable/amd64/apds03.en.html&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://www.addictivetips.com/ubuntu-linux-tips/set-up-systemd-boot-on-arch-linux/&#34;&gt;https://www.addictivetips.com/ubuntu-linux-tips/set-up-systemd-boot-on-arch-linux/&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://p5r.uk/blog/2020/using-systemd-boot-on-debian-bullseye.html&#34;&gt;https://p5r.uk/blog/2020/using-systemd-boot-on-debian-bullseye.html&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;https://www.linuxfromscratch.org/lfs/view/stable/chapter07/kernfs.html&#34;&gt;https://www.linuxfromscratch.org/lfs/view/stable/chapter07/kernfs.html&lt;/a&gt; &lt;br&gt;
Thanks for reading!&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>MiniDebConfOnline #2: Gaming utilities and Debian</title>
      <link>https://stephan.lachnit.xyz/talks/2020-11-21-mdco2/</link>
      <pubDate>Sat, 21 Nov 2020 13:30:00 +0000</pubDate>
      
      <guid>https://stephan.lachnit.xyz/talks/2020-11-21-mdco2/</guid>
      
        <description>&lt;p&gt;After DebConf20 I didn&amp;rsquo;t plan to take part in any MiniDebConf soon, but when the topic for the MDCO got announced (&amp;ldquo;Gaming&amp;rdquo;) it was clear to me that I had to give talk about my current work in Debian, which mostly consists of packaging gaming utilities.&lt;/p&gt;
&lt;p&gt;Compared to my last talk, I think I did much better. I was a bit better prepared and didn&amp;rsquo;t had to rush to send in the video before the deadline like with my last talk. From what I saw on IRC, there have been a couple of people chatting about the tools in the talk.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
    &lt;iframe style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34;
    sandbox=&#34;allow-same-origin allow-scripts allow-popups&#34;
    src=&#34;https://peertube.debian.social/videos/embed/f4210f04-fa21-455b-bb50-5f6a5c031855&#34;
    frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;tl;dw: I gave &lt;a href=&#34;https://lutris.net/&#34;&gt;Lutris&lt;/a&gt;, &lt;a href=&#34;https://github.com/flightlessmango/MangoHud&#34;&gt;MangoHud&lt;/a&gt;, &lt;a href=&#34;https://github.com/DadSchoorse/vkBasalt&#34;&gt;vkBasalt&lt;/a&gt;, &lt;a href=&#34;https://github.com/benjamimgois/goverlay&#34;&gt;GOverlay&lt;/a&gt; and &lt;a href=&#34;https://github.com/libratbag/piper&#34;&gt;Piper&lt;/a&gt; a quick video preview and also briefly presented &lt;a href=&#34;https://github.com/FeralInteractive/gamemode&#34;&gt;gamemode&lt;/a&gt;, &lt;a href=&#34;https://github.com/aejsmith/vkdevicechooser&#34;&gt;vkdevicechooser&lt;/a&gt;, &lt;a href=&#34;https://gitlab.com/CalcProgrammer1/OpenRGB&#34;&gt;OpenRGB&lt;/a&gt;, &lt;a href=&#34;https://github.com/berarma/oversteer&#34;&gt;Oversteer&lt;/a&gt;, &lt;a href=&#34;https://github.com/tkashkin/GameHub&#34;&gt;GameHub&lt;/a&gt;, &lt;a href=&#34;https://github.com/lawl/NoiseTorch&#34;&gt;NoiseTorch&lt;/a&gt; and &lt;a href=&#34;https://github.com/vkmark/vkmark&#34;&gt;vkmark&lt;/a&gt;. I also talked a bit about some minor things that annoy me when packaging gaming tools.&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>DebConf20: Simplifying copyright using SPDX IDs</title>
      <link>https://stephan.lachnit.xyz/talks/2020-08-29-debconf20/</link>
      <pubDate>Sat, 29 Aug 2020 15:30:00 +0000</pubDate>
      
      <guid>https://stephan.lachnit.xyz/talks/2020-08-29-debconf20/</guid>
      
        <description>&lt;p&gt;I&amp;rsquo;ve been contributing for Debian since late 2019, I submitted a talk to the DebConf20. One of the topics that annoyed me the most at that time was how tedious it was to write and read larger &lt;code&gt;d/copright&lt;/code&gt; files.&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;ve submitted a talk about the SPDX standard, hoping to start a discussion to get rid of the license texts inside the file. IMHO not a very good talk, but also not bad one either for my first public talk.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
    &lt;iframe style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34;
    sandbox=&#34;allow-same-origin allow-scripts allow-popups&#34;
    src=&#34;https://peertube.debian.social/videos/embed/2ab70444-0214-43d2-97cf-1fec3106b83a&#34;
    frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;tl;dw: there never was a noteworthy discussion, but thanks to some hints on IRC I&amp;rsquo;ve discovered &lt;a href=&#34;https://reuse.software/&#34;&gt;REUSE&lt;/a&gt; from the FSFE. It basically already implements what I had in mind, and I will surely write up a blog post about it at some point.&lt;/p&gt;
</description>
      
    </item>
    
  </channel>
</rss>