解决dpkg/apt-get error : 子进程 post-installation script 返回了错误号 1

1 问题发现
前段时间安装screen的时候, 直接Ctrl+C终止了, 导致后来安装软件都报错, 错误信息如下

有 1 个软件包没有被完全安装或卸载
解压缩后会消耗掉 0B 的额外空间
您希望继续执行吗?[Y/n] y

……

dpkg: error processing screen (–configure):
子进程 已安装 post-installation 脚本 返回了错误号 1
在处理时有错误发生:
screen
子进程 已安装 post-installation 脚本 返回了错误号 1

2 问题解析
一般来说是由于我们在安装的过程中突然中止, 所以导致的环境变量异常, 软件已经可能安装了, 但是系统的信息却没有更新

软件的状态信息有误, 状态信息在/var/lib/dpkg/status查看

软件的配置信息不全, 位于/var/lib/dpkg/info/.*

3 问题解决
在解决问题之前, 请先删除出问题的软件包, 等待问题解决后, 再重新安装

3.1 方法1 清除状态信息
对于dpkg安装的软件包, 我们可以从/var/lib/dpkg/status查看到其安装状态

如果希望查看screen的安装状态, 可以使用如下命令查看其在哪一行

sudo cat -n /var/lib/dpkg/status | grep “Package: screen” # 查看在某一行
查看到位于第31103行, 然后查看此处的信息

sudo cat /var/lib/dpkg/status | tail -n +31103 | head -n 28
查看到位于第<code>31103</code>行, 然后查看此处的信息

由于我们的往问题已经解决, 可以看到我们的状态时安装成功的, 否则的话, 修改文件的内容将状态的信息删除

sudo vim /var/lib/dpkg/status
找到Package: ,比如Package: screen

删除这部分的描述, 删到下个Package: XXX前就好. 存档后, 再进行操作就OK了。

3.2 方法2 清除info文件
如果安装成功的软件, info目录下会存储着其安装和配置的脚本信息, 用于在安装和卸载的过程中触发执行, 我们可以检查

删到下个Package: XXX前就好

主要检查文件是否有缺失, 如果有缺失, 那么就删除他们, 然后重装该软件即可

sudo rm /var/lib/dpkg/info/<package name>.*
比如sudo rm /var/lib/dpkg/info/scerrn.*, 存档后,再进行重新安装就OK了

3.3 方法3 重新生成info列表
一般来说, 前面两种方法之一即可解决该问题, 如果还是没觉得, 可以重建info列表

首先将info文件夹更名备份

sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old
再新建一个新的info文件夹

sudo mkdir /var/lib/dpkg/info
更新缓存信息

sudo apt-get update, apt-get -f install
恢复info文件夹的内容, 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_old文件夹下

sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old
把自己新建的info文件夹删掉

sudo rm -rf /var/lib/dpkg/info
把以前的info文件夹重新改回名字

sudo mv /var/lib/dpkg/info_old /var/lib/dpkg/info

LEAVE A REPLY

loading