编写可移植RPM规范文件

时间:2013-01-26 22:41:32

标签: fedora packaging rpm opensuse rpmbuild

我开始为我们的软件创建RPM软件包,但我不确定我是否按预期使用该系统。我想创建一个RPM spec / source包,我可以在不同的RPM系统上构建,例如fedora,centos和opensuse(这就是我喜欢的rpm)。

然而,我开始意识到许多脚本在例如%pre%post取决于发布。例如,我的前脚本停止了Apache:

service httpd stop

但是,此命令在OpenSUSE上不起作用。这只是一个例子,我的脚本中还有许多其他内容在发行版之间有所不同。

那么通常的方法是什么?我应该为每个发行版创建单独的.spec文件吗?或者是否有便于携带的技巧?

1 个答案:

答案 0 :(得分:2)

将shell脚本添加到执行命令的spec文件的顶部,如下所示:

%define distribution %(sh -c "[ -f /etc/redhat-release ] && cat /etc/redhat-release | awk '{print $1}' || [ -f /etc/SuSE-release ] && head -n1 /etc/SuSE-release | awk '{print $1}' || echo 'Unknown'")

您可以执行以下%pre%post等脚本的下一步:

distribution=${distribution}
case $distribution in
    "Fedora")
        # do fedora stuff
    ;;
    "openSUSE")
        # do suse stuff
    ;;
    *)
        # handle error condition
        exit 1
    ;;
esac

并添加您需要的分发字符串及其相关的脚本。