gpt4 book ai didi

linux - $RPM_BUILD_ROOT 实际上是什么?

转载 作者:IT老高 更新时间:2023-10-28 12:40:36 28 4
gpt4 key购买 nike

在构建 RPM 包的过程中,我必须指定 BuildRoot,稍后将在涉及 $RPM_BUILD_ROOT 的 %install 中使用。我一直认为 $RPM_BUILD_ROOT 是 RPM 执行打包的假安装。然后,在使用 RPM 包安装时,它将安装到实际位置。例如:

$RPM_BUILD_ROOT/usr/bin

我以为$RPM_BUILD_ROOT只是打包过程用的,在某些方面RPM可以区分$RPM_BUILD_ROOT,用户执行“rpm -ivh package.rpm”时实际安装位​​置为/usr/bin。

但是最近看了一些文档,建议$RPM_BUILD_ROOT是实际要安装的位置,$RPM_BUILD_ROOT是用户通过设置环境变量$RPM_BUILD_ROOT来指定的,以便用户安装包在他们想要的位置。否则,$RPM_BUILD_ROOT 将为空,并将安装到默认位置。在上述情况下,它是/usr/bin 。因此,$RPM_BUILD_ROOT 不仅仅用于打包或“假安装”过程,而是一种用户定义安装位置的方式,类似于 Windows 中选择文件夹位置。

我不知道我的想法是否正确。有人可以验证吗?提前致谢。

最佳答案

$RPM_BUILD_ROOT(或等效的 %{buildroot} SPEC 文件宏)总是 保存 RPM 将在其中查找任何文件的目录打包。 RPM 脚本(例如压缩手册页的脚本)也将使用该值来了解在哪里查找刚刚安装的文件。通常,此值将是非空的并且包含远离系统目录的位置 - 通常在 /tmp/var/tmp 下的某个位置。

SPEC 文件的作者应确保 make install(或相关软件正在使用的任何安装程序)将所有文件放在 $RPM_BUILD_ROOT 下,具有最终安装软件时应使用的相同层次结构。例如。要让 RPM 在 /bin/ls 中安装 ls%install SPEC 文件部分应确保 ls放在$RPM_BUILD_ROOT/bin/ls中。

SPEC文件的作者也应该使用BuildRoot:标签来指定一个合适的位置。或者,构建系统可以有一个带有适当条目的 rpmrc RPM 配置文件。在 any case应该设置构建根目录,以便:

  • 普通用户将能够构建源包。

  • 如果 super 用户曾经构建源包,构建过程不会破坏任何系统文件,除非 super 用户安装生成的二进制包。是的,可能有充分的理由将 some 包构建为 root - 例如,运行完整的 glibc 测试套件需要 root 某些测试的权限。

也就是说,RPM 可以并且将使用空的构建根变量构建包。在这种情况下,构建安装和最终目标位置将重合。一个潜在的电话,例如make install 将使用默认位置,从而破坏系统文件,例如/usr/lib 如果以足够的权限运行。此外,在 %files 部分中包含 /usr/bin/* 将很高兴地提取构建主机 /usr/bin/ 的全部内容目录到你的二进制包中。

底线:

  • 切勿使用空的构建根目录。

  • 除非绝对没有其他办法,否则不要以 root 的身份构建包。

关于linux - $RPM_BUILD_ROOT 实际上是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8084796/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com