在CentOS 5.5上没有定义rpmbuild%{dist}?

Bar*_*ark 24 centos5 rpm rpmbuild

我正在尝试%{dist}在我的RPM规范文件中使用标记来提供Fedora Core(例如fc12),CentOS 5(例如el5)和亚马逊的Linux AMI 之间的特定于分发的依赖关系:

Release: %_svn_revision%{?dist}
Run Code Online (Sandbox Code Playgroud)

# Depencencies
%{?rhel:Requires: ...}
%{?fedora:Requires: ...}
Run Code Online (Sandbox Code Playgroud)

不幸的是,%{dist}似乎没有在CentOS 5.5中定义,并且我没有找到与CentOS 5.5匹配的特定于发行版的条件(我认为el5匹配,但似乎没有).这张票据报告了%{dist}2008年CentOS 的遗失,但自2009年以来一直没有更新.

我如何%{dist}在CentOS中定义以及我应该使用什么条件来匹配CentOS 5?任何RPM大师能指出我正确的方向吗?

ggi*_*oux 36

在CentOS 5上没有定义dist宏,因为它不在/etc/rpm/macros.disttag- 有一个命名的RPM buildsys-macros-rhel提供它,或者buildsys-macros在fedora上,但由于某种原因它没有被Centos重新打包.

选项1)从这里下载并安装fedora build-macros

选项2)每次都调用rpmbuild --define'dist .el5'

选项3)手动编辑/etc/rpm/macros.disttag以添加rhel(5)和dist(.el5)的宏定义.

然后,您可以在spec文件中使用这样的条件:

%if 0%{?rhel}  == 5
%{Requires: foo}
%endif 
Run Code Online (Sandbox Code Playgroud)


小智 5

另一种选择是在spec文件中调用自己宏中的脚本:

%define distribution        %(/usr/lib/rpm/redhat/dist.sh --distnum)
Run Code Online (Sandbox Code Playgroud)

它调用一个脚本,它是config rpm(redhat-rpm-config)的一部分.您还可以通过包括以下内容确保此脚本存在:

BuildRequires:              redhat-rpm-config
Run Code Online (Sandbox Code Playgroud)

然后执行ggiroux定义的相同条件:

%if %{distribution} == 5
    Requires:                   glibc.i686, libXext.i386, libXtst.i386
%else
    Requires:                   glibc.i686, libXext.i686, libXtst.i686
%endif
Run Code Online (Sandbox Code Playgroud)