Mal eine kleine Ankündigung für alle Nutzer von Arch Linux oder Arch-Derivaten wie Antergos oder Manjaro, die nicht die Arch Linux News lesen oder die Arch Linux Announcements als Mailingliste abonniert haben und daher nicht mitbekommen, dass viele Arch-Nutzer eventuell ein wenig Hand ans System anlegen müssen. Der Hintergrund ist das Update von GCC 5.2 auf die Version 5.3. Dieses Update macht es aufgrund der Umstellung auf eine „Dual-ABI“ erforderlich, dass sämtliche C++-Anwendung neu gebaut werden müssen. Bei aus den normalen Paketquellen installierten Programmen und Bibliotheken erledigen dies die Arch-Entwickler, sodass aktuell viele Updates bei Arch anstehen. Habt ihr allerdings Programme aus dem AUR oder manuell installiert, dann müsst ihr diese nochmal neu bauen.

Wer aktuell auf seinem Arch- oder Antergos-System anstehenden Updates installiert, dem wird mit Sicherheit auffallen, dass derzeit die Pakete zahlreicher Anwendungen ein Update bekommen, auch wenn diese Upstream gar keine Aktualisierung erfahren haben. Der Grund dafür liegt in dem eingangs angesprochenen Update auf GCC-5.3.0 mitsamt einer Dual-ABI libstdc++, das das Rekompilieren sämtlicher C++-Anwendungen erforderlich macht. Auf diesen Umstand weisen die Arch Linux News sowie aber auch das Antergos-Blog hin, entsprechende Arbeiten stehen auch bei anderen Arch-Derivaten wie etwa Manjaro an.

https://antergos.com/blog/c-abi-rebuild/

$ sudo pacman -Syyu
[...]
            frei0r-plugins-1.4-3  gcc-libs-multilib-5.3.0-2
            gcc-multilib-5.3.0-2  gimp-ufraw-0.22-4  git-2.6.4-1
[...]
            wireshark-gtk-2.0.0-2  zeromq-4.1.3-4

Gesamtgröße des Downloads:                 303,05 MiB
Gesamtgröße der zu installierenden Pakete:  1102,65 MiB
Größendifferenz der Aktualisierung:          1,19 MiB

Üblicherweise reicht die Installation der ganz normalen Arch-Updates aus, um das System auf die neue ABI umzustellen — Ihr müsst also keine Angst haben, euer System kaputtzumachen. Allerdings gibt es viele Arch-Nutzer, die auf Pakete aus den Arch-User-Repositories (kurz AUR) zurückgreifen. Damit diese weiter ohne Komplikationen funktionieren, müsst ihr diejenigen AUR-Pakete, die aus den C++-Quellcode gebaut wurden, noch einmal neu kompilieren. Nun könntet ihr sämtliche AUR-Pakete identifizieren und neu einspielen, mit folgendem Skript erspart ihr euch allerdings etwas Arbeit.

#!/bin/bash

while read pkg; do
    mapfile -t files < <(pacman -Qlq $pkg | grep -v /$) grep -Fq libstdc++.so.6 "${files[@]}" 2>/dev/null && echo $pkg
done < <(pacman -Qmq)

Übertragt den Inhalt des Skripts in einen Editor und speichert die Datei beispielsweise als /tmp/abi ab. Anschließend führt ihr das Skript mit bash /tmp/abi aus. Als Ergebnis erhaltet ihr eine Liste mit sämtlichen aus dem AUR installierten Anwendungen, die mit C++ gebaut wurden und somit nun aktualisiert werden müssen. Hier nutze ich pacaur als AUR-Helper, selbstverständlich funktioniert dies auch mit yaourt und Co. Bevor ihr mit dem Bauen beginnt, achtet bitte darauf, dass ihr sämtliche Pacman-Updates installiert habt, sonst macht die Aktion keinen Sinn.

$ bash /tmp/abi
aftershotpro
fritzing
google-chrome
[...]
obs-studio
$ pacaur -S aftershotpro fritzing google-chrome [...] obs-studio

//PS: Führt ihr das Skript nach dem Rekompilieren noch einmal neu aus, dann wird es wieder dasselbe Ergebnis ausspucken. Lasst euch davon nicht verwirren: Das Skript prüft nur, welche AUR-Pakete die libstdc++ nutzen, das ändern sich durch das erneute Bauen der Pakete nicht.

2 Kommentare

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein