My thoughts on Slackware, life and everything

Month: April 2018

Plasma5 – April 18 edition for Slackware

One of my previous posts discussed “ABI breakage” and how that affects software to the point where it breaks and you need to recompile stuff to un-break it. Well… last week was most likely another, bigger, surprise to many of you. The Slackware-current ChangeLog.txt update of “Thu Apr 19 01:04:06 UTC 2018” started with:

Hi folks, and welcome to the third ever Slackware Mass Rebuild (and the
longest ChangeLog entry in project history). There were two primary
motivations for rebuilding everything in the main tree. The first was to
switch to the new C++ ABI. The second was to get rid of all the .la files
in the LD_LIBRARY_PATH.

That was fun, seeing 1365 lines of ChangeLog and realizing how long the upgrade would take!
But in the end, this was a painless migration. WIth a simple “slackpkg update ; slackpkg upgrade slackpkg” to upgrade the slackpkg package itself. Don’t forget to check the new /etc/slackpkg/mirrors file to see if your mirror is still configured there! Followed by “slackpkg update ; slackpkg install-new ; slackpkg upgrade aaa_elflibs ; slackpkg upgrade-all” and a lot of patience. That’s about all there was to it and after a reboot the Slackware-current system would run as well as ever. A big accomplishment and hats off to Patrick Volkerding who used the past months to (mostly under the radar) update all the SlackBuild scripts and write wrappers to enable him to recompile all of Slackware from scratch, while gaining a lot on the efficiency and time management front. Kudos!

Ah well, a painless migration you heard me say…
Unless you have a ton of 3rd party software bolted onto your Slackware – like my Plasma5… because that came out pretty much broken. On the Slackware forum as well as here on the blog I already advised to hold off with upgrading for a day or so to give me the opportunity to at least recompile Plasma5.

And it so happened that the KDE developers already had all-new source code tarballs waiting for us. I compiled that on the freshly rebuilt Slackware-current and yesterday evening I uploaded my new set of Plasma5 packages to the ‘ktown‘ repository.
The KDE-5_18.04 release of ‘ktown‘ for Slackware-current offers the latest KDE Frameworks (5.45.0), Plasma (5.12.4) and Applications (18.04.0). The Qt5 was upgraded to 5.9.5. Read the README file for more details and for installation/upgrade instructions. Enjoy the latest Plasma 5 desktop environment.

So, what’s new?

  • I had to deal with a couple of packages that were broken after the massive upgrade in Slackware, so I took the opportunity to upgrade gpgme, mlt, poppler and qt5 to a newer version; and I added QScintilla to extend the package (already available in Slackware) with support for Qt5.
  • In plasma-extra the kdeconnect-framework package was updated.
  • Applications 18.04.0 is the start of a new round of improvements. Two new packages are available starting with 18.04: kamoso which is a webcam recorder, and a backup program kbackup. The instant messenger client Kopete was ported to KF5 and is contained in the source distribution, but I was unable to compile it. Perhaps more luck next month.
    Finally, the hex editor okteta moved to the ‘applications-extra’ section because its developer no longer wants to be tied to Application release windows.
  • In applications-extra I have upgraded the kdiagram and krita packages.

If you want to read more about the history of Plasma5 development for Slackware, with lots more detail, check out my older blog posts. If you think a git log is easier to read, check out my ktown git repository instead 🙂

If you are using slackpkg with the slackpkg+ extension, don’t forget to run “slackpkg install ktown” to get any new packages installed, because “slackpkg install-new” will not catch new packages in 3rd-party repositories like ‘ktown’.

I hope to get a new PLASMA5 variant of the Slackware Live ISO image out soon, containing all this new stuff! This depends on my ability to recompile LibreOffice 6.0.3 for 64bit. I ran into a bit of a snag there with gpgme-related compilation errors I have as of yet not been able to fix. Also, VLC3 needs a rebuild since that broke too… and I have not been able to find the time to address that.

Enjoy the new batch!

New package for qbittorrent, now based on Qt5

Not related per se to the fall-out of last weekend’s update to the icu4c and poppler packages, my qbittorrent package for slackware-current had stopped working sometime ago – caused by an update in -current of the boost package on which the torrent library depends.

I needed to update qbittorrent too therefore, after having taken care of the icu4c/poppler breakage. The thing is, I had tried to delay the switch in qbittorrent from Qt4 to Qt5 for as long as possible. The ‘new’ 4.x series of qbittorrent have a hard dependency on Qt5, and Qt4 is no longer supported. So I bit the bullet and made packages for bittorrent-4.0.4 and its dependency, libtorrent-rasterbar-1.1.6.
Since the program uses Qt5 now, the dependencies have changed. If you were running qbittorrent 3.x on slackware-current previously then you have to ensure that you have libxkbcommon, qt5 and qt5-webkit packages installed now.

For good times’ sake, I have kept the old SlackBuild scripts and sources but I renamed them to libtorrent-rasterbar10.SlackBuild and qbittorrent3.SlackBuild. If you want the old Qt4 based interface back, then compile the two packages using these SlackBuild scripts (first libtorrent-rasterbar, then qbittorrent). You can install either the new, or the old versions. They can not be co-installed.

Fun and games in -current when ABIs break

Oh my.
It was not an April Fools joke when the ChangeLog.txt of slackware-current mentioned the following (I left out the non-relevant package updates):

 

+--------------------------+
Sun Apr 1 02:53:26 UTC 2018
...
l/icu4c-61.1-x86_64-1.txz: Upgraded.
 Shared library .so-version bump.
...
l/poppler-0.63.0-x86_64-1.txz: Upgraded.
 Shared library .so-version bump.

All of us  who follow Slackware’s development know that “shared library version bump” means ABI breakage. I.e. a lot of 3rd-party binaries will suddenly not find required library versions anymore. In particular icu4c and poppler are nasty beasts. Slackware’s own packages had been carefully updated and recompiled where needed of course, so there was no breakage in the distro itself. But many people do not run a bare Slackware installation… a lot of software is usually installed on top. And that is the software which will be affected by an incompatible change like this one on April 1st.

What’s this  version bump all about? How is it possible that it affects your computer so deeply?

Most programs depend on other programs. Software developers hate to re-invent the wheel if they can avoid it. Lots of lower-level or widely used functionality has been put into software libraries. Think of network access functionality, text rendering, encryption etc – smart people have created useful, efficient and robust software and stuffed that code into libraries. Your own program can link against these libraries at run-time and access the functionality they have to offer and your program needs.
If many programs link to the same libraries, that reduces the memory footprint because a library has to be loaded into memory only once even if many programs are using it. These libraries are therefore called ‘shared libraries‘ or ‘shared objects‘ (hence the extension ‘.so‘) or also dynamic libraries. For this dynamic linking to work, programs use binary interfaces at runtime that were established when the program was compiled and linked.
A shared library version only needs to change if the Application Binary Interface (ABI) changes. When that happens, all binaries that depend on the library need to be recompiled to adjust to the new ABI.
Among others, an ABI depends on the machine architecture, and on the toolchain (compiler, linker) used to generate the binary code from its sources. An ABI guarantees binary compatibility: the program will work on every machine with the same ABI, without a need for recompilation.

When will an ABI usually change?

One case is when the library’s API (Application Programming Interface, i.e. the way in which access to the library routines is defined in its source code) changes. This mostly occurs in software that is not yet stable and where its programmers add new functionality or revise the methods of calling the library’s functionality. Mature software on the other hand has a well-defined API which is rarely subject to change.

Another case is when the toolchain is updated. Slackware’s toolchain has been very stable and ABI changes have seldomly been introduced. As an example, Patrick talks about the a.out to ELF migration and the libc5 to glibc migration in a 2012 interview.

So why does well-established software like icu4c and poppler change their ABI almost on every minor release, thereby pissing off a really large crowd? You tell me. Arrogance or sloppiness, but let’s attribute it to bad project management. Because it probably could have been avoided in many if not all cases.

Anyway, some of you upgraded first to this new batch of updates in -current, then found out that some 3rd party packages stopped working, and then started looking for a cause.
Folks: if you are running slackware-current, you always check the ChangeLog.txt first. And if you spot a “shared library version bump” you stop right there and assess the situation. Some friends on LinuxQuestions were a bit more vocal about the way they had found themselves at a dead Plasma5 screen… others understood the situation better and and realized they had to wait for 3rd party packagers to update their repositories instead of assuming ill will.
If you are unable to cope with this kind of occasional breakage, use a stable Slackware release. That’s what all of us have been telling you all along.

My packages have been affected as well:

  • Plasma 5 stopped working,
    The fix is to recompile several packages among which a number of big ones: qt5, qt5-webkit and calligra. That means, you will have to have patience. The 64bit repository has been updated in the meantime. After upgrading from my ‘ktown’ repository your Plasma5 will again be fully functional. The 32bit repository updates will hopefully follow tomorrow have been uploaded now. I had to restart the 32bit qt5 compilation because of an internal compiler error halfway.
    The updated Plasma5 will even have some new functionality – since i slipped in the KMymoney program which otherwise would have been introduced at the April update of ‘ktown‘.
  • LibreOffice stopped working.
    The 64bit packages have been recompiled. They have been updated actually since there was a micro source version bump from 6.0.3.1 to 6.0.3.2 yesterday – my luck! The 32bit packages have to wait until after ‘ktown‘ updates have been completed and then I will upload them. New libreoffice packages for -current are now available.
  • Pale Moon stopped working.
    I was able to recompile the packages inbetween the Plasma5 compilation because it only takes little time. The updated palemoon packages are already in my repository.
  • Calibre stopped working.
    This will have to wait until after all the other updates New calibre packages for -current are now available..

And probably other stuff is broken too but I have not yet spotted that. If you find breakage, please report it so that I can recompile the package.

© 2024 Alien Pastures

Theme by Anders NorenUp ↑