【问题标题】:how ${buildroot} is created automatically during rpmbuild?在 rpmbuild 期间如何自动创建 ${buildroot}?
【发布时间】:2014-08-12 23:38:34
【问题描述】:

我想从 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?

【问题讨论】:

    标签: centos6 rpmbuild


    【解决方案1】:

    主要原因是build机安装了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代码段在那里,所以我开始检查是否安装了特殊包。

    【讨论】:

      猜你喜欢
      • 2018-05-30
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 2023-03-08
      • 2010-10-18
      • 2013-08-29
      相关资源
      最近更新 更多