我有一个用于构建debian和rpm包的makefile。我有两个Jenkins环境,一个用于Ubuntu,另一个用于CentOS。 debian包没有问题,rpm make命令可以在我的机器上运行,但不适用于Jenkins。 Jenkins返回以下错误:
cp: cannot stat /root/rpmbuild/SOURCES/myfile.file': No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.mII8KL (%install)
我在开发软件包时遇到了类似的错误,但最终把所有内容弄清楚了,一切都很好。我认为问题可能出在$RPM_BUILD_ROOT
,%{buildroot}
或_topdir
选项上。然而,我所尝试过的任何东西都无法引导我。
这是我的(修改过的)Makefile:
# a list of tools we depend on and must install if they're missing
DEBTOOLS=/usr/bin/debuild-pbuilder
RPMTOOLS=/usr/bin/rpmbuild
# convenience target for "make deb"
deb: my-package_1.0_all.deb
# convenience target for "make rpm".
rpm: my-package-1.0-Public.x86_64.rpm
# the target package (on Ubuntu at least)
my-package_1.0_all.deb: $(DEBTOOLS)
cd my-package; debuild-pbuilder -us -uc
my-package-1.0-Public.x86_64.rpm: $(RPMTOOLS)
cd rpmbuild; rpmbuild -bb SPECS/my-package.spec
/usr/bin/debuild-pbuilder:
apt-get -y install pbuilder
/usr/bin/rpmbuild:
yum -y install rpm-build
这是我的spec文件:
Summary: My Package
Name: my-package
Version: 1.0
Release: Public
Group: Applications/System
License: Public
Requires: external-package
Source1: myfile.file
%description
blah blah
%files
%config /etc/myfile.file
%install
mkdir -p $RPM_BUILD_ROOT/etc/
cp %{SOURCE1} %{buildroot}/etc/myfile.file
%post
ln -sf /etc/myfile.file /etc/external-package.conf
答案 0 :(得分:0)
问题实际上是找不到文件(很明显)。对我而言,这与构建rpm文件的混乱性质有很大关系。执行make
命令并调用rpmbuild
命令时,我需要能够指定目录。在阅读文档时,声明可以使用rpmbuild -D '_topdir .' -bb path/to/spec.spec
将_topdir变量设置为您调用的本地目录。这是有道理的,因为.
在linux中代表了这一点。
然而实际的通话需要
rpmbuild -D "_topdir `pwd`" -bb path/to/spec.spec
除了使用双引号至关重要之外,这看起来并没有什么不同。使用此命令将在您调用它的目录中运行构建。在此之后rpmbuild
将为您复制和处理文件(这本身就令人困惑)。