首页 文章

仅针对特定体系结构的rpm升级

提问于
浏览
1

我们为32位和64位平台构建了我们产品的rpms . rpm规范中的产品名称定义如下

Name: foo

我们将 --target i586 传递给rpmbuild命令行以构建32位rpm和 --target x86_64 以构建64位rpm . 我们在产品的安装目录中编码rpm arch,以便我们可以同时安装32位和64位版本的产品 .

我们可以安装rpms就好了 . 例如:安装 foo 产品的版本v4.1的32位和64位变体:

rpm -i foo-4.1-i586.rpm
rpm -i foo-4.1-x86_64.rpm

但是当我们尝试升级到版本4.2 32位变体的已安装产品时:

rpm -U foo-4.2-i586.rpm

rmp删除已安装产品的32位和64位变体 . 这是不希望的 . 所以问题是:我们应该如何调整spec文件或rpm命令行,以便我们仅针对所选架构进行升级?显而易见的解决方案是在spec文件中对包名称中的arch进行编码,如下所示:

Name: foo-%{_arch}

但这看起来不像包名称的常用方法 . 请指教 .

1 回答

  • 0

    --target 只需设置%_target,%_target_cpu和%_target_os宏 . 它不能确保您的目标平台构建(除非您的Makefile允许) . 正确的方法是使用mock构建它:

    mock -r epel-7-i386 foo.src.rpm
    

    然后你将获得r32位位软件包,你应该只能升级其中一个 .

相关问题