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.
Jau – ich hatte schon angefangen, panisch nach Lösungen zu suchen ;).
Danke erst einmal für den Beitrag. 🙂
Statt
habe ich
verwendet, dann erhält man auch eine Copy&Paste-freundliche Ausgabe! 😉