rpmbuild 命令找不到构建目录
rpmbuild command won't find the build directory
我正在尝试使用 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
行,我会得到以下输出:
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
我希望在删除 %setup
之后,因为它不再解压缩源代码。任何帮助表示赞赏。
你可以忽略那两个"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 丢失的文件也是如此。
我正在尝试使用 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
行,我会得到以下输出:
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
我希望在删除 %setup
之后,因为它不再解压缩源代码。任何帮助表示赞赏。
你可以忽略那两个"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 丢失的文件也是如此。