Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Centos 可以在上安装cpack restrict OS版本包_Centos_Redhat_Rpm_Rpmbuild_Cpack - Fatal编程技术网

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

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

我为几个操作系统版本创建包,包括RHEL7和RHEL8(或者大部分都是CentOS7和8)

可以安装为.el7构建的软件包。在el8。但它通常不起作用(例如,由于未定义的符号等)。 理想情况下,我希望安装失败,并显示一条错误消息,如“此软件包仅适用于RHEL7/CentOS7”

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

如果您还可以给出适合Debian版本的解释,则可以获得额外的积分


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

  • 请参阅:
  • 在安装时在预安装脚本中选中
    uname-r
    部分答案如下:
    我不太清楚如何使用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,这将不起作用。

    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/*
    。尽管不管你做什么,都会有人找到成为更好的白痴的方法,但我相信问题最好是大声尖叫,尽早解决,而不是耍花招。