【问题标题】:RPM upgrade does not uninstall previous version of the package installedRPM 升级不卸载以前版本安装的包
【发布时间】:2015-11-03 22:52:04
【问题描述】:

我有当前版本的 rpm 包的两个版本(Build1 和 Build2)。我使用'rpm -U'(rpm升级)来安装它。

Build1 按预期工作,安装新版本后卸载旧版本。

Build2 不会卸载以前的版本。这会在系统上保留两个版本的软件包(Centos 7)。

我正在尝试找出导致这种行为差异的原因。我使用“-vv”选项输出调试日志,看起来 Build2 甚至没有尝试卸载以前的版本。

每个构建的规范文件与我所看到的相同,只是内容似乎略有不同。 rpm 没有任何 pre、post、preun 或 postun 脚本。

这种行为的可能原因是什么?

Build1 的 RPM 日志

[root@localhost ~]# rpm -Uvv --replacefiles --test TestPKG-xxx-12.8.0-0.20150810150544.Build1.i686.rpm
D: ============== TestPKG-xxx-12.8.0-0.20150810150544.Build168.i686.rpm
D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key
D: couldn't find any keys in /var/lib/rpm/pubkeys/*.key
D: loading keyring from rpmdb
D: opening  db environment /var/lib/rpm cdb:0x401
D: opening  db index       /var/lib/rpm/Packages 0x400 mode=0x0
D: locked   db index       /var/lib/rpm/Packages
D: opening  db index       /var/lib/rpm/Name 0x400 mode=0x0
D: Expected size:     49531882 = lead(96)+sigs(180)+pad(4)+data(49531602)
D:   Actual size:     49531882
D: TestPKG-xxx-12.8.0-0.20150810150544.Build168.i686.rpm: Header SHA1 digest: OK (8a8ce80e01a21687044ad204eb8c716b094c8a67)
D:  read h#     831 Header SHA1 digest: OK (2522c1bad2c533a5050dae7c73616694f7ef906a)
D:      added binary package [0]
D: found 0 source and 1 binary packages
D: opening  db index       /var/lib/rpm/Conflictname 0x400 mode=0x0
D: ========== +++ TestPKG-xxx-12.8.0-0.20150810150544 i686/linux 0x1
D: opening  db index       /var/lib/rpm/Basenames 0x400 mode=0x0
D:  read h#     119 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: /usr/bin/perl                                 YES (db files)
D: opening  db index       /var/lib/rpm/Providename 0x400 mode=0x0
D:  read h#     782 Header SHA1 digest: OK (42344bef7cc874fd8d6d57f1aaefb016a658e600)
D:  Requires: ARandomPackage                                YES (db provides)
D:  read h#     663 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libc.so.6                                     YES (db provides)
D:  read h#     663 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libc.so.6(GLIBC_2.0)                          YES (db provides)
D:  read h#     663 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libc.so.6(GLIBC_2.1)                          YES (db provides)
D:  read h#     663 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libc.so.6(GLIBC_2.1.3)                        YES (db provides)
D:  read h#     663 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libm.so.6                                     YES (db provides)
D:  read h#     663 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libm.so.6(GLIBC_2.0)                          YES (db provides)
D:  read h#     205 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: perl(CGI)                                     YES (db provides)
D:  read h#     237 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: perl(DBI)                                     YES (db provides)
D:  read h#     120 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: perl(Data::Dumper)                            YES (db provides)
D:  read h#     778 Header SHA1 digest: OK (e43ae2964d2bdd1d6cced5d0df8e52f9cb8b63c0)
D:  Requires: perl(Test::MachineType)                      YES (db provides)
D:  Requires: perl(Test::NetworkAccessControl)             YES (db provides)
D:  read h#     119 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: perl(strict)                                  YES (db provides)
D:  Requires: rpmlib(CompressedFileNames) <= 3.0.4-1        YES (rpmlib provides)
D:  Requires: rpmlib(FileDigests) <= 4.6.0-1                YES (rpmlib provides)
D:  Requires: rpmlib(PayloadFilesHavePrefix) <= 4.0-1       YES (rpmlib provides)
D:  Requires: rpmlib(PayloadIsBzip2) <= 3.0.5-1             YES (rpmlib provides)
D: opening  db index       /var/lib/rpm/Obsoletename 0x400 mode=0x0
D: ========== --- TestPKG-xxx-12.6.0-0.1041 i686/linux 0x1
D: opening  db index       /var/lib/rpm/Requirename 0x400 mode=0x0
D: ========== recording tsort relations
D: ========== tsorting packages (order, #predecessors, #succesors, depth)
D:     0    0    0    1   +TestPKG-xxx-12.8.0-0.20150810150544.i686
D:     1    0    0    1   -TestPKG-xxx-12.6.0-0.1041.i686
D: installing binary packages
D: Selinux disabled.
D: sanity checking 2 elements
D: computing 880 file fingerprints
D: opening  db index       /var/lib/rpm/Group 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Triggername 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Dirnames 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Installtid 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Sigmd5 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Sha1header 0x400 mode=0x0
Preparing packages...
D: computing file dispositions
D: 0x00000907     4096       548211       186053 /opt/test
D: 0x00000904     4096       451768       125466 /var
D: ========== +++ TestPKG-xxx-12.8.0-0.20150810150544 i686-linux 0x1
D: Expected size:     49531882 = lead(96)+sigs(180)+pad(4)+data(49531602)
D:   Actual size:     49531882
D: TestPKG-xxx-12.8.0-0.20150810150544.i686: Header SHA1 digest: OK (8a8ce80e01a21687044ad204eb8c716b094c8a67)
D: ========== +++ TestPKG-xxx-12.6.0-0.1041 i686-linux 0x1
D: closed   db index       /var/lib/rpm/Sha1header
D: closed   db index       /var/lib/rpm/Sigmd5
D: closed   db index       /var/lib/rpm/Installtid
D: closed   db index       /var/lib/rpm/Dirnames
D: closed   db index       /var/lib/rpm/Triggername
D: closed   db index       /var/lib/rpm/Obsoletename
D: closed   db index       /var/lib/rpm/Conflictname
D: closed   db index       /var/lib/rpm/Providename
D: closed   db index       /var/lib/rpm/Requirename
D: closed   db index       /var/lib/rpm/Group
D: closed   db index       /var/lib/rpm/Basenames
D: closed   db index       /var/lib/rpm/Name
D: closed   db index       /var/lib/rpm/Packages
D: closed   db environment /var/lib/rpm
[root@localhost ~]#

Build2 的 RPM 日志

[root@localhost ~]# rpm -Uvv --replacefiles --test TestPKG-xxx-12.8.0-0.20150811055053.Build2.i686.rpm
D: ============== TestPKG-xxx-12.8.0-0.20150811055053.Build182.i686.rpm
D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key
D: couldn't find any keys in /var/lib/rpm/pubkeys/*.key
D: loading keyring from rpmdb
D: opening  db environment /var/lib/rpm cdb:0x401
D: opening  db index       /var/lib/rpm/Packages 0x400 mode=0x0
D: locked   db index       /var/lib/rpm/Packages
D: opening  db index       /var/lib/rpm/Name 0x400 mode=0x0
D: Expected size:     49755926 = lead(96)+sigs(180)+pad(4)+data(49755646)
D:   Actual size:     49755926
D: TestPKG-xxx-12.8.0-0.20150811055053.Build182.i686.rpm: Header SHA1 digest: OK (770a488f2472bbe57ec211050d7b3bdddcdfaf73)
D:  read h#     831 Header SHA1 digest: OK (2522c1bad2c533a5050dae7c73616694f7ef906a)
D:      added binary package [0]
D: found 0 source and 1 binary packages
D: opening  db index       /var/lib/rpm/Conflictname 0x400 mode=0x0
D: ========== +++ TestPKG-xxx-12.8.0-0.20150811055053 i686/linux 0x2
D: opening  db index       /var/lib/rpm/Basenames 0x400 mode=0x0
D:  read h#     119 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: /usr/bin/perl                                 YES (db files)
D: opening  db index       /var/lib/rpm/Providename 0x400 mode=0x0
D:  read h#     782 Header SHA1 digest: OK (42344bef7cc874fd8d6d57f1aaefb016a658e600)
D:  Requires: ARandomPackage                                YES (db provides)
D:  read h#      19 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libc.so.6()(64bit)                            YES (db provides)
D:  read h#      19 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libc.so.6(GLIBC_2.2.5)(64bit)                 YES (db provides)
D:  read h#      19 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libm.so.6()(64bit)                            YES (db provides)
D:  read h#      19 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: libm.so.6(GLIBC_2.2.5)(64bit)                 YES (db provides)
D:  read h#     205 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: perl(CGI)                                     YES (db provides)
D:  read h#     237 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: perl(DBI)                                     YES (db provides)
D:  read h#     120 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: perl(Data::Dumper)                            YES (db provides)
D:  read h#     778 Header SHA1 digest: OK (e43ae2964d2bdd1d6cced5d0df8e52f9cb8b63c0)
D:  Requires: perl(Test::MachineType)                      YES (db provides)
D:  Requires: perl(Test::NetworkAccessControl)             YES (db provides)
D:  read h#     119 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
D:  Requires: perl(strict)                                  YES (db provides)
D:  Requires: rpmlib(CompressedFileNames) <= 3.0.4-1        YES (rpmlib provides)
D:  Requires: rpmlib(FileDigests) <= 4.6.0-1                YES (rpmlib provides)
D:  Requires: rpmlib(PayloadFilesHavePrefix) <= 4.0-1       YES (rpmlib provides)
D:  Requires: rpmlib(PayloadIsBzip2) <= 3.0.5-1             YES (rpmlib provides)
D: opening  db index       /var/lib/rpm/Obsoletename 0x400 mode=0x0
D: ========== recording tsort relations
D: ========== tsorting packages (order, #predecessors, #succesors, depth)
D:     0    0    0    1   +TestPKG-xxx-12.8.0-0.20150811055053.i686
D: installing binary packages
D: Selinux disabled.
D: sanity checking 1 elements
D: computing 464 file fingerprints
D: opening  db index       /var/lib/rpm/Group 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Requirename 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Triggername 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Dirnames 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Installtid 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Sigmd5 0x400 mode=0x0
D: opening  db index       /var/lib/rpm/Sha1header 0x400 mode=0x0
Preparing packages...
D: computing file dispositions
D: 0x00000907     4096       548193       186053 /opt/test
D: 0x00000904     4096       451768       125466 /var
D: ========== +++ TestPKG-xxx-12.8.0-0.20150811055053 i686-linux 0x2
D: Expected size:     49755926 = lead(96)+sigs(180)+pad(4)+data(49755646)
D:   Actual size:     49755926
D: TestPKG-xxx-12.8.0-0.20150811055053.i686: Header SHA1 digest: OK (770a488f2472bbe57ec211050d7b3bdddcdfaf73)
D: closed   db index       /var/lib/rpm/Sha1header
D: closed   db index       /var/lib/rpm/Sigmd5
D: closed   db index       /var/lib/rpm/Installtid
D: closed   db index       /var/lib/rpm/Dirnames
D: closed   db index       /var/lib/rpm/Triggername
D: closed   db index       /var/lib/rpm/Obsoletename
D: closed   db index       /var/lib/rpm/Conflictname
D: closed   db index       /var/lib/rpm/Providename
D: closed   db index       /var/lib/rpm/Requirename
D: closed   db index       /var/lib/rpm/Group
D: closed   db index       /var/lib/rpm/Basenames
D: closed   db index       /var/lib/rpm/Name
D: closed   db index       /var/lib/rpm/Packages
D: closed   db environment /var/lib/rpm
[root@localhost ~]#

【问题讨论】:

    标签: linux rpm rpmbuild centos7 rpm-spec


    【解决方案1】:
    [root@localhost ~]# rpm -Uvv --replacefiles --test TestPKG-xxx-12.8.0-0.20150811055053.Build2.i686.rpm
    D: ============== TestPKG-xxx-12.8.0-0.20150811055053.Build182.i686.rpm
    .... [SNIP]
    D:  read h#      19 Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
    D:  Requires: libc.so.6()(64bit) 
    

    虽然您的第二个包文件名是“i686”。它实际上是根据 Requires 用于 x86_64 架构的(参见 '(64bit)')。

    因此 rpm 将其视为 multilib 并愉快地并排安装 i686 和 x86_64。

    【讨论】:

    • 谢谢你,@msuchy。 RPM 文件中的一个 .so 文件确实从 32 位更改为 64 位。这是否意味着 rpmbuild 命令会在创建 RPM 时检测到差异?还是 rpm 在尝试进行 rpm 升级时检测到差异?是否可以配置 rpm 使其不被视为 multilib 并且仍然卸载以前的版本?
    • 我正在尝试了解这是如何发生的。您可能尝试通过直接调用 rpmbuild 在 x86_64 上构建 i686 版本。这是错误的。当您使用模拟时,它不会发生。用法是:mock -r epel-7-i386 your.src.rpm
    • 我们在 rpm 内容中直接将 32 位二进制文​​件换成了 64 位二进制文​​件。系统上安装的先前版本包含 32 位二进制文​​件。我相信 rpmbuild 确实检测到了差异,但只是作为其正常处理的一部分(它没有抛出任何错误)。我们支持 32 位和 64 位平台,我们在其中构建自己的源代码,但这个特定的二进制文件并非来自我们。你帮了大忙!
    • 如果我们需要在新版本的rpm中保留64位二进制文​​件,但又不希望它被当成一个multilib包,怎么办呢?我们可以使用规范文件中的一些配置吗?我试过“过时”,但这没有帮助。
    • 对于它的价值,从 32 位到 64 位的更改是一个更正。它不是 32 位的,但旧版本的包不能再更改。所以我们希望保持 rpm 文件原样,但防止它们被视为 multilib。
    猜你喜欢
    • 2011-11-15
    • 2012-03-30
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多