Jaki jest cel /usr/lib/.build-id/ reż?

10

Po świeżym instancji f27 (netinstall) zauważyłem, że wiele pkgs umieszcza małe pliki w /usr/lib/.build-id/reż. Na początku myślałem, że w jakiś sposób włączyłem jakiś niejasny tryb „debugowania” dla dnf, ale nawet

$ dnf download httpd

pobiera w nim /usr/lib/.build-id/*pliki rpm z / .

Nie przypominam sobie tego w poprzednich relacjach Fedory.

zmęczony facet
źródło
rpm --query --file /usr/lib/.build-idwymienia mnóstwo paczek „posiadających” /usr/lib/.build-id... dziwne.
David Tonhofer,

Odpowiedzi:

22

/usr/lib/.build-idzawiera główne pliki id kompilacji dla zainstalowanych pakietów. Przed Fedorą 27 pliki /usr/lib/debugte znajdowały się obok plików debugowania i były dostarczane tylko w RPM debugowania. W Fedorze 27 wprowadzono zmianę umożliwiającą równoległą instalację wielu pakietów informacji debugowania. Część tej zmiany wiąże się z wysyłką głównych plików identyfikatora kompilacji w pakiecie, do którego pasują, aby upewnić się, że pasują one do zainstalowanych plików binarnych.

Pakiety informacji debugowania są używane w wielu dystrybucjach, aby umożliwić użytkownikom instalowanie informacji debugowania w razie potrzeby, bez rozdęcia plików binarnych dla wszystkich. Kiedy program lub biblioteka jest budowana i łączona, można ją zbudować z informacjami debugowania, których debugery mogą następnie użyć do mapowania lokalizacji w pliku binarnym z lokalizacjami w kodzie źródłowym; ale ta informacja zajmuje dużo miejsca. Dlatego informacje debugujące są zwykle usuwane z plików binarnych przed ich spakowaniem. W ostatnich latach, stripa objcopyzostały wzmocnione tak, że informacje debugowania mogą być pozyskiwane i przechowywane oddzielnie - tak Informacje debugowania pakiety zostały utworzone. Wszystko, co jest wtedy potrzebne, to jakiś sposób na zapewnienie, że plik binarny i jego informacje debugowania odpowiadają, i tam właśnie przychodzą identyfikatory kompilacji - są to unikalne identyfikatory obliczane przezld(poszukaj --build-idtam) znaczących części pliku binarnego. „Główne pliki identyfikatora kompilacji” to dowiązania symboliczne z identyfikatora kompilacji do odpowiedniego pliku binarnego lub pliku informacji debugowania; pozwalają na implementację odwzorowań dwukierunkowych, dzięki czemu zrzuty rdzenia mogą być użytecznie debugowane (link z plików binarnych do ich identyfikatorów kompilacji w samych plikach binarnych, w .gnu_debuglinksekcji). Szczegółowe wyjaśnienie uzasadnienia tego wszystkiego znajduje się w opisie funkcji kompilacji id Fedory .

Stephen Kitt
źródło