Boot encrypted Linux from GRUB

So I just had a very unpleasent system hang during a kernel upgrade which lead me to being dumped into the GRUB shell - on Sunday evening at 10 pm. And I need my laptop tomorrow… Well, let’s do this! I have three partitions on my (single) drive: /dev/sda1: MBR /dev/sda2: /boot partition /dev/sda3: /root partition, encrypted, mounted as /dev/mapper/sda3_crypt First we need to tell GRUB which Linux image (vmlinuz) we’ll be using and which partition the kernel mounts as its root partition.

Sequential Unit Startup in Systemd

At work we are running some (new) nodes in Puppet Masterless mode. This means instead of querying a Puppet server, they collect the resource and compile the code themselves before applying it. That requires having the Puppet and Hiera code present on the machine, for which we use g10k (a blazing fast reimplementation of r10k in Go) and a custom postrun for linking the appropriate modules in each environment. To run and regularly execute these tasks, we deployed systemd services and timers.

Xiaomi Mi A1 LineageOS with microG

After getting my Xiaomi Mi A1 Global (tissot) I immediately wanted to install LineageOS 15.1 with microG on the device. After a few hours of research, I found the necessary steps for a successful installation. Special thanks go to heinhuiz for the complete instructions and abhishek987 for the TWRP port! If you have installed a custom ROM before, I recommend flashing the stock ROM again before starting this guide.

Synology NAS: Samba, NFS and Kerberos with FreeIPA LDAP

This work is a collaboration with my colleague Markus Opolka (@martialblog). Since we migrated our old, hacky LDAP server to a completely new FreeIPA instance, authenticating Samba and NFS users with the new LDAP server (provided by FreeIPA) was no longer possible. As we don’t have that many users, the short-term fix was to locally create the required accounts on the Synology NAS. This has the disadvantage of splitting the password management, so we wanted to fix it.


Sometimes you just need some motivation - in the morning, during the day or in the evening. Here, take this poster: Motivation Poster SVG, Motivation Poster PDF, Licensed under CC-0 (Public Domain). These are the quotes used: Discipline is Greater than Motivation. – Elliot Hulse No pain, no gain. – Arnold Schwarzenegger Success is not about the money, the fame or the big house. It’s about becoming THE BEST VERSION OF YOURSELF.

Real Life

Judge: When was the first time you met in real life? Peter Sunde: We don’t use that expression. We say AFK - we think the internet is for real. My blog mostly deals with software and hardware, i.e. the stuff computers are made of. And though one of my favorite quotes addresses how real the internet (the construct a network of computers forms) is, sometimes you really have to do something in “real life”.

netcats: libvirt Remote Daemon over SSH

For one of my university courses, I need to run a virtual machine with Kali Linux. Because it is 2018, my laptop is not really fast enough for a VM, I like cloud technology and I love tinkering with stuff, I wanted to use libvirt’s remote support to run the virtual machine on one of my cloud servers. First, I installed libvirt by apt-get installing libvirt-daemon libvirt-daemon-system qemu-kvm. Since I already have an SSH connection to the host set up, I chose the SSH transport, but got the following error message from virt-manager:

Continuous Blog Deployment: Self Hosted Edition

Initially, I wanted to run my blog from a single LXC container, set up with a web server, a static-site generator and my editor. The idea behind this was to be able to log in via SSH from anywhere remotely, write a blog post and directly publish it. This would have had the advantage of only maintaining a single instance of the blog. The clients (i.e. my computers) would not need to have any kind of local setup (web server, site generator, editor), apart from an SSH client.

Remove Nextcloud Share from Database

My Nextcloud instance is currently suuuuper slow, because one of the federated Nextcloud instances that has shared a file with me is offline. Apparently, this issue has been addressed a long time ago, but I’m still having this problem. When I try to “unshare” the file in the Web GUI, I simply get (after a looong wait) the error message Error deleting file "xyz".. The HTTP DELETE operation sent to the backend returns with a 503 Service Unavailable, as well as some WebDAV exception in XML.

Retrieve latest tag from GitHub with Go

To monitor the latest activity of Git repositories, I was using the go-github golang package to interface with GitHub’s API. While the package API is very rich and powerful, I was still missing one feature: just getting the latest tag of a specific repository. It does have an option to get the latest release, which is GitHub’s way of promoting a tag, however these are not native to Git itself.