如何在rpmbuild中自动创建$ {buildroot}?

时间:2014-06-23 01:19:37

标签: centos6 rpmbuild

我想在centos 6.4中从生成的二进制包创建二进制rpm文件,并在我的一个构建系统中注意到${buildroot}是自动创建的,我想知道它是如何实现的。

示例wget.spec如下所示。详细规范在我的要点https://gist.github.com/larrycai/1ffe134bce1860f1cf87

%install
tar xf ~/wget.tar.gz -C %{buildroot}/

%files
%defattr(-,root,root)
/usr/bin/wget

可以创建wget.tar.gz tar -zcvf ~/wget.tar.gz /usr/bin/wget

当我使用rpmbuild -bb wget.spec构建它时,我得到了

+ rpmbuild -bb wget.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.VNDZg4
+ umask 022
+ cd /home/larry/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.S8koPW
+ umask 022
+ cd /home/larry/rpmbuild/BUILD
+ '[' /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64 '!=' / ']'
+ rm -rf /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64
++ dirname /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64
+ mkdir -p /home/larry/rpmbuild/BUILDROOT
+ mkdir /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64
+ LANG=C
+ export LANG
+ unset DISPLAY
+ tar xf /home/larry/wget.tar.gz -C /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64/
+ /usr/lib/rpm/check-buildroot
... (it is successful)

我想知道为什么行mkdir /home/larry/rpmbuild/BUILDROOT/wget-1.12-1.x86_64会自动执行。

是否为此启用了任何脚本或rpmmacros?

1 个答案:

答案 0 :(得分:1)

主要原因是构建机器安装了redhat-rpm-config包,下面的详细列表

此宏设置位于/usr/lib/rpm/redhat/macros

%__spec_install_pre %{___build_pre}\
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "${RPM_BUILD_ROOT}"\
    mkdir -p `dirname "$RPM_BUILD_ROOT"`\
    mkdir "$RPM_BUILD_ROOT"\
%{nil}

我们可以安装此软件包或将此宏放入~/.rpmmacros

我通过运行命令rpmbuild --showrc找到它可以看到mkdir代码段在那里,所以我开始检查是否安装了特殊包。