无法从CentOS的来源构建Mercurial

时间:2012-12-23 06:55:24

标签: linux build mercurial centos rpm

我正在尝试在CentOS 6上构建Mercurial,所以这就是我到目前为止所做的:

我得到了mercurial的最新资料,文件名为mercurial-2.4.1.tar.gz

我尝试在其上运行rpmbuild,我得到以下内容:

# rpmbuild -tb mercurial-2.4.1.tar.gz
error: File /home/someuser/rpms/mercurial/mercurial-snapshot.tar.gz: No such file or directory

所以我尝试通过从另一个人那里复制来创建它想要的文件:

# cp mercurial-2.4.1.tar.gz mercurial-snapshot.tar.gz

我再试一次,似乎传递了上一个错误:

# rpmbuild -tb mercurial-2.4.1.tar.gz
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.vV9ZXc
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf mercurial-snapshot
+ /usr/bin/gzip -dc /home/someuser/rpms/mercurial/mercurial-snapshot.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd mercurial-snapshot
/var/tmp/rpm-tmp.vV9ZXc: line 34: cd: mercurial-snapshot: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.vV9ZXc (%prep)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.vV9ZXc (%prep)

我不确定发生了什么,我的猜测是rpmbuild无法创建文件......任何想法?

4 个答案:

答案 0 :(得分:1)

我发现为CentOS构建RPM的最简单方法是从Fedora中找到源RPM并对其进行rpmbuild --rebuild。 CentOS documents it here但现在似乎已经失效了。

Here是一个src RPM,你可以尝试开始。

答案 1 :(得分:0)

您没有/ var / tmp /目录或无法写入。尝试创建它:mkdir /var/tmp - 您可能必须使用“sudo”才能工作,具体取决于系统的设置。

答案 2 :(得分:0)

我认为用cp命令创建tarball并不好。

您应该将官方tarball解压缩为mercuial-snapshot /后生成的mercurial- [version] /目录重命名,然后创建名为mercurial-snapshot.tar.gz的目录的压缩tar存档。

$ tar zxvf mercurial-2.4.1.tar.gz 
$ mv mercurial-2.4.1 mercurial-snapshot
$ tar zcvf mercurial-snapshot.tar.gz mercurial-snapshot

答案 3 :(得分:0)

问题是捆绑的spec文件的版本默认为“snapshot”,因此它将查找名为“mercurial-snapshot.tar.gz”的tar文件,并且还要求提取的目录为“mercurial” -snapshot“(所以你不能只重命名tar文件)。

处理此问题的最佳方法(或至少 方式)是提取spec文件,使用正确的版本和版本号更新它,然后从中构建rpm。

这是过程:

tar fxz mercurial-X.Y.tar.gz --strip-components=2 mercurial-X.Y/contrib/mercurial.spec

将spec文件放在rpmbuild / SPECS中并进行编辑。将“Version:snapshot”行替换为“Version:XY”,并将“Release:0”行替换为“Release:1.xyz”,其中xyz是自定义标记,因此您知道自己构建了包。

然后运行rpmbuild:

rpmbuild -bb --target=i686 SPECS/mercurial.spec

如果您正在使用并构建64位系统,请使用--target = x86_64。

然后,您应该在RPMS / $ target目录中有一个正确构建并命名的rpm文件。