gpt4 book ai didi

centos - cpack 限制操作系统版本包可以安装在

转载 作者:行者123 更新时间:2023-12-04 19:40:40 25 4
gpt4 key购买 nike

我为几个操作系统版本创建软件包,包括 RHEL7 和 RHEL8(或者几乎同样是 CentOS7 和 8)。
可以安装为 .el7 构建的包。在 .el8 上。但它通常不起作用(例如由于 undefined symbol 等)。
理想情况下,我想让安装失败并显示错误消息,例如“此软件包仅适用于 RHEL7/CentOS7”。
我怎样才能做到这一点?
更具体地说,如何使用 CPack/CMake 做到这一点?
如果您还可以给出适合 Debian 版本的解释,则可以加分。

以下是我到目前为止的一些想法:

  • 使用dist tags不知何故,请参阅:
  • https://serverfault.com/questions/283330/rpm-spec-conditional-require-based-of-distro-version
  • 查看 uname -r在安装时在预安装脚本中
    部分答案在这里:
  • How to check os version in rpmbuild spec file
  • https://unix.stackexchange.com/questions/9296/how-can-i-specify-os-conditional-build-requirements-in-an-rpm-spec-file

  • 我不太确定如何使用 cpack 做到这一点。我不想生成自定义规范文件,因为构建机制已经足够复杂。
  • 另一种选择是在仅存在于 RHEL7 但不存在于 RHEL8 的软件包上添加 %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,这将不起作用。

    最佳答案

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

    关于centos - cpack 限制操作系统版本包可以安装在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63807365/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com