Centos 可以在上安装cpack restrict OS版本包
我为几个操作系统版本创建包,包括RHEL7和RHEL8(或者大部分都是CentOS7和8) 可以安装为.el7构建的软件包。在el8。但它通常不起作用(例如,由于未定义的符号等)。 理想情况下,我希望安装失败,并显示一条错误消息,如“此软件包仅适用于RHEL7/CentOS7” 我该怎么做? 更具体地说,如何使用CPack/CMake实现这一点 如果您还可以给出适合Debian版本的解释,则可以获得额外的积分Centos 可以在上安装cpack restrict OS版本包,centos,redhat,rpm,rpmbuild,cpack,Centos,Redhat,Rpm,Rpmbuild,Cpack,我为几个操作系统版本创建包,包括RHEL7和RHEL8(或者大部分都是CentOS7和8) 可以安装为.el7构建的软件包。在el8。但它通常不起作用(例如,由于未定义的符号等)。 理想情况下,我希望安装失败,并显示一条错误消息,如“此软件包仅适用于RHEL7/CentOS7” 我该怎么做? 更具体地说,如何使用CPack/CMake实现这一点 如果您还可以给出适合Debian版本的解释,则可以获得额外的积分 以下是我到目前为止的一些想法: 请参阅: 在安装时在预安装脚本中选中uname
以下是我到目前为止的一些想法:
uname-r
部分答案如下:>rpm -q --whatprovides /etc/redhat-release
centos-release-8.2-2.2004.0.1.el8.x86_64
这看起来是一个很好的候选者,但如果我在centos-release-8.2上添加依赖项,然后他们升级到centos-release-8.3或使用RedHat,这将不起作用。I在%pre
中有一个节阻止它:
if [ -n "%{dist}" ]; then
PKG_VER=`echo %{dist} | perl -ne '/el(\d)/ && print $1'`
THIS_VER=`perl -ne '/release (\d)/ && print $1' /etc/redhat-release`
if [ -n "${PKG_VER}" -a -n "${THIS_VER}" ]; then
if [ ${PKG_VER} -ne ${THIS_VER} ]; then
for i in `seq 20`; do echo ""; done
echo "WARNING: This RPM is for CentOS${PKG_VER}, but you seem to be running CentOS${THIS_VER}" >&2
echo "You might want to uninstall these RPMs immediately and get the CentOS${THIS_VER} version." >&2
for i in `seq 5`; do echo "" >&2; done
fi
fi
fi
请记住-在RPM安装中不能有任何用户交互。你可以让它失败,而不是发出警告;这取决于您。这可能是答案的一半,但问题是如何使用cmake/cpack实现这一点。最简单的方法是什么都不做:)不要让事情变得复杂。您的软件包名称应该包含smth,如
--el7.x86_64.rpm
(或*.el8.*
)--这是向用户表明目标发行版的标志(Debian/Ubuntu的相同规则)。如果他将包安装到错误的发行版,那不是你的问题!:)不管你怎么做,如果用户想安装smth,而不是针对他的发行版,他会找到一种方法来射击他的腿,如果你有一个回购你的东西,只需将软件包放在不同的目录下,并要求用户正确配置他们的/etc/yum.repos.d/*
。尽管不管你做什么,都会有人找到成为更好的白痴的方法,但我相信问题最好是大声尖叫,尽早解决,而不是耍花招。