Какова цель /usr/lib/.build-id/ dir?

10

После свежего экземпляра f27 (netinstall) я заметил, что многие pkgs помещают крошечные файлы в /usr/lib/.build-id/dir. Сначала я подумал, что каким-то образом включил неясный режим «отладки» для dnf, но даже

$ dnf download httpd

извлекает rpm с /usr/lib/.build-id/*файлами в нем.

Я не помню этого в предыдущих версиях Fedora.

усталый парень
источник
rpm --query --file /usr/lib/.build-idперечисляет тонну пакетов "владеющих" /usr/lib/.build-id... странно.
Дэвид Тонхофер

Ответы:

22

/usr/lib/.build-idсодержит основные файлы build-id для установленных пакетов. До Fedora 27 они /usr/lib/debugнаходились рядом с файлами отладки и поставлялись только в отладочных RPM. В Fedora 27 было внесено изменение, позволяющее параллельную установку нескольких пакетов с отладочной информацией. Частично это изменение включает доставку основных файлов build-id в соответствующем пакете, чтобы они соответствовали установленным двоичным файлам.

Пакеты отладочной информации используются во многих дистрибутивах, чтобы предоставить пользователям возможность устанавливать отладочную информацию, когда это необходимо, без раздувания двоичных файлов для всех. Когда программа или библиотека собрана и связана, она может быть построена с отладочной информацией, которую отладчики могут затем использовать для сопоставления местоположений в двоичном файле с местоположениями в его исходном коде; но эта информация занимает много места. Таким образом, информация об отладке обычно удаляется из двоичных файлов перед их упаковкой. В последние годы, stripи objcopyбыли усовершенствованы таким образом , что информация об отладке могут быть извлечены и сохранены отдельно - это, как строятся отлаживать информация пакеты. Все, что нужно, - это какой-то способ убедиться, что двоичный файл и его отладочная информация соответствуют друг другу, и именно здесь приходят идентификаторы сборки - это уникальные идентификаторы, рассчитываемыеld(ищите --build-idтам) по значительным частям двоичного файла. «Основные файлы идентификатора сборки» - это символические ссылки из идентификатора сборки в соответствующий двоичный файл или файл информации об отладке; они позволяют реализовать двустороннее сопоставление, так что дампы ядра могут быть эффективно отлажены (есть ссылка от двоичных файлов на их идентификаторы сборки в самих двоичных файлах, в .gnu_debuglinkразделе). Подробное объяснение причин всего этого вы найдете в описании функции сборки в Fedora .

Стивен Китт
источник