rpmbuild %clean 阶段不删除文件
Posted
技术标签:
【中文标题】rpmbuild %clean 阶段不删除文件【英文标题】:rpmbuild %clean phase without removing files 【发布时间】: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
参数,但不幸的是我们不支持。
【问题讨论】:
【参考方案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
) 它不起作用。
【讨论】:
以上是关于rpmbuild %clean 阶段不删除文件的主要内容,如果未能解决你的问题,请参考以下文章