Was ist der Zweck von /usr/lib/.build-id/ dir?

10

Nach einer neuen Instanz von f27 (netinstall) bemerkte ich, dass viele pkgs winzige Dateien in /usr/lib/.build-id/dir ablegen . Am 1. dachte ich, ich hätte irgendwie einen obskuren "Debug" -Modus für dnf aktiviert, aber sogar

$ dnf download httpd

ruft eine Drehzahl mit /usr/lib/.build-id/*Dateien ab.

Ich erinnere mich nicht daran in den vorherigen Fedora-Rel.

ein müder Kerl
quelle
rpm --query --file /usr/lib/.build-idlistet eine Menge Pakete "besitzen" /usr/lib/.build-id... seltsam.
David Tonhofer

Antworten:

20

/usr/lib/.build-identhält die wichtigsten Build-ID-Dateien für installierte Pakete. Vor Fedora 27 /usr/lib/debugbefanden sich diese neben den Debug-Dateien in und wurden nur in Debug-RPMs ausgeliefert. In Fedora 27 wurde eine Änderung eingeführt , um die parallele Installation mehrerer Debug-Info-Pakete zu ermöglichen. Ein Teil dieser Änderung besteht darin, die wichtigsten Build-ID-Dateien in dem Paket zu versenden, mit dem sie übereinstimmen, um sicherzustellen, dass sie mit den installierten Binärdateien übereinstimmen.

Debug-Info-Pakete werden in vielen Distributionen verwendet, um Benutzern die Möglichkeit zu geben, Debugging-Informationen bei Bedarf zu installieren, ohne die Binärdateien für alle aufzublähen. Wenn ein Programm oder eine Bibliothek erstellt und verknüpft wird, kann es mit Debugging-Informationen erstellt werden, mit denen Debugger dann Positionen in der Binärdatei mit Positionen im Quellcode zuordnen können. Diese Informationen nehmen jedoch viel Platz ein. Daher werden Debugging-Informationen normalerweise aus den Binärdateien entfernt, bevor sie gepackt werden. In der letzten Jahren stripund objcopywurde erweitert , so dass Debug - Informationen extrahieren und separat gespeichert werden können - das ist , wie Debug - Info - Pakete erstellt werden. Alles, was dann benötigt wird, ist eine Möglichkeit, um sicherzustellen, dass eine Binärdatei und ihre Debug-Informationen übereinstimmen, und hier kommen Build-IDs ins Spiel - sie sind eindeutige Bezeichner, die von berechnet werdenld(suchen Sie --build-iddort) über die signifikanten Teile einer Binärdatei. "Haupt-Build-ID-Dateien" sind Symlinks von einer Build-ID zur entsprechenden Binär- oder Debug-Info-Datei. Sie ermöglichen die Implementierung von bidirektionalen Zuordnungen, sodass Core-Dumps sinnvoll debuggt werden können (es gibt eine Verknüpfung von Binärdateien zu ihren Build-IDs in den Binärdateien selbst im .gnu_debuglinkAbschnitt). Eine ausführliche Erklärung der Gründe dafür finden Sie in der Beschreibung der Fedora-Build-ID-Funktionen .

Stephen Kitt
quelle