【问题标题】:rpmbuild %clean phase without removing filesrpmbuild %clean 阶段不删除文件
【发布时间】:2012-11-29 14:19:04
【问题描述】:

我在构建日志中得到以下信息:

Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.CgE2Qn
+ umask 022
+ cd /export/home/svn_checkouts/*snip*/Output/release/bin/packaging/BUILD
+ /bin/rm -rf /export/home/svn_checkouts/*snip*/Output/release/bin
+ exit 0

我想避免rpmbuild 删除我构建目录中的所有文件,因为在构建 RPM 后我需要它们来做其他事情。我可以覆盖此行为吗?

我读到某些版本的 RPM 支持 --noclean 参数,但不幸的是我们不支持。

【问题讨论】:

    标签: rpm rpmbuild


    【解决方案1】:

    原来我只需要在规范文件中提供我自己的%clean 指令并将其留空以覆盖默认值。出于某种原因,我没想到它会起作用。 ;)

    定义可以条件化 %Clean% 阶段,从而可以达到与--noclean 相同的效果。

    %Clean
    %if "%{noclean}" == ""
       rm -rf $RPM_BUILD_ROOT
    %endif
    

    使用rpmbuild --define 'noclean 1' 调用以禁用清理。

    【讨论】:

    • 唉,这不适用于 RPM 版本 4.11.1:如果 noclean 未定义,则 %{noclean} 将扩展为 % { noclean }(没有空格)而不是空字符串。
    【解决方案2】:

    对于spec-file 构建rpmbuild 具有-bi 选项。它使$RPM_BUILD_ROOT 保持原样;它没有%clean

      -bi     build through %install (%prep, %build, then install) from <specfile>
    

    (rpmbuild --help)


    对于SRPM构建(源 RPM 包;yumdownloader 将为您提供这些),还有--recompile 选项:

     --rebuild    build binary package from <source package>
     --recompile  build through %install (%prep, %build, then install) from <source package>
    

    最后,rpmbuild 有一个 --noclean 选项——但在我的情况下 (RPM version 4.11.3) 它不起作用。

    【讨论】:

      猜你喜欢
      • 2014-11-07
      • 2017-06-08
      • 2021-08-30
      • 2016-03-29
      • 2018-05-18
      • 2020-01-09
      • 2018-05-11
      • 1970-01-01
      • 2012-03-23
      相关资源
      最近更新 更多