【问题标题】:rpmbuild using .spec file deletes build directoryrpmbuild 使用 .spec 文件删除构建目录
【发布时间】:2018-05-11 13:12:31
【问题描述】:

我正在使用 .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 文件。

【问题讨论】:

  • 您没有在规范文件中使用一个或多个Source 指令是否有原因?

标签: linux rpm rpmbuild


【解决方案1】:

您可以添加:

%define __spec_install_pre /bin/true

在您的规范文件之上。

但是我真的很遗憾提供这个答案,因为您的 SPEC 已经充满了 hack,而这又增加了一层肮脏的 hack。而不是这个问题,您应该问如何通过定期清理 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 版本。我会留给你的:)

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 2019-04-30
    • 2014-04-14
    • 1970-01-01
    • 2020-04-04
    • 2015-09-11
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多