3

我开始为我们的软件创建 RPM 包,但我不确定我是否按预期使用了系统。我想创建一个 RPM 规范/源代码包,我可以在不同的 RPM 系统上构建它,例如 fedora、centos 和 opensuse(这是我喜欢 rpm 的地方)。

但是,我开始意识到 eg 中的许多脚本都%pre依赖%post于发行版。例如,我的 pre 脚本停止 Apache:

service httpd stop

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

那么通常的方法是什么?我应该为每个发行版创建单独的 .spec 文件吗?或者有什么技巧可以让东西变得便携?

4

1 回答 1

2

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

%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

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

于 2013-01-27T00:41:40.143 回答