Amu*_*umu 31 linux packaging rpm
在构建RPM包的过程中,我必须指定BuildRoot,稍后将在%install中使用,它将调用$ RPM_BUILD_ROOT.我一直认为$ RPM_BUILD_ROOT是RPM执行打包的虚假安装.然后,在安装时使用RPM包,它将安装到实际位置.例如:
$RPM_BUILD_ROOT/usr/bin
Run Code Online (Sandbox Code Playgroud)
我认为$ 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将为null,它将安装到默认位置.在上面的例子中,它是/ usr/bin.因此,$ RPM_BUILD_ROOT不仅适用于打包或"虚假安装"过程,而且是用户定义安装位置的一种方式,类似于Windows中的选择文件夹位置.
我不知道我的想法是否正确.有人可以验证吗?提前致谢.
thk*_*ala 36
$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除非绝对没有其他方法,否则不要构建包.
Mar*_*ler 13
文件〜/ .rpmmacros定义每个用户的路径:
%_topdir %(echo $HOME)/rpmbuild
%_tmppath %{_topdir}/tmp
Run Code Online (Sandbox Code Playgroud)
还可以使用rpmbuild命令行参数定义它们:
rpmbuild --define '_topdir /home/username/rpmbuild'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34861 次 |
| 最近记录: |