$RPM_BUILD_ROOT(或等效的
%{buildroot}SPEC文件宏) 始终保留目录,RPM将在该目录下查找要打包的任何文件。RPM脚本(例如,压缩手册页的脚本)也将使用该值来知道在哪里查找刚刚安装的文件。通常,该值是非空的,并且包含一个远离系统目录的位置-
通常在
/tmp或下
/var/tmp。
SPEC文件的作者应确保
makeinstall(或有问题的软件正在使用的任何安装程序)将所有文件放置在下
$RPM_BUILD_ROOT,并具有最终安装该软件时应使用的相同层次结构。例如,有RPM安装
ls中
/bin/ls,在
%installSPEC文件部分应该确保
ls被放置在
$RPM_BUILD_ROOT/bin/ls。
SPEC文件的作者也应使用该
BuildRoot:标签指定正确的位置。或者,构建系统可以具有
rpmrc带有正确条目的RPM配置文件。在任何情况下,都应设置构建根目录,以便:
普通用户将能够构建源程序包。
如果超级用户曾经构建过源程序包,则除非超级用户安装了生成的二进制程序包,否则构建过程不会破坏任何系统文件。是的,构建 某些 软件包可能有充分的理由
root
,例如-运行完整的glibc
测试套件需要root
某些测试的特权。
也就是说,RPM可以并且将使用空的构建根变量来构建软件包。在这种情况下,构建安装和最终目标位置将重合。例如,可能的调用
makeinstall将使用默认位置,从而在例如
/usr/lib具有足够特权的情况下破坏系统文件。此外,
/usr/bin/*在您的
%files部分中,将愉快地将构建主机
/usr/bin/目录的全部内容拉入您的二进制包中。
底线:
切勿使用空的构建根。
root
除非绝对没有其他方法,否则请勿构建软件包。



