当前位置: 首页 > 面试题库 >

$ RPM_BUILD_ROOT实际上是什么?

陆耀
2023-03-14
问题内容

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

$RPM_BUILD_ROOT/usr/bin

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

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

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


问题答案:

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

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

SPEC文件的作者也应使用该BuildRoot:标签指定正确的位置。或者,构建系统可以具有rpmrc带有正确条目的RPM配置文件。在任何情况下,都应设置构建根目录,以便:

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

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

也就是说,RPM可以并且将使用空的构建根变量来构建软件包。在这种情况下,构建安装和最终目标位置将重合。例如,可能的调用make install将使用默认位置,从而在例如/usr/lib具有足够特权的情况下破坏系统文件。此外,/usr/bin/*在您的%files部分中,将愉快地将构建主机/usr/bin/目录的全部内容拉入您的二进制包中。

底线:

  • 切勿使用空的构建根。

  • root除非绝对没有其他方法,否则请勿构建软件包。



 类似资料:
  • 我正试图把我的头缠在Apache Mesos上,需要澄清几个项目。 我对Mesos的理解是,它是一个安装在集群中的每个物理/VM服务器(“节点”)上的可执行文件,然后提供一个Java API(不知何故),将每个单独的节点视为计算资源(CPU/RAM/等)的集体池。因此,对于使用Java API编码的程序,他们只看到一组资源,而不必担心如何/在哪里部署代码。 因此,首先,我在这里的理解可能是根本错误

  • 我在看一个典型的for循环: 我对int I=1后的分号很满意:它是一个声明新变量的语句。如果i也是一个语句,为什么后面没有分号? 另一个例子。我打开Jshell并放置以下内容: 换句话说,命令可以工作,与是否有分号无关。我希望没有它就无法工作。 最后一个示例(改编自关于

  • 我已经回答了一个关于Python中的绝对导入的问题,我认为通过阅读Python2.5更改日志和附带的PEP我理解了这个问题。但是,在安装Python2.5并尝试创建一个从__future__import absolute_import中正确使用

  • 我只是第一次涉足iOS开发,我必须做的第一件事就是实现一个自定义容器视图控制器——让我们称之为SideBarViewController——它交换了几种可能的视图控制器中的哪一种它显示的子视图控制器,几乎与标准的Tab Bar Controller一模一样。(它几乎是一个标签栏控制器,但有一个可隐藏的侧菜单,而不是标签栏。) 根据Apple文档中的说明,每当我向容器中添加子ViewControll

  • 问题内容: 最近,我遇到了原始类型包装器类(如和)中的常量。在API中,第一个定义为: 一个常数,保持double型的正无穷大。它等于Double.longBitsToDouble(0x7ff0000000000000L)返回的值。 其他人也有同样的定义。 我遇到的麻烦是了解这些常数实际上是 什么 。他们实际上并不能 成为 或 代表 正/负无穷大,因为系统本质上是有限的。Java创建者认为仅仅是对