Qual è lo scopo di /usr/lib/.build-id/ dir?


10

Dopo una nuova installazione di f27 (netinstall) ho notato che molti pkg posizionano piccoli file in /usr/lib/.build-id/dir. All'inizio pensavo di aver abilitato in qualche modo oscura la modalità "debug" per dnf, ma anche

$ dnf download httpd

recupera un rpm con /usr/lib/.build-id/*file.

Non me lo ricordo nelle precedenti pubblicazioni di Fedora.


rpm --query --file /usr/lib/.build-idelenca un sacco di pacchetti "proprietari" /usr/lib/.build-id... strano.
David Tonhofer,

Risposte:


22

/usr/lib/.build-idcontiene i file build-id principali per i pacchetti installati. Prima di Fedora 27, vivevano insieme ai file di debug /usr/lib/debuge venivano spediti solo in RPM di debug. In Fedora 27, è stata introdotta una modifica per consentire l'installazione parallela di più pacchetti di informazioni di debug. Parte di tale modifica comporta la spedizione dei file build-id principali nel pacchetto corrispondente, per garantire che corrispondano ai file binari installati.

I pacchetti di informazioni di debug sono utilizzati in molte distribuzioni per fornire agli utenti un modo per installare le informazioni di debug quando necessario, senza file binari per tutti. Quando un programma o una libreria viene creata e collegata, può essere costruita con informazioni di debug, che i debugger possono quindi utilizzare per mappare le posizioni nel file binario con le posizioni nel suo codice sorgente; ma questa informazione occupa molto spazio. Pertanto, le informazioni di debug vengono in genere eliminate dai file binari prima che vengano impacchettate. Negli ultimi anni, stripe objcopysono stati migliorati in modo che le informazioni di debug possano essere estratte e archiviate separatamente, ecco come vengono creati i pacchetti di informazioni di debug. Tutto ciò che serve quindi è un modo per garantire che un binario e le sue informazioni di debug corrispondano, ed è qui che arrivano gli ID di build: sono identificatori univoci calcolati dald(cercare --build-idlì) sopra le parti significative di un binario. I "file principali dell'ID build" sono collegamenti simbolici da un ID build al corrispondente file binario o di informazioni di debug; consentono l'implementazione di mapping bidirezionali, in modo che i dump principali possano essere utilmente sottoposti a debug (c'è un collegamento dai binari ai loro ID di build nei binari stessi, nella .gnu_debuglinksezione). Troverai una spiegazione dettagliata del ragionamento alla base di tutto ciò nella descrizione della funzione build-id di Fedora .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.