首页 文章

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

提问于
浏览
1

我正在使用.spec文件尝试rpmbuild(4.11.3),但它删除了builddirectory,我希望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文件 .

1 回答

  • 3

    你可以加:

    %define __spec_install_pre /bin/true
    

    在您的spec文件之上 .

    但是我觉得真的很遗憾提供这个答案,因为您的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的版本 . 我会留给你:)

相关问题