Updates on userrepository

Since the last post about my Arch (and Arch-compatible distributions) binary repository, I’ve added a few more packages. Some examples are the Mullvad VPN desktop client and nimdow, a window manager written in the Nim programming language. Or Emptty, an amazing display manager that I encourage you to try.

Despite adding more packages, the compilation and compression time only had a small increase and I’m still below the 5 hour mark. And I’ve kept the zstd “-12” compression level.

Right now, I’m doing a full build to time it again. If it keeps below the 5 hour mark, I’ll try to increase the compression level to “-15” to see if the trade-off is worth it. If so, you’ll have smaller packages, allowing you to save bandwidth.

I’ll keep you updated as soon as I make the change. But that might take a few days, because work and stuff.

One last thing: please become a Patron if you want to support Even €1 will help cover the monthly expenses, just over €15. If I get enough patrons, I’ll be able to upgrade the virtual machine to one with better specs, which will allow a higher package compression level, shorter build times and maybe even packaged kernels. Thank you! 🙂

Geekices is back (in beta)

After a small forced hiatus, is back. The Covid-19 pandemic made a hit in my income and the wife’s income, so I had to temporarily suspend non-priority expenses. During this period, I had time to consider a few things about the future of the project and decided to change the provider from Scaleway to Hetzner, mostly because the Arch image they’re using is essentially abandonware.

If you’re reading this, you’ll probably know that Arch Linux changed the default package compression to ZSTD. In order to update or install any package, you’ll need a pacman version that supports this compression and up-to-date libraries. These requirements aren’t met in older Arch images, like the one used by Scaleway, so the only two solutions were installing another distribution, chrooting into it and hack an Arch install (the solution presented to me by Scaleway support) or change provider. The second option was the less time-consuming one.

Hetzner doesn’t provide Arch by default when creating a virtual manchine, but after creating it the user can boot it in rescue mode and run the installimage script that makes the process almost a breeze. After running the script, I advise you to manually chroot and temporarily allow root logins for the SSH daemon in order to be able to login remotely after booting the VM normally.

The virtual machine configuration I chose has similar specs to the previous one with Scaleway: 4vCPUs and 8GB of RAM. In the first few hours of use, I noticed a small improvement in package compile times – but this is just my perception; I have yet to time the build times. But even things like refreshing the repository package list is faster, way faster, and that’s really noticeable.

For the time being, I’ll consider in beta state, so use it with some degree of carefulness. The source is the same, but I changed the provider and I’m evaluation the virtual machine and network performance. Let’s see how it goes.


Improving boot time

Today, I’ve decided to try and improve the boot time of my laptop, running EndeavourOS. There was no special reason for it other than “Why not?”.

The first thing I made was disabling or masking the following systemd services:

  • systemd-resolved disabled
  • tlp disabled
  • NetworkManager-wait-online disabled
  • lvm2-monitor masked
  • org.cups.cupsd disabled
  • packagekit masked
  • bluetooth disabled (I rarely use the laptop’s bluetooth)
  • blueman-mechanism disabled

With this, I was able to save a few milliseconds and decrease the enabled systemd units to 15, but the impact was negligible.

brunomiguel@kepler: ~
└─ $: systemctl list-unit-files --state=enabled --no-pager
autovt@.service enabled disabled
avahi-daemon.service enabled disabled
dbus-org.freedesktop.Avahi.service enabled disabled
dbus-org.freedesktop.nm-dispatcher.service enabled disabled
display-manager.service enabled disabled
getty@.service enabled enabled
haveged.service enabled disabled
NetworkManager-dispatcher.service enabled disabled
NetworkManager.service enabled disabled
sddm.service enabled disabled
systemd-swap.service enabled disabled
unbound.service enabled disabled
avahi-daemon.socket enabled disabled enabled enabled
roothints.timer enabled disabled

15 unit files listed.

To further improve the boot time, I tested bfq, kyber and mq-deadline I/O schedulers. From the three, the last one allowed to shave off another few milliseconds to the boot time. Next, and last, I changed the mkinitcpio ramdisk compression to lz4 with the default compression options.

With this changes, I went from 17.040 to 15.511 seconds, decreasing a bit more than one and an half seconds in the boot time.

brunomiguel@kepler: ~
└─ $: systemd-analyze time
Startup finished in 10.145s (firmware) + 1.616s (loader) + 2.027s (kernel) + 3.250s (userspace) = 17.040s reached after 2.934s in userspace

brunomiguel@kepler: ~
└─ $: systemd-analyze time
Startup finished in 10.175s (firmware) + 686ms (loader) + 2.041s (kernel) + 2.608s (userspace) = 15.511s reached after 2.529s in userspace

In the future, I might replace GRUB2 with systemd-boot, possibly decreasing the boot time even more.

This was tested in a AMD A9-9420 CPU with the linux-zen kernel. Your mileage may vary depending on your hardware.


Updates to Jarvis, my Arch buildbot

My Arch buildbot, Jarvis, received an update today in the options logic. Now, it can receive an argument in the add (-a) and delete (-d) options, so the user can specify the package to add or delete.

The option to add a package, for now, only works for AUR. If you want to add a package that’s not in AUR, you’ll need to manually add the submodule. In the future, Jarvis will allow you to use a git repository with a PKGBUILD file.

Tony Stark would be jealous. 😉