我安装了rpmlint和rpmdevtools。 我使用rpmdevtools来创build一个.spec文件的模板。 我修改了spec文件,以便安装cfengine。 我在spec文件上运行了rpmlint,没有看到任何警告或错误。 然后我试图运行specfile为真实,但它失败了。 这是我跑的命令:
$ rpmbuild -ba newpackage.spec
这是我所看到的:
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.wNGgcV + umask 022 + cd /home/ec2-user//BUILD + cd /home/ec2-user/BUILD + rm -rf Propulsion-1 + /usr/bin/tar -xf - + /usr/bin/gzip -dc /home/ec2-user/SOURCES/cfengine-3.6.5.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd Propulsion-1 /var/tmp/rpm-tmp.wNGgcV: line 35: cd: Propulsion-1: No such file or directory error: Bad exit status from /var/tmp/rpm-tmp.wNGgcV (%prep) RPM build errors: Bad exit status from /var/tmp/rpm-tmp.wNGgcV (%prep)
第35行上面的文件有这样的:
cd'Propulsion-1'
“Propulsion”名称来自.spec文件。 显然,单引号,连字符和1来自rpm-build命令处理。
我应该怎么做没有一个RPMbuild立错误? 我希望我的spec文件可以用来安装cfengine。
这里是规格文件:
Name: Propulsion Version: 1 Release: 1%{?dist} Summary: First time License: GNU #URL: Source0: http://s3.amazonaws.com/cfengine.package-repos/tarballs/cfengine-3.6.5.tar.gz BuildRequires: gettext # Requires: %description This is a test. %prep %setup -q %build %configure make %{?_smp_mflags} %install rm -rf $RPM_BUILD_ROOT %make_install %files %doc %changelog
发生这个错误是因为%setup实际上是一个扩展后的macros,它会尝试将源和cd压缩到源目录中。
如果tar包中的源代码目录与软件包名称不同,则需要设置-n ,如下所示:
%setup -n cfengine-3.6.5
在你的情况下,这应该工作,因为当你提取cfengine-3.6.5.tar.gz你会得到一个名为cfengine-3.6.5的目录 – 而rpmbuild则根据你的包名和版本来期待Propulsion-1 。
你可以在这里和这里阅读更多关于设置macros的信息 。