可以在上安装cpack restrict OS版本包



我为包括RHEL7&RHEL8(或者大部分等同于CentOS7&8(。

可以安装为.el7构建的程序包。于.el8。但它通常不起作用(例如由于未定义的符号等(。理想情况下,我想让安装失败,并显示一条错误消息;该封装仅用于RHEL7/CentOS7";。

我该怎么做?更具体地说,我如何使用CPack/CMake做到这一点?

如果你也能给出一个适合Debian版本的解释,那就可以获得额外的积分。


以下是我迄今为止的一些想法:

  1. 以某种方式使用dist标记,请参阅:
  • https://serverfault.com/questions/283330/rpm-spec-conditional-require-based-of-distro-version
  1. 在安装时在预安装脚本中检查uname -r部分答案如下:
  • 如何在rpmbuild规范文件中检查操作系统版本
  • https://unix.stackexchange.com/questions/9296/how-can-i-specify-os-conditional-build-requirements-in-an-rpm-spec-file

我不太确定如何使用cpack来做到这一点。我不想生成自定义规范文件,因为构建机制已经足够复杂了。

  1. 另一个选项是在仅存在于RHEL7但不存在于RHEL 8上的包上添加%requires,反之亦然。该软件包也需要存在于CentOS上,并且如果升级,不会以导致安装失败的方式进行更改。有人知道一个合适的包裹可以依靠吗

例如:

>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,这将不起作用。

我之前在%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安装中,您不能进行任何用户交互。你可以让它失败,而不是警告它;这取决于你。

最新更新