<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on ma.ttias.be</title><link>https://ma.ttias.be/categories/linux/</link><description>Recent content in Linux on ma.ttias.be</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>mattias@ma.ttias.be (Mattias Geniar)</managingEditor><webMaster>mattias@ma.ttias.be (Mattias Geniar)</webMaster><lastBuildDate>Fri, 12 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ma.ttias.be/categories/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux debugging tools I use daily</title><link>https://ma.ttias.be/linux-debugging-tools-i-use-daily/</link><pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/linux-debugging-tools-i-use-daily/</guid><description>&lt;p&gt;Every server I run, including the fleet behind &lt;a href="https://ohdear.app" target="_blank" rel="noopener noreferrer"&gt;Oh Dear&lt;/a&gt;
&amp;rsquo;s uptime checks, has the same set of debugging tools installed before anything goes wrong. Not because the application needs them, but because the one time you reach for &lt;code&gt;strace&lt;/code&gt; is at 2am, the box is misbehaving, and &lt;code&gt;apt install&lt;/code&gt; is the last thing you want to be doing while you work out what broke.&lt;/p&gt;</description></item><item><title>A fresh server for this blog</title><link>https://ma.ttias.be/a-fresh-server-for-this-blog/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/a-fresh-server-for-this-blog/</guid><description>&lt;p&gt;It&amp;rsquo;s been 1,067 days since I last posted &lt;a href="https://ma.ttias.be/oh-dear-2-0-launch/"&gt;something&lt;/a&gt;
on this blog. And instead of writing the blog post I wanted to write, I did everything &lt;em&gt;else&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>cargo: no such subcommand: +nightly</title><link>https://ma.ttias.be/cargo-no-such-subcommand-nightly/</link><pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/cargo-no-such-subcommand-nightly/</guid><description>&lt;p&gt;I was trying to run the following command:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ cargo +nightly install [package]
error: no such subcommand: `+nightly`
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But &amp;hellip; that didn&amp;rsquo;t work. This was my fix:&lt;/p&gt;</description></item><item><title>OpenSSL pkg-config not found</title><link>https://ma.ttias.be/openssl-pkg-config-not-found/</link><pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/openssl-pkg-config-not-found/</guid><description>&lt;p&gt;I found this error message when compiling some software from source:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;It looks like you&amp;#39;re compiling on Linux and also targeting Linux. Currently this
requires the `pkg-config` utility to find OpenSSL but unfortunately `pkg-config`
could not be found. If you have OpenSSL installed you can likely fix this by
installing `pkg-config`.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Luckily, it&amp;rsquo;s an easy fix!&lt;/p&gt;</description></item><item><title>wabt-sys compile: error: CMAKE_PROJECT_VERSION was not declared in this scope on Ubuntu 18.04 LTS</title><link>https://ma.ttias.be/wabt-sys-compile-error-cmake-project-version-not-declared-in-scope-ubuntu-18-04/</link><pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/wabt-sys-compile-error-cmake-project-version-not-declared-in-scope-ubuntu-18-04/</guid><description>&lt;p&gt;When trying to compile WebAssembly (&lt;code&gt;wabt-rs&lt;/code&gt;) for a dependent package, it failed on Ubuntu 18.04 LTS due to this error message.&lt;/p&gt;</description></item><item><title>Recap: measuring linux performance - how to avoid typical mistakes</title><link>https://ma.ttias.be/recap-measuring-linux-performance-avoid-typical-mistakes/</link><pubDate>Thu, 09 Jul 2020 06:50:00 +0100</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/recap-measuring-linux-performance-avoid-typical-mistakes/</guid><description>&lt;p&gt;In the last two weeks, &lt;a href="https://twitter.com/PeterZaitsev" target="_blank" rel="noopener noreferrer"&gt;Peter Zaitsev&lt;/a&gt;
published a 4-part series on measuring Linux performance on this blog.&lt;/p&gt;</description></item><item><title>How to measure Linux Performance Avoiding Most Typical Mistakes: Network</title><link>https://ma.ttias.be/how-to-measure-linux-performance-avoiding-most-typical-mistakes-network/</link><pubDate>Wed, 08 Jul 2020 06:50:00 +0100</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/how-to-measure-linux-performance-avoiding-most-typical-mistakes-network/</guid><description>&lt;p&gt;In this series, we are talking about Linux performance measurement, how to measure it right. Linux performance is a very broad topic, so we&amp;rsquo;ll focus on the four primary resources which are typically going to drive your system performance – obviously CPU, memory, disk storage, and network.&lt;/p&gt;</description></item><item><title>How to measure Linux Performance Avoiding Most Typical Mistakes: Memory</title><link>https://ma.ttias.be/how-to-measure-linux-performance-avoiding-most-typical-mistakes-memory/</link><pubDate>Mon, 06 Jul 2020 06:50:00 +0100</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/how-to-measure-linux-performance-avoiding-most-typical-mistakes-memory/</guid><description>&lt;p&gt;In this series, we are talking about Linux performance measurement, how to measure it right. Linux performance is a very broad topic, so we&amp;rsquo;ll focus on the four primary resources which are typically going to drive your system performance – obviously CPU, memory, disk storage, and network.&lt;/p&gt;</description></item><item><title>How to measure Linux Performance Avoiding Most Typical Mistakes: Disk Storage</title><link>https://ma.ttias.be/how-to-measure-linux-performance-avoiding-most-typical-mistakes-disk-storage/</link><pubDate>Thu, 02 Jul 2020 06:50:00 +0100</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/how-to-measure-linux-performance-avoiding-most-typical-mistakes-disk-storage/</guid><description>&lt;p&gt;In this series, we are talking about Linux performance measurement, how to measure it right. Linux performance is a very broad topic, so we&amp;rsquo;ll focus on the four primary resources which are typically going to drive your system performance – obviously CPU, memory, disk storage, and network.&lt;/p&gt;</description></item><item><title>Adding SWAP to Linux</title><link>https://ma.ttias.be/add-swap-linux/</link><pubDate>Tue, 30 Jun 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/add-swap-linux/</guid><description>&lt;p&gt;Here are the steps needed to add a new SWAP partition to your Linux machine. This&amp;rsquo;ll allocate 2GB of space on your disk, and allow it to be used as RAM if your server is running low.&lt;/p&gt;</description></item><item><title>How to measure Linux Performance Avoiding Most Typical Mistakes: CPU</title><link>https://ma.ttias.be/how-to-measure-linux-performance-avoiding-most-typical-mistakes-cpu/</link><pubDate>Mon, 29 Jun 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/how-to-measure-linux-performance-avoiding-most-typical-mistakes-cpu/</guid><description>&lt;p&gt;In this series, we are going to talk about Linux performance measurement, how to measure it right. Linux performance is a very broad topic, so we&amp;rsquo;ll focus on the four primary resources which are typically going to drive your system performance – obviously CPU, memory, disk storage, and network.&lt;/p&gt;</description></item><item><title>Reading .EML mail files using Mutt on Mac OSX</title><link>https://ma.ttias.be/read-eml-mail-mutt-mac-osx/</link><pubDate>Fri, 26 Jun 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/read-eml-mail-mutt-mac-osx/</guid><description>&lt;p&gt;As part of the &lt;a href="https://ma.ttias.be/cronweekly"&gt;cron.weekly newsletter&lt;/a&gt;
, I want to test the plain-text version of the mail as much as possible.&lt;/p&gt;</description></item><item><title>Making life easier with cron</title><link>https://ma.ttias.be/making-life-easier-with-cron/</link><pubDate>Thu, 04 Jun 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/making-life-easier-with-cron/</guid><description>&lt;p&gt;This post shares some ideas about working with cronjobs, to help make common tasks more easy for both junior and senior sysadmins.&lt;/p&gt;</description></item><item><title>MySQL: ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes</title><link>https://ma.ttias.be/mysql-error-1153-08s01-got-a-packet-bigger-than-max-allowed-packet-bytes/</link><pubDate>Fri, 15 May 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/mysql-error-1153-08s01-got-a-packet-bigger-than-max-allowed-packet-bytes/</guid><description>&lt;p&gt;I ran into this error when doing a very large MySQL import from a dumpfile.&lt;/p&gt;</description></item><item><title>Create a date in the future for use in Bash scripts on BSD/Mac OSX</title><link>https://ma.ttias.be/create-date-future-bash-scripts-bsd-mac-osx/</link><pubDate>Thu, 14 May 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/create-date-future-bash-scripts-bsd-mac-osx/</guid><description>&lt;p&gt;Annoyingly, the &lt;code&gt;date&lt;/code&gt; command differs vastly between Linux &amp;amp; BSD systems. Mac, being based on BSD, inherits the BSD version of that &lt;code&gt;date&lt;/code&gt; command.&lt;/p&gt;</description></item><item><title>Bash script to send a push notification when string is found in logs</title><link>https://ma.ttias.be/bash-script-send-push-notification-string-found-logs/</link><pubDate>Sun, 03 May 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/bash-script-send-push-notification-string-found-logs/</guid><description>&lt;p&gt;I had a use case where I wanted to be notified whenever a particular string occured in a log file. This seemed a bit overkill to make a custom implementation in a monitoring solution, so I wrote a simple Bash script to send me a push notification whenever it occurs.&lt;/p&gt;</description></item><item><title>How I write and curate the cron.weekly newsletter</title><link>https://ma.ttias.be/how-to-cron-weekly-newsletter/</link><pubDate>Wed, 29 Apr 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/how-to-cron-weekly-newsletter/</guid><description>&lt;p&gt;Every Sunday, I send out &lt;a href="https://ma.ttias.be/cronweekly"&gt;a newsletter called cron.weekly&lt;/a&gt;
to over 10.000 subscribers. In this post, I&amp;rsquo;ll do a deep-dive into &lt;em&gt;how&lt;/em&gt; those mails get delivered to subscribers.&lt;/p&gt;</description></item><item><title>Deploying a highly-available K3s with K3sup</title><link>https://ma.ttias.be/deploying-highly-available-k3s-k3sup/</link><pubDate>Mon, 27 Apr 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/deploying-highly-available-k3s-k3sup/</guid><description>&lt;h2 id="introduction" class="heading-anchor-group"&gt;Introduction&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Some of members of the cloud-native computing world have recently been trying to find a way to address the areas where Kubernetes falls short when trying to run on resource constrained environments.&lt;/p&gt;</description></item><item><title>Clean up Linux Server Using These Simple Tips</title><link>https://ma.ttias.be/clean-up-linux-server-using-these-simple-tips/</link><pubDate>Sun, 26 Apr 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/clean-up-linux-server-using-these-simple-tips/</guid><description>&lt;p&gt;Deploying a Linux server is really easy these days thanks to the abundance of cloud server providers like Linode, Digital Ocean etc. This enables not-so-expert people, like me, to deploy and manage their own Linux servers.&lt;/p&gt;</description></item><item><title>Different ways of writing crontab syntax</title><link>https://ma.ttias.be/different-ways-of-writing-crontab-syntax/</link><pubDate>Sun, 26 Apr 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/different-ways-of-writing-crontab-syntax/</guid><description>&lt;p&gt;Here&amp;rsquo;s what I&amp;rsquo;ve been doing for most of my life, when it comes to writing &lt;code&gt;crontab&lt;/code&gt; entries:&lt;/p&gt;</description></item><item><title>Convert a PuTTY private key to openssh</title><link>https://ma.ttias.be/convert-putty-private-key-to-openssh/</link><pubDate>Sat, 22 Feb 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/convert-putty-private-key-to-openssh/</guid><description>&lt;p&gt;I recently got a PuTTY private key sent to me that I wanted to use to log into a remote server. But, I run OpenSSH, not PuTTY.&lt;/p&gt;</description></item><item><title>Accepting new sponsorships for the cron.weekly newsletter</title><link>https://ma.ttias.be/accepting-sponsorships-cron-weekly/</link><pubDate>Fri, 31 Jan 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/accepting-sponsorships-cron-weekly/</guid><description>&lt;p&gt;In case you&amp;rsquo;ve missed it: &lt;a href="https://ma.ttias.be/cronweekly/"&gt;the cron.weekly newsletter&lt;/a&gt;
is back!&lt;/p&gt;
&lt;p&gt;&lt;p&gt;
&lt;img src="https://ma.ttias.be/cronweekly/cronweekly-collage.png" alt="Example of cron.weekly" width="4000" height="1700" loading="lazy" /&gt;
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m about 6 issues in to the new season and I feel I&amp;rsquo;ve gotten a good flow going. The boring stuff is automated, the toolchain is solid and I&amp;rsquo;m enjoying writing once again. 💪&lt;/p&gt;</description></item><item><title>Dumping specific tables in MySQL using mysqldump</title><link>https://ma.ttias.be/dumping-specific-tables-mysql-mysqldump/</link><pubDate>Fri, 17 Jan 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/dumping-specific-tables-mysql-mysqldump/</guid><description>&lt;p&gt;Here&amp;rsquo;s a small little trick when using &lt;code&gt;mysqldump&lt;/code&gt;: you don&amp;rsquo;t &lt;em&gt;have&lt;/em&gt; to dump an entire database, you can dump individual tables too.&lt;/p&gt;</description></item><item><title>Auto-restart a crashed service in systemd</title><link>https://ma.ttias.be/auto-restart-crashed-service-systemd/</link><pubDate>Mon, 13 Jan 2020 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/auto-restart-crashed-service-systemd/</guid><description>&lt;p&gt;Systemd allows you to configure a service so that it automatically restarts in case it&amp;rsquo;s crashed.&lt;/p&gt;</description></item><item><title>What exactly is being sent to Ubuntu in the MOTD?</title><link>https://ma.ttias.be/what-exactly-being-sent-ubuntu-motd/</link><pubDate>Sat, 28 Dec 2019 00:00:00 +0000</pubDate><author>mattias@ma.ttias.be (Mattias Geniar)</author><guid>https://ma.ttias.be/what-exactly-being-sent-ubuntu-motd/</guid><description>&lt;p&gt;There&amp;rsquo;s &lt;a href="https://x.com/lelff/status/1210619413885575168" target="_blank" rel="noopener noreferrer"&gt;a tweet&lt;/a&gt;
going around in the last few days that highlights that Ubuntu&amp;rsquo;s default MOTD (&lt;em&gt;Message of the Day&lt;/em&gt;) fetches information from an Ubuntu server. In the process, it sends along quite a bit of personal &amp;amp; identifiable information of your desktop or server back to Ubuntu.&lt;/p&gt;</description></item></channel></rss>