我开始为我们的软件创建RPM软件包,但我不确定我是否按预期使用该系统。我想创建一个RPM spec / source包,我可以在不同的RPM系统上构建,例如fedora,centos和opensuse(这就是我喜欢的rpm)。
然而,我开始意识到许多脚本在例如%pre
和%post
取决于发布。例如,我的前脚本停止了Apache:
service httpd stop
但是,此命令在OpenSUSE上不起作用。这只是一个例子,我的脚本中还有许多其他内容在发行版之间有所不同。
那么通常的方法是什么?我应该为每个发行版创建单独的.spec文件吗?或者是否有便于携带的技巧?
答案 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
并添加您需要的分发字符串及其相关的脚本。