<?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>Debian on Andrew Quinn&#39;s TILs</title>
    <link>https://til.andrew-quinn.me/tags/debian/</link>
    <description>Recent content in Debian on Andrew Quinn&#39;s TILs</description>
    <image>
      <title>Andrew Quinn&#39;s TILs</title>
      <url>https://til.andrew-quinn.me/papermod-cover.png</url>
      <link>https://til.andrew-quinn.me/papermod-cover.png</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sat, 27 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://til.andrew-quinn.me/tags/debian/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Where is the DevOps for Yocto?</title>
      <link>https://til.andrew-quinn.me/posts/where-is-the-devops-for-yocto/</link>
      <pubDate>Sat, 27 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/where-is-the-devops-for-yocto/</guid>
      <description>&lt;p&gt;The cozy world of DevOps has spoiled me with tools like Ansible,
Terraform, and Packer. In the situations where I have a Linux machine
already booted up, and sometimes already connected to the Internet, I
can make things really easy on myself by slinging these tools in my
usual way for repeatable, reproducible machines that may or may not come
with the attendant headaches of immutable infrastructure (sorry, Nix,
I&amp;rsquo;m not in love with you, I&amp;rsquo;m in love with the idea of you).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Consider the cronslave</title>
      <link>https://til.andrew-quinn.me/posts/consider-the-cronslave/</link>
      <pubDate>Fri, 30 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/consider-the-cronslave/</guid>
      <description>&lt;p&gt;As a nerdy, working-class kid who grew up in the 1990s, knowing what time it
actually was was a luxury I rarely had access to before I was 12 or so and my
parents finally got an Internet connection with its attendant link to the
Network Time Protocol. If you had told me I could have not just a watch but an
entire &lt;em&gt;machine&lt;/em&gt; that&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Never lost the time,&lt;/li&gt;
&lt;li&gt;Did what I wanted, how I wanted it, and&lt;/li&gt;
&lt;li&gt;Could be programmed to do what I want, how I want it &lt;em&gt;on a schedule&lt;/em&gt;,&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I would have had to substantially revise my Christmas wishlist.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LLMs make Perl great again</title>
      <link>https://til.andrew-quinn.me/posts/llms-make-perl-great-again/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/llms-make-perl-great-again/</guid>
      <description>&lt;p&gt;Perl 5 went through a long nadir of unpopularity due in large part to its
deserved &amp;ldquo;Write Once, Read Never&amp;rdquo; reputation. So I was surprised to find out
not only is it
&lt;a href=&#34;https://til.andrew-quinn.me/posts/what-programming-languages-come-out-of-the-box-on-debian-12/&#34;&gt;installed by default on Debian&lt;/a&gt;,
it&amp;rsquo;s installed nearly &lt;em&gt;everywhere&lt;/em&gt; by default.
It&amp;rsquo;s even the non-shell scripting language of choice on
&lt;a href=&#34;https://marc.info/?l=openbsd-misc&amp;m=159041121804486&amp;w=2&#34;&gt;OpenBSD&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Perhaps the only thing more impressive than Perl&amp;rsquo;s utter ubiquity is its
longevity. The latest major version of Perl was first released in
&lt;a href=&#34;https://en.wikipedia.org/wiki/Perl_5_version_history&#34;&gt;&lt;em&gt;1994&lt;/em&gt;&lt;/a&gt;. It came into
existence on this planet less than a year after I did. It&amp;rsquo;s even arguably more
portable than the median shell script - different Unices might use Bash, Zsh,
Ksh, or even something newfangled like
&lt;a href=&#34;https://fishshell.com/&#34;&gt;Fish&lt;/a&gt;,
but for the most part a Perl 5 program is a Perl 5 program is a Perl 5 program.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Common-sense security for SSH on a new Debian server</title>
      <link>https://til.andrew-quinn.me/posts/common-sense-security-for-ssh-on-a-new-debian-server/</link>
      <pubDate>Tue, 24 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/common-sense-security-for-ssh-on-a-new-debian-server/</guid>
      <description>&lt;p&gt;Last night I went to DigitalOcean and spun up a tiny new, $4/month droplet &amp;ndash;
on my own dime! It sounds crazy, but I&amp;rsquo;ve never actually wanted to pay for
hosting myself before. But I have a fun little web app cooking up, one that
might eventually pay that $4/month back with interests, and I decided, why not,
it&amp;rsquo;s time to finally put some of my &lt;em&gt;own&lt;/em&gt; skin in the game with this whole
sysadmin thing.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>What scripting languages come out of the box on Debian 12?</title>
      <link>https://til.andrew-quinn.me/posts/what-programming-languages-come-out-of-the-box-on-debian-12/</link>
      <pubDate>Sun, 23 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/what-programming-languages-come-out-of-the-box-on-debian-12/</guid>
      <description>&lt;p&gt;Poking around in a
&lt;a href=&#34;https://til.andrew-quinn.me/posts/the-unreasonable-effectiveness-of-vms-in-hacker-pedagogy/&#34;&gt;fresh VM in Vagrant&lt;/a&gt;,
I see&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dash&lt;/code&gt;, a POSIX compliant shell linked under &lt;code&gt;sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python3&lt;/code&gt;, 3.11.2 at the time of writing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;awk&lt;/code&gt;, specifically &lt;code&gt;mawk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sed&lt;/code&gt;, if you count that (I do)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;perl&lt;/code&gt;, specifically Perl 5&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There may be others I missed.&lt;/p&gt;
&lt;p&gt;Why I&amp;rsquo;m curious: Knowing that a language is installed by default on the most
popular Linux distribution can simplify certain concerns considerably, which
are of special interest to
&lt;a href=&#34;https://til.andrew-quinn.me/posts/openbsd-the-computer-appliance-maker-s-secret-weapon/&#34;&gt;people who don&amp;rsquo;t work on Internet-connected boxes&lt;/a&gt;.
Knowing that Python/Perl is already on there means that,
provided your script only
relies on the standard library, you should be able to just &lt;code&gt;scp&lt;/code&gt; it over in a
pinch and have it &amp;ldquo;just work&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>One problem with user-scoped `systemd` timers</title>
      <link>https://til.andrew-quinn.me/posts/one-problem-with-user-scoped-systemd-timers/</link>
      <pubDate>Sun, 26 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/one-problem-with-user-scoped-systemd-timers/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve discovered one big downside of [putting &lt;code&gt;systemd&lt;/code&gt; times into &lt;code&gt;~/.config/systemd/user/&lt;/code&gt;][1]: They stop running when you log out.&lt;/p&gt;
&lt;p&gt;Two ways around this problem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bite the bullet, and install the timers into &lt;code&gt;/etc/systemd/&lt;/code&gt;. This means giving up &lt;a href=&#34;https://www.chezmoi.io/&#34;&gt;chezmoi version control&lt;/a&gt;, making the overall system more snowflake-y. I&amp;rsquo;m not crazy about it.&lt;/li&gt;
&lt;li&gt;Remote in with &lt;code&gt;tmux&lt;/code&gt;, instead of ever logging out, just use &lt;code&gt;C-b d&lt;/code&gt; to detach from the session.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;rsquo;m going with #2. The lead developer of &lt;code&gt;ktty&lt;/code&gt; is known not to like &lt;code&gt;tmux&lt;/code&gt;, so there&amp;rsquo;s probably a way to detach long-running SSH sections inside of &lt;code&gt;kitty&lt;/code&gt; itself &amp;ndash; but I haven&amp;rsquo;t found it yet. Have you?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>That damned Debian 10 one-liner I always need to let me `sudo`</title>
      <link>https://til.andrew-quinn.me/posts/that-damned-debian-10-one-liner/</link>
      <pubDate>Mon, 20 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/that-damned-debian-10-one-liner/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#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&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-1&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-1&#34;&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-0-2&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-0-2&#34;&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#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;&lt;span style=&#34;color:#75715e&#34;&gt;# ⚠️: Reboots your VM.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;su -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;whereis adduser | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;whoami&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; sudo &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;whereis reboot | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;In all its glory! For &lt;strong&gt;Debian 10 and up&lt;/strong&gt;, because Debian 10 is where the &lt;code&gt;sysv&lt;/code&gt; to &lt;code&gt;systemd&lt;/code&gt; conversion became totalizing.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s break down quickly why each part of this is needed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Since we are trying to add ourselves to the &lt;code&gt;sudo&lt;/code&gt; group right now, we obviously can&amp;rsquo;t use &lt;code&gt;sudo&lt;/code&gt;. Enter &lt;code&gt;su -c&lt;/code&gt; to switch to &lt;code&gt;root&lt;/code&gt;, run a command, and then switch back out.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;whereis adduser&lt;/code&gt; instead of simply &lt;code&gt;adduser&lt;/code&gt; because &lt;code&gt;adduser&lt;/code&gt; is no longer in the &lt;code&gt;$PATH&lt;/code&gt; by default anymore.
&lt;ul&gt;
&lt;li&gt;Tempted to try &lt;code&gt;which adduser&lt;/code&gt;? No dice &amp;ndash; &lt;code&gt;which&lt;/code&gt; only gets you things in the &lt;code&gt;$PATH&lt;/code&gt; as well:
&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;
&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#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&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-1-1&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-1-1&#34;&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-1-2&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-1-2&#34;&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34; id=&#34;hl-1-3&#34;&gt;&lt;a style=&#34;outline:none;text-decoration:none;color:inherit&#34; href=&#34;#hl-1-3&#34;&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#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;andrew@debian-10:~$ which adduser    &lt;span style=&#34;color:#75715e&#34;&gt;# zip, zilch, nada.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;andrew@debian-10:~$ whereis adduser
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;adduser: /usr/sbin/adduser /etc/adduser.conf /usr/share/adduser /usr/share/man/man8/adduser.8.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;awk&lt;/code&gt; to rip out &lt;code&gt;/usr/sbin/adduser&lt;/code&gt;, which - thankfully - at least is still executable.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$(whoami)&lt;/code&gt; because your name might not be &lt;code&gt;andrew&lt;/code&gt;!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;whereis reboot&lt;/code&gt; because I don&amp;rsquo;t want to have to manually remember to logout and login again.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
  </channel>
</rss>
