维护 32 位和 64 位版本的 rpm

维护 32 位和 64 位版本的 rpm

让我解释一下,我负责将我们公司的部分产品从32位更新到64位。

最后,我们应该有一个 64 位内核 + 32 位应用程序 + 一些 64 位应用程序。在这种情况下,我们推断我需要一些 rpm 的 32 位和 64 位版本,主要是依赖项,但在我开始使用依赖项后,情况变得有点难看。

假设我只有一个程序 Program1,它是 64 位的,系统的其余部分是 32 位的。该程序1,需要libgcc。在系统上完成任何操作之前,我会查询我的实际 libgcc 版本

$>rpm -qa --queryformat '%{NAME}.%{ARCH}\n' | grep libgcc

以及回应:

$>libgcc.i386

我去安装 64 位的 libgcc rpm:

$>rpm -ivh --force --ignorearch libgcc-4.3.2-7.x86_64

但现在,经过查询

$>rpm -qa --queryformat '%{NAME}.%{ARCH}\n' | grep libgcc

我只收到一项,而不是两项

$>libgcc.x86_64

如果我检查文件,库和程序会按预期运行,因此不会有任何麻烦......直到我想更新两个版本中的通用基础设施。

现在假设有新的通用包,例如commonlibraries.i386.rpm 和commonlibraries.x86_64.rpm。

如果我想升级 commonlibraries.i386,它需要 libgcc.i386,正如我们所见,在更新 x86_64 后,仅报告一种架构,因此升级过程失败。

有趣的是,在我的工作站中,我可以获得两个版本,

$ rpm -qa --queryformat '%{NAME}.%{ARCH}\n' | grep libgcc
libgcc.x86_64
libgcc.i686

但在我们的产品上,看起来不可能为多个架构使用相同的包(这种情况发生在某些包上,例如 libgcc,但不会发生在其他包上,例如 kerberos5-libraries)。有没有哪位大师过去遇到过这个问题。

我已经读过这里https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=380441运行 rpm -e --justbd --nodeps PackageName 并随后安装 rpm...但这不起作用。

答案1

最终我们实现了向 64 位的迁移。该问题看起来更像是旧发行版上的打包问题,而不是真正的 32-64 位问题。

当我尝试不强制安装 libgcc 时,它与 %post 宏部分的一些二进制文件发生冲突,例如 post_libgcc_upgrade。因此,对于每个 32-64 位冲突的 rpm 软件包,我们“丢失”了该 32 位软件包。

最后,我从 rpm 包及其脚本集中获取了整个依赖项,并为冲突的文件创建了不同名称的我自己的 rpm 包,并相应地修改了脚本。花了几天时间收集所有信息并对其进行了正确测试,但这是值得的。

不管怎样,也许这对某人有帮助,这就是我发布我采取的解决方案的原因。

相关内容