执行"rpm -Uvh --force xxx.rpm --nodeps"返回错误码135

在一些服务器上通过脚本安装rpm包时候出错(脚本是通过检查rpm命令执行后的返回码来判断逻辑),类似:

sudo rpm -Uvh --force /tmp/XXXXX.x86_64.rpm --nodeps

此时控制台没有任何输出,但是明显没有安装成功,因为此时执行echo $?,输出显示135

这个135的错误码表示什么意思?

Package Already Installed提到了软件包已经安装的情况。上述安装命令中--force--nodeps如果没有的话,是否会提示信息呢?

似乎系统有什么bug,仅仅使用sudo rpm -Uvh /tmp/XXXXX.x86_64.rpm或者sudo rpm -ivh /tmp/XXXXX.x86_64.rpm都没有提供输出信息。

不过,检查系统,确实发现同名并且同一个版本的rpm已经安装

sudo rpm -qa | grep XXXXX

为了能够再次安装,采用先删除该软件的rpm信息,但是不删除实际文件的方法,即使用--justdb参数

sudo rpm -e --justdb XXXX

但是,非常奇怪,上述删除软件包信息的参数--justdb依然没有生效,再次查询sudo rpm -qa | grep XXXXX依然同样存在软件包。

一狠心,直接使用sudo rpm -e XXXX,居然也没有清理掉软件包。

仔细检查了系统的rpm软件包库信息文件,发现一个蹊跷,在/var/lib/rpm目录下的db文件已经损坏了,因为明显看到__db.002大小为0:

-rw-r--r-- 1 root root 1.6M May 17 16:35 __db.001
-rw-r--r-- 1 root root    0 May 17 16:35 __db.002

重建rpm数据库

sudo rpm --rebuilddb

上述命令执行之后,可以看到库文件恢复正常大小

-rw-r--r-- 1 root root 1.6M May 22 23:30 __db.001
-rw-r--r-- 1 root root 176K May 22 23:30 __db.002
-rw-r--r-- 1 root root 669K May 22 23:30 __db.003

此时再次安装软件包就可以完成

$sudo rpm -Uvh --force /tmp/XXXX.x86_64.rpm --nodeps
Preparing...                          ################################# [100%]
Updating / installing...
   1:XXXX       ################################# [100%]

参考

Last updated