[Share Experiences] 记一次更新出错后的恢复
Tofloor
poster avatar
吉吉如律令
deepin
2023-09-01 19:40
Author

此前工作比较忙,大概一个月都没打开过deepin,更新时已经有120个软件包需要升级了,升级需要大半天时间,这半天时间我就去忙其他事情,等回来时,屏幕已经自动关闭了,按电源键没反应,多按了几下,然后电脑就重启了。。。

进入系统后,重新在终端执行命令更新,然后就报错 E: Sub-process /usr/bin/dpkg returned an error code (1)

我此前遇见过类似的问题,原因是dpkg安装软件出现问题或者中断导致的,只要我关机或重启电脑,之后就会无法进入系统。我也尝试过网上的几种解决方案,但都以失败告终。

以下是我尝试过的几种方案:

  • 方案一:重新配置 dpkg database

重新配置 package database,直接运行一下命令即可:

sudo dpkg --configure -a

这一命令把那些已经解压但是没有被安装的package进行重新配置。在特定的时间中断安装可能会造成这一错误。这一命令尤其适用于安装进程被中断的情况。

  • 方案二:强制安装该软件

尝试自动解决依赖问题,安装该软件,执行以下命令:

sudo apt-get install -f

-f选项意味着修复问题。它会尝试修复损坏的依赖信息。这常常适用于解决因为网络问题而导致的安装失败。

  • 方案三:卸载存在问题的软件

卸载安装出错的软件,运行如下命令:

sudo apt-get remove --purge package_name

这一命令会卸载相关软件的所有痕迹。

  • 方案四:清除所有无用的软件

如果是旧的、过时的、无用的软件造成的错误,运行如下命令

sudo apt autoremove

卸载无用的软件

上面这几个方案不仅没解决问题,有的反而还导致了更多的问题,所以我索性重装了一遍deepin,但是熬夜装好deepin的第二天,我作死使用了 sudo apt dist-upgrade来更新系统(血泪教训,大家轻易不要使用这个有风险的升级命令),然后出现了同样的报错,唯一的区别是这次告诉了我是安装 linux-firmware时出现了问题

$ sudo apt dist-upgrade
正在设置 linux-firmware (1.202.13) ...
update-initramfs: Generating /boot/initrd.img-6.1.32-amd64-desktop-hwe
setupcon is missing. Please install the 'console-setup' package.
I: The initramfs will attempt to resume from /dev/sdb3
I: (UUID=174f5328-92f0-4d38-b461-3d878e984155)
I: Set the RESUME variable to override this.
live-boot: core filesystems devices utils udev blockdev dnsE: /usr/share/initramfs-tools/hooks/live failed with return 1.
update-initramfs: failed for /boot/initrd.img-6.1.32-amd64-desktop-hwe with 1.
dpkg: 处理软件包 linux-firmware (--configure)时出错:
 已安装 linux-firmware 软件包 post-installation 脚本 子进程返回错误状态 1
在处理时有错误发生:
 linux-firmware
E: Sub-process /usr/bin/dpkg returned an error code (1)

此时我并没有备份系统,这意味着不解决这个问题我就得再重装一遍系统,这个问题我都碰上这么多次了,其他人碰见的肯定也不少,网上不应该没有解决的方案的,所以我再次打开搜索引擎开始查找其他的解决方案,终于找到了一个

如果你知道导致这一错误的软件包,你可以手动删除相关的文件。这些文件通常在 /var/lib/dpkg/info文件夹下。执行如下命令(package_name替换成出现问题的软件包名称,比如我出现问题的软件包是linux-firmware)

sudo ls –l /var/lib/dpkg/info | grep –i package_name

这一命令会将你安装的软件的所有引用列出来,之后通过如下命令删除它们:

sudo mv /var/lib/dpkg/info/package_name.* /tmp

这一命令将相关文件移动到 /tmp文件夹下,之后运行如下命令进行更新 sudo apt-get update

按照这个方案试了一下,果然恢复正常了

$ sudo ls -l /var/lib/dpkg/info | grep -i linux-firmware
-rw-r--r-- 1 root  root   164074  8月30日 15:37 linux-firmware.list
-rw-r--r-- 1 root  root   194213  7月28日 09:08 linux-firmware.md5sums
-rwxr-xr-x 1 root  root      105  7月28日 09:08 linux-firmware.postinst
-rwxr-xr-x 1 root  root      211  7月28日 09:08 linux-firmware.preinst
$ sudo mv /var/lib/dpkg/info/linux-firmware.* /tmp

此外,我还看见了一种解决方案,但因为系统恢复正常了,所以没有再做尝试了,请坛友们帮忙看看是否可行?

执行以下命令重写package file

sudo dpkg –i ––force–overwrite /var/cache/apt/archives/full_name_of_package

full_name_of_package可以执行以下命令进行搜索:ls /var/cache/apt/archies/*package_name*

Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-09-01 20:04
#1
It has been deleted!
忘记、过去
deepin
2023-09-01 20:17
#2

其实处理方式是错误的,里面有问题的是 E: /usr/share/initramfs-tools/hooks/live failed with return 1.

不解决这个脚本执行报错的问题,后续所有涉及到 update-initramfs 的操作都会报错的

Reply View the author
fslong
deepin beta test group
2023-09-01 20:42
#3

其实是没更新完,有需要你手动选y或者n的选项,在那待机了,然后你回来后没耐心,没等到唤醒就让你强制关机了,不出意外就有鬼了。

当然也有可能是睡眠睡死的bug,有的电脑deepin现在待机就会死机。

正确做法是要挂机更新就选择永不待机。

跟dist-upgrade一点关系都没。

Reply View the author
吉吉如律令
deepin
2023-09-01 21:34
#4
fslong

其实是没更新完,有需要你手动选y或者n的选项,在那待机了,然后你回来后没耐心,没等到唤醒就让你强制关机了,不出意外就有鬼了。

当然也有可能是睡眠睡死的bug,有的电脑deepin现在待机就会死机。

正确做法是要挂机更新就选择永不待机。

跟dist-upgrade一点关系都没。

我是碰见两次出错,第一次是因为没更新完中断了,第二次是才是dist-upgrade更新出错了

Reply View the author
神末shenmo
deepin
Spark-App
2023-09-01 21:40
#5
忘记、过去

其实处理方式是错误的,里面有问题的是 E: /usr/share/initramfs-tools/hooks/live failed with return 1.

不解决这个脚本执行报错的问题,后续所有涉及到 update-initramfs 的操作都会报错的

有个 open开头的包,也提供了liveboot,我现在没有linux不知道是哪个包

apt-file搜一下这个出错的钩子的绝对路径,一个open开头的包,能解决

不要删postinst

Reply View the author
babyfengfjx
Super Moderator
CQA
2023-09-01 21:56
#6

首先这个过程还是值得分享的,能够去解决问题,当然升级首选还是通过控制中心来操作,可以提升可靠性。

Reply View the author
忘记、过去
deepin
2023-09-01 22:13
#7
神末shenmo

有个 open开头的包,也提供了liveboot,我现在没有linux不知道是哪个包

apt-file搜一下这个出错的钩子的绝对路径,一个open开头的包,能解决

不要删postinst

这个钩子文件是 live-boot-initramfs-tools 提供的......

Reply View the author
dgmenghuan
deepin
2023-09-01 22:33
#8

tail

Reply View the author
来自Ubuntu的某位用户
deepin
2023-09-02 15:58
#9

之前发现基于archlinux的发行版遇到断电还能正常开机进入图形界面

基于Debian的Linux发行版遇到断电有可能能开机,但是进不了图形界面

Reply View the author
神末shenmo
deepin
Spark-App
2023-09-02 20:34
#10
忘记、过去

这个钩子文件是 live-boot-initramfs-tools 提供的......

open-infrastructure-system-boot

sudo apt install open-infrastructure-system-boot

这个包也提供了,而且能用

Reply View the author