rpmbuild 使用 .spec 文件删除构建目录

rpmbuild using .spec file deletes build directory

我正在使用 .spec 文件尝试 rpmbuild(4.11.3),但它删除了构建目录,我希望 rpmbuild 不要删除我的构建目录中的任何文件,因为在 RPM 完成后我需要它们做其他事情建成。我尝试使用 -bi 选项但它没有用,它删除了构建目录。

这里是 SPEC 文件:

 Name: newfile
 Version: 1.0
 Release: 1%{?dist}
 AutoReqProv: no
 Prereq: /bin/chmod
 Prereq: /bin/chown
 Summary: Testing 
 %description
 TBD
 %install

 mkdir -p $RPM_BUILD_ROOT/test/opb

 %files -f testingfiles.files
 %defattr(-,root,root,755)
 %dir /test/opb
 %dir /test/opb
 %dir /test/opb/new
 %dir /test/opb/new1
 %dir /test/opb/new2
 %dir /test/opb/new2

命令:

 /usr/bin/rpmbuild --define '_tmppath /var/tmp/rpmgen24431.d' --define '_topdir pkg/tst' -bi --buildroot /testing/new/dest pkg/tst/newfile.spec

删除/testing/new/dest内的所有文件。如何在不删除构建文件的情况下创建 rpm 文件。

您可以添加:

%define __spec_install_pre /bin/true

在您的规范文件之上。

但是提供这个答案我感到非常羞耻,因为您的 SPEC 已经充满了黑客攻击,而这又增加了另一层肮脏的黑客攻击。而不是这个问题,你应该问如何通过定期清理 buildroot 来实现你想要实现的目标。

编辑: __spec_install_pre 定义为:

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

因此,如果您将其定义为:

%{___build_pre}
    mkdir -p `dirname "$RPM_BUILD_ROOT"`
    mkdir "$RPM_BUILD_ROOT"
%{nil}

它的行为完全相同,只是不删除 buildroot。 多行 %define 可以通过两种方式定义,这取决于您的 rpm 版本。我会留给你:)