Tumbleweed 更新时 librpm 被意外移除

在使用zypper dup升级到 Tumbleweed 20240202 时,遇到

error: unpacking of archive failed on file /etc/ssl/engdef.d;65c05b11: cpio: File from package already exists as a directory in system
error: openssl-3-3.1.4-3.2.x86_64: install failed
error: openssl-3-3.1.4-2.1.x86_64: erase skipped
( 514/5844) 正在安装:openssl-3-3.1.4-3.2.x86_64 ..........................................................................................[错误]
安装 openssl-3-3.1.4-3.2.x86_64 失败:
错误: Subprocess failed. Error: RPM 失败: 命令退出,状态 1。
中止、重试、还是忽略呢? [a/r/i] (a): a

选择终止后,zypper 的功能无法正常运行:

zypper: error while loading shared libraries: librpm.so.9: cannot open shared object file: No such file or directory
# 通过 find / -name "librpm.so.9" 搜索后发现确实已经没了

在论坛中搜索到类似的 RPM 失败:xxx 后面有详细的错误说明,但是在这台机器上好像什么都没显示。互联网上有个十年前的 类似问题, 需要手动在 rpmfind 搜索并下载缺失的包,但是在使用 rpm -U 安装时又会缺少 liblua 等等,请问这种情况还能救回来吗?

在升级前冲突只卸载了 powerline ,升级使用的是 USTC:OSS 的镜像源,由于 konsole 中设置的 scrolling 太小,前面的具体升级内容忘记记录了。且 zypper log 现在也都不可用。是否只能使用 brtfs 回滚了?

是不是跟 Tumbleweed 更新时 SSH 中断 这个问题类似?

1赞

最好还是先回滚吧,然后再 zypper up 滚上去

2赞

你和我的问题类似,你是在过程当中发生错误被终止,而我是连接断开,进程被终止,在过程当中,某些包被删除了,但是还没有及时安装上最新版本,因为我只是缺少了那么两个关键的包,其中一个是 libsolv-tools,而且他并没有被删除,只是版本对不上了,所以导致无法重建 rpm 数据库,我升级了他,如果你有太多包被删除,那么只能回滚了,

还有你可否告诉我你装的是哪个包,zypper 提示缺少 librpm.so.9,那么你同时再执行一次 rpm --version 看一下 rpm 版本,再查看一下是否有 librpm.so.10 这个库,如果单纯缺少这个库,那么代表版本已经对不上了,升级 zypper 和 rpm-config 还有 libsolv-tools,如你上述的报错,你的问题是缺少 liblua,但是 rpm 并不依赖 lua 库,所以有可能是你装了一个根本不相干的包

1赞

老哥,你的 blog,采用的是哪个云服务商的服务器搭建的

所以我一直想在 Alpine Linux 下编译个全静态链接的 zypper :joy: 另外你的问题应该当时把那个文件夹重命名一下然后选重试。

3赞

rpm --version 已经是 4.19.1 了,是直接去找新的 zypper ,rpm-config ,libsolv-tools 的 rpm 包然后用 rpm 升级这样? 我看到了您在自己主题中的解决方案,谢谢,我试试。

https://rpmfind.net/linux/opensuse/tumbleweed/repo/oss/x86_64/libsolv-tools-0.7.28-1.3.x86_64.rpm
https://rpmfind.net/linux/opensuse/tumbleweed/repo/oss/x86_64/zypper-1.14.68-1.3.x86_64.rpm
https://rpmfind.net/linux/opensuse/tumbleweed/repo/oss/x86_64/rpm-4.19.1-2.2.x86_64.rpm
下载下来,rpm -Uvh 升级

4.19 这个版本的 rpm,已经不存在 librpm.so.9,只有 librpm.so.10,如果更新后还不行,执行 cp /usr/lib64/librpm.so.10 /usr/lib64/librpm.so.9 复制一份过来就好了,虽然库名不一样,但还是一样可以正常调用,zypper 正常,以后如果提示 rpmdb2solv 错误,那么就如上所述升级 libsolv-tools,新版本会自动搜寻 librpm.so.10

我到现在都还没有更新完成,有 4000 多个包需要更新,而且我好像被攻击了,我在服务器上安装了 qbittorrent-nox,一直在做种状态,刚刚登录上去看了一下,死机了

祝好,我按照您的方案解决了,但是对于我还要更新下 libzypp 貌似。

本主题在最后一个回复创建后60分钟后自动锁定。不再允许添加新回复。