Hi, today I do apt update && apt dist-upgrade to install some new software. Some qt6 and qml6 packages got upgraded along the way.
Then after a reboot, I got black screen.
I switch to another TTY to find out what was happened.
After digging through a ton of syslog in journalctl -b , it turns out kwin-wayland is crashed due to version mismatch of Qt6 : some package is Qt 6.8.0 and the rest is Qt 6.7.2
I banged my head to the wall then write a fukin long oneliner to loop through all installed packages with version 6.8.0, dig for the exact version string of its 6.7.2 in apt-cache. And finally concatenate them into a single apt install --reinstall
For god sake it works. All Qt6 packages go back to 6.7.2 and plasma works again.
Now I run apt list --upgradable and get the culprit:
$ apt list --upgradable
Listing... Done
libqt6core6t64/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
libqt6dbus6t64/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
libqt6gui6t64/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
libqt6network6t64/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
libqt6printsupport6t64/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
libqt6sql6-sqlite/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
libqt6sql6t64/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
libqt6svg6/noble,noble 6.8.0-0zneon+24.04+noble+release+build3 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build1]
libqt6widgets6t64/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
libqt6xml6t64/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
qml6-module-qt-labs-folderlistmodel/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qt-labs-platform/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qt-labs-qmlmodels/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qt-labs-settings/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtqml-models/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtqml/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtquick-controls/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtquick-dialogs/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtquick-layouts/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtquick-particles/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtquick-templates/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtquick-window/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qml6-module-qtquick/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qt6-base/noble 6.8.0-0zneon+24.04+noble+release+build8 amd64 [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
qt6-declarative/noble 6.8.0-0zneon+24.04+noble+release+build8 amd64 [upgradable from: 6.7.2-0zneon+24.04+noble+release+build2]
qt6-gtk-platformtheme/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
qt6-qpa-plugins/noble,noble 6.8.0-0zneon+24.04+noble+release+build8 all [upgradable from: 6.7.2-0zneon+24.04+noble+release+build4]
qt6-serialport/noble 6.8.0-0zneon+24.04+noble+release+build2 amd64 [upgradable from: 6.7.2-0zneon+24.04+noble+release+build1]
qt6-shadertools/noble 6.8.0-0zneon+24.04+noble+release+build2 amd64 [upgradable from: 6.7.2-0zneon+24.04+noble+release+build1]
qt6-svg/noble 6.8.0-0zneon+24.04+noble+release+build3 amd64 [upgradable from: 6.7.2-0zneon+24.04+noble+release+build1]
qt6-tools/noble 6.8.0-0zneon+24.04+noble+release+build8 amd64 [upgradable from: 6.7.2-0zneon+24.04+noble+release+build1]
Please, could anyone tell me how this partial upgrade got pushed to me and break my desktop ? Itās supposed to have a meta package to force all Qt6 packages to a single version, right ?
The 6.8.0 release of Qt was pushed to the release channel before all the packages that depend on it were built to match - which will break everything that link to Qt and unfortunately is a common occurrence in Neon.
The problem is that the automated Debian build scripts that KDE Neon uses like to add >= dependencies - for example, the current kwin-wayland package has this dependency: Depends: qt6-base (>= 6.7.2) - but Qt doesnāt work that way: when you build against a Qt, only that very specific version that you built again will allow your app to start. If the system has any other version - even a minor change - Qt will reject it and it will not run. The correct dependency should be == and if that were the case - you would not have been able to upgrade to Qt 6.8 until all the required dependent packages got upgrades pushed as well.
I think thereās already an open ticket about this issue on Neon, but Iāll check to make sure.
To recover, do this - in your terminal (run each command, and stop if you get unexpected errors):
mkdir tmp-qt6-downloads && cd tmp-qt6-downloads
dpkg -l '*qt6*' | grep 6.8 | grep ii | awk '{print$2}' | while read pkg; do
ver="$(apt policy $pkg 2>/dev/null | awk '$1~/6.7.2/{print$1}' | head -n1)";
[ -n "$ver" ] && apt download "$pkg=$ver";
done
sudo dpkg -i *
sudo apt-mark hold qt6-base
That should fix up your system, and prevent a Qt 6.8 upgrade. You have to monitor the situation and check when Neon has updated with correct builds so you can unhold Qt 6 and get the upgrade running properly.
If I understand it correctly you are using the developer version of KDE Neon, which is the most unstable (developer->unstable->testing->user), you shouldnāt use that if you lack the technical skills to get out of a situation not intended for you.
Sorry, donāt even know what these channels mean. Is that a concept of PackageKit ?
Oh yes, itās just, pkcon bugs me out of joy, the experience is far from what the good ol apt offers. And Neon block apt upgrade so I just do apt dist-upgrade.
This is the solution, also thanks for your explanation . Anyway, this morning I already got the complete update of Qt 6.8 and it works.
Glad to get community support on this, now the time for confession: I got this Neon desktop not by installing it. Instead, I use a running PopOS system and add Neon apt source to it, for a feature I need.
That time I have had to fight some package conflicts but finally apt get to a consistent state and everything works fine.
So really donāt know which Neon version Iām on.
The /release part of the URL means that you are on the āreleaseā channel - which is one step less stable than the āuserā channel - so pretty alright.
I have used Neon sources on Ubuntu releases a lot, and itās a way to get more features that you donāt get in the LTS base, but itās not tested and support for it is basically: if it breaks - you get to keep both parts.
Then you shouldnāt have used the āNeonā tag, you are basically using and maintaining in a custom way aā¦ custom Frankenstein OS made by mixing very old (LTS) and very new (still in development) packages -that even Neon users donāt use- with each other. You can count on continuing having dependency problems in the future, but Iām not so sure that you can count on community help by lying and stretching it so much.
Yes, the /release channel is not guaranteed to have all required and production-ready packages at all times. After some packages are built, they land in the /release repository. However, when new versions of Frameworks, Gear Apps, Plasma, or Qt are released, they contain a large number of packages that are not added to the /release channel all at once. This is why you may occasionally experience a āpartialā upgrade, which can potentially break your system.
For daily and production use, stick with the default /user channel, which provides stable updates delivered to all users through regular updates.
It is often useful to have the more stable channels listed in your repo file as well, to make sure that apt can fallback to a working stable package if there are packaging inconsistencies in development channels.
My sources file for running on Neon testing looks like this:
X-Repolib-Name: KDE neon noble testing
Types: deb deb-src
URIs: http://archive.neon.kde.org/user http://archive.neon.kde.org/release http://archive.neon.kde.org/testing
Suites: noble
Components: main
Architectures: amd64
Signed-By: /etc/apt/keyrings/neon-archive-keyring.asc
Nice knowledge, I edited the apt source from /release to /user and got a flawless upgrade.
Guess thatās hard to tell which one is more stable just by looking at their names. Now I understand:
/user is for the user, to get the final release
/release is the ground for doing the release process itself