Qt has a soft dependency on systemd
Qt is a very very quick growing framework written on top of C++
Most Linux users know it because of the KDE desktop environment.
Obarun maintains a version of qt5-base for us which does not pull libsystemd. It provides this fork in the repository
obextra.
To avoid possible breaks especially on KDE based systems make sure to always wait for the devs to match the current upstream qt5‑base package version in the obextra repo before you update your system. If you don't and update upstream Qt before Obarun base release, you will get a version mismatch and Qt will completely break.
This means that whenever you do your daily 'sudo pacman -Syyu' and
any qt5 version updates pop up—even the minor ones (as in super.major.minor-1)—
immediately back up and cancel out.
Make absolutely sure that the current obextra/qt5-base is on par with the upstream version that wants to get updated. You can do this by either reading through the packages that pacman wants to update and double check that qt5-base is also mentioned and has the correct version or by issuing:
marian@ obarun ~ % sudo pacman -Ss qt5-base
obextra/qt5-base 5.x.0-2 (qt qt5) [installed]
A cross-platform application and UI framework
extra/qt5-base 5.x.1-1 (qt qt5) [installed: 5.x.0-2]
A cross-platform application and UI framework
Note how Obarun will always up the Arch upstream identifier from x.y-a to x.y-(a+1) and how pacman tells you that you are behind upstream.
Only make the update once these two match (as in versioning, you do not need to care for the identifying bit). The Obarun dev team usually tries to sync these as fast as they can.
For your convenience
I created a
pacman hook that will prevent your update from actually installing if qt5-base has a version mismatch. This link takes you to the post with very short instructions on how to set it up. Read the whole thread for insight on how it works.
If you messed up already
(like me) and as a workaround for future breaking releases here is what you can do to
get a working system back in just a few minutes with three simple commands and a very neat AUR program. If your desktop is already messed up open this guide on a different device and carefully follow the instructions.
1) Get to
know what Qt packages got updated last. Change to the rescue shell tty12—or any other working tty—and log in with your user. Apparently you may additionally do this from within any desktop environment that does not rely on Qt and is installed on your system. Then
read the last lines of the pacman log to see what packages got updated the moment before your system broke.
By referencing the time stamps you will clearly understand what packages got updated last. The below example is from an update that occurred (and broke my system) on June 17th of 2019:
marian@ obarun ~ % grep -i upgraded /var/log/pacman.log
[2019-06-17 10:49] [ALPM] upgraded dbus (1.12.12-2 -> 1.12.14-2)
[2019-06-17 10:49] [ALPM] upgraded device-mapper (2.02.184-5 -> 2.02.185-2)
[2019-06-17 10:49] [ALPM] upgraded freerdp (1:2.0.0_rc4-5 -> 1:2.0.0_rc4-6)
[2019-06-17 10:49] [ALPM] upgraded qt5-script (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-x11extras (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-multimedia (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-speech (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-svg (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-declarative (5.12.3-2 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded lvm2 (2.02.184-5 -> 2.02.185-2)
[2019-06-17 10:49] [ALPM] upgraded kscreenlocker (5.15.5-2 -> 5.16.0-2)
[2019-06-17 10:49] [ALPM] upgraded libmm-glib (1.10.0-2 -> 1.10.2-2)
[2019-06-17 10:49] [ALPM] upgraded modemmanager (1.10.0-2 -> 1.10.2-2)
[2019-06-17 10:49] [ALPM] upgraded php (7.3.5-2 -> 7.3.6-2)
[2019-06-17 10:49] [ALPM] upgraded php-apache (7.3.5-2 -> 7.3.6-2)
[2019-06-17 10:49] [ALPM] upgraded php-fpm (7.3.5-2 -> 7.3.6-2)
[2019-06-17 10:49] [ALPM] upgraded qt5-graphicaleffects (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-imageformats (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-location (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-quickcontrols (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-quickcontrols2 (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-sensors (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-tools (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-wayland (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-webchannel (5.12.3-1 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-webengine (5.12.3-2 -> 5.12.4-1)
[2019-06-17 10:49] [ALPM] upgraded qt5-webkit (5.212.0alpha2+156+g95401fe3908-1 -> 5.212.0alpha2+156+g95401fe3908-3)
[2019-06-17 10:49] [ALPM] upgraded xorg-server-common (1.20.4-2 -> 1.20.5-2)
[2019-06-17 10:49] [ALPM] upgraded xorg-server (1.20.4-2 -> 1.20.5-2)
[2019-06-17 10:49] [ALPM] upgraded xorg-server-xwayland (1.20.4-2 -> 1.20.5-2)
2) Install the AUR package "downgrade"; use your favorite AUR helper or build yourself:
pikaur -S downgrade
3) Double
check what packages are the ones you need to downgrade. The following method of daisy chaining grep may not be the cleanest looking command but it does two things; It looks up all repositories for any package with the version number you just updated (and broke your system) and then only shows packages that really are installed. This has the added benefit that it also shows the version mismatch between upstream qt5-base and your installed qt5-base version.
The following command uses the version mismatch from my example from June 17th of 2019. Yours will be a different version if you're reading this. Be mindful while doing this.
marian@ obarun ~ % sudo pacman -Ss qt | grep 5.12.4-1 | grep installed
extra/qt5-base 5.12.4-1 (qt qt5) [installed: 5.12.3-3]
extra/qt5-declarative 5.12.4-1 (qt qt5) [installed]
extra/qt5-graphicaleffects 5.12.4-1 (qt qt5) [installed]
extra/qt5-imageformats 5.12.4-1 (qt qt5) [installed]
extra/qt5-location 5.12.4-1 (qt qt5) [installed]
extra/qt5-multimedia 5.12.4-1 (qt qt5) [installed]
extra/qt5-quickcontrols 5.12.4-1 (qt qt5) [installed]
extra/qt5-quickcontrols2 5.12.4-1 (qt qt5) [installed]
extra/qt5-script 5.12.4-1 (qt qt5) [installed]
extra/qt5-sensors 5.12.4-1 (qt qt5) [installed]
extra/qt5-speech 5.12.4-1 (qt qt5) [installed]
extra/qt5-svg 5.12.4-1 (qt qt5) [installed]
extra/qt5-tools 5.12.4-1 (qt qt5) [installed]
extra/qt5-wayland 5.12.4-1 (qt qt5) [installed]
extra/qt5-webchannel 5.12.4-1 (qt qt5) [installed]
extra/qt5-webengine 5.12.4-1 (qt qt5) [installed]
extra/qt5-x11extras 5.12.4-1 (qt qt5) [installed]
4) Downgrade all of these with the "downgrade" program you just installed in one go making use of bash bracket expansion (make sure you're in bash...). Your packages might differ depending on your installed system.
Only downgrade packages that are installed on your system. Do not copy/paste the following command. Stay focused!
marian@ obarun ~ % sudo downgrade qt5-{declarative,graphicaleffects,imageformats,location,multimedia,quickcontrols,quickcontrols2,script,sensors,speech,svg,tools,wayland,webchannel,webengine,x11extras}
Downgrade will ask you for each package individually to which version you want to downgrade (accessing local and remote packages).
Make absolutely sure you are only downgrading to your current qt5-base version from obextra/qt5-base!
Don't get packages mixed up. Don't downgrade anything you don't know the effects. Additionally after downgrading you will be asked if you want to add each package separately to the ignore list (which you probably don't). Nice little program.
After the downgrade everything should be mostly back to normal and you might reboot your system as usual.
Note that some configuration files might have been changed and some changes might not completely revert. Also individual programs and packages might have been updated to depend on this new version and might still break. Usually this will restore your KDE or similar Qt based desktop environments though.
Congratulations! You got your system back for now. Next time wait for Obarun to push qt5-base to obextra.
—This was originally written on June 17th of 2019 when it first happened to me with the upgrade to Qt v5.12.4.