在重新安装 f27(netinstall)后,我注意到许多 pkg 将小文件放在/usr/lib/.build-id/
dir 中。一开始我以为我以某种方式为 dnf 启用了一些晦涩的“调试”模式,但即使如此
$ dnf download httpd
获取其中包含文件的 rpm /usr/lib/.build-id/*
。
我不记得以前的 Fedora 版本中有这个。
答案1
/usr/lib/.build-id
包含已安装软件包的主要构建 ID 文件。在 Fedora 27 之前,这些文件与调试文件一起存在于/usr/lib/debug
,并且仅在调试 RPM 中提供。在 Fedora 27 中,引入了改变允许并行安装多个调试信息包。该更改的一部分涉及在它们匹配的包中传送主要的 build-id 文件,以确保它们与已安装的二进制文件匹配。
许多发行版中都使用调试信息包,为用户提供一种在必要时安装调试信息的方法,而无需为每个人提供臃肿的二进制文件。当构建和链接程序或库时,可以使用调试信息来构建它,然后调试器可以使用这些信息将二进制文件中的位置与其源代码中的位置进行映射;但这些信息占用了很多空间。因此,调试信息通常在打包之前从二进制文件中删除。最近几年,strip
和objcopy
已得到增强,以便可以单独提取和存储调试信息 - 这就是调试信息包的构建方式。那么所需要的就是确保二进制文件及其调试信息相对应的某种方法,这就是构建 ID 的用武之地 - 它们是由以下公式计算的唯一标识符ld
(在那里查找--build-id
)二进制文件的重要部分。 “主构建 ID 文件”是从构建 ID 到相应的二进制文件或调试信息文件的符号链接;它们允许实现双向映射,以便可以有效地调试核心转储(参考资料部分中,二进制文件本身中有一个从二进制文件到其构建 ID 的链接.gnu_debuglink
)。您将在以下位置找到所有这一切背后原因的详细解释:Fedora build-id 功能描述。