代码之家  ›  专栏  ›  技术社区  ›  eignhpants

rpmbuild命令找不到生成目录

  •  0
  • eignhpants  · 技术社区  · 9 年前

    我正在尝试使用rpm包安装一些配置文件,但在最后的构建步骤中遇到了问题。我已经尝试过使用很多不同的变量组合,但我总是得到文件未找到的错误。rpmbuild打开(或不打开)文件的位置以及预期这些文件的位置似乎存在问题。现在我有一个如下所示的规范文件:

    Summary: My Package
    Name: my-package
    Version: 1.1
    Release: Public
    Group: Applications/System
    License: Public
    Requires: collectd
    Source: sources.tar.gz 
    
    %prep
    %setup
    
    %install
    mkdir -p %{buildroot}/etc/collectd/
    mkdir -p %{buildroot}/etc/collectd/collectd.conf.d/
    mkdir -p %{buildroot}/usr/bin/
    
    
    # list files owned by the package here
    %files
    %defattr(-,root,root)
    %config /etc/collectd/collectd.conf.custom
    %config /etc/collectd/collectd.d/http.conf
    %config /etc/collectd/collectd.d/csv.conf
    /usr/local/bin/myfile.py
    /usr/local/bin/my-package
    
    %post
    ln -sf /etc/collectd.conf.custom /etc/collectd.conf
    

    我目前得到的输出如下:

    Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.m5Qvz9
    + umask 022
    + cd ./BUILD
    + LANG=C
    + export LANG
    + unset DISPLAY
    + cd /BUILD
    /var/tmp/rpm-tmp.m5Qvz9: line 31: cd: /BUILD: No such file or directory
    error: Bad exit status from /var/tmp/rpm-tmp.m5Qvz9 (%prep)
    
    
    RPM build errors:
        Bad exit status from /var/tmp/rpm-tmp.m5Qvz9 (%prep)
    

    我不知道为什么它试图 cd 进入 /BUILD 目录两次。

    如果我忽略了 %setup 第I行得到以下输出:

    Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.3c5as7
    + umask 022
    + cd ./BUILD
    + LANG=C
    + export LANG
    + unset DISPLAY
    + exit 0
    Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.FAF3wq
    + umask 022
    + cd ./BUILD
    + '[' ./BUILDROOT/my-package-1.1-Public.x86_64 '!=' / ']'
    + rm -rf ./BUILDROOT/my-package-1.1-Public.x86_64
    ++ dirname ./BUILDROOT/my-package-1.1-Public.x86_64
    + mkdir -p ./BUILDROOT
    + mkdir ./BUILDROOT/my-package-1.1-Public.x86_64
    + LANG=C
    + export LANG
    + unset DISPLAY
    + mkdir -p ./BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd/
    + mkdir -p ./BUILDROOT/my-package-1.1-Public.x86_64/usr/bin/
    + mkdir -p ./BUILDROOT/my-package-1.1-Public.x86_64/usr/bin/collectd.conf.d/
    + /usr/lib/rpm/check-buildroot
    + /usr/lib/rpm/redhat/brp-compress
    + /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
    + /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
    + /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
    + /usr/lib/rpm/brp-python-bytecompile
    + /usr/lib/rpm/redhat/brp-python-hardlink
    + /usr/lib/rpm/redhat/brp-java-repack-jars
    Processing files: my-package-1.1-Public.x86_64
    error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.conf.custom
    error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.d/http.conf
    error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.d/csv.conf
    error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/usr/local/bin/myfile.py
    error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/usr/local/bin/my-package
    
    
    RPM build errors:
        File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.conf.custom
        File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.d/http.conf
        File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.d/csv.conf
        File not found: /BUILDROOT/my-package-1.1-Public.x86_64/usr/local/bin/myfile.py
        File not found: /BUILDROOT/my-package-1.1-Public.x86_64/usr/local/bin/my-package
    

    移除后我会想到的 %设置 因为它不再解包源。感谢任何帮助。

    1 回复  |  直到 9 年前
        1
  •  1
  •   msuchy    9 年前

    你可以忽略这两个“cd”,这可能是在不同的过程中。所以真正重要的是

    cd /BUILD
    

    我假设这个目录确实不存在。它由%_topdir宏设置。强烈建议将

    %_topdir %(echo $HOME)/rpmbuild
    

    在~/中。rpmmacros文件。然后,您需要在~/rpmbuild中创建多个目录。您可以运行命令“rpmdev setuptree”(来自rpmdevtools包),该命令将为您创建它。

    编辑:

    另外,此行:

    error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.conf.custom
    

    表示当您在%files部分列出该文件时,rpmbuild无法在buildroot中找到该文件。您应该在%install部分中放置类似的内容:

    cp -a collectd.conf.custom %{buildroot}/etc/collectd/collectd.conf.custom
    

    如果该文件是tar的一部分。gz文件。或者使用在该位置创建该文件的任何其他shell命令。同样,对于所有报告rpmbuild丢失的文件。