Ubuntu 16.04在使用的时候,默认会自动更新小版本的内核。

如果不进行特殊处理的话在apt滚几次之后很容易出现以下错误:

E: Sub-process /usr/bin/dpkg returned an error code (1)

说实话这个错误很是烦人,如果解决的不及时的话很容易出现个到后面怎么滚都滚不动的情况最后只能重装系统再来一次了。

然而一般出现这个错误的原因基本上都是因为ubuntu 16.04自动升级内核后没及时apt autoremove而导致依赖混乱。

当然把内核锁在一个版本上不更新确实能减少这个错误的发生。然而这篇文章的目的是先看看怎么解决这个错误。

一般来说方法有三种,第一种办法能解决大部分的这种错误。当然很大概率之后还是会持续发生这问题。


第一种办法:重新update软件包信息

1.将现有的info文件夹改名

mv /var/lib/dpkg/info /var/lib/dpkg/info.bak

2.然后再创建出一个新的info文件夹

mkdir /var/lib/dpkg/info

3.apt update一次更新一下

apt update

4.使用 apt -f install来进行安装你要的工具 或者 apt upgrade

apt-get -f install xxxxx

5.然后将新获取的info合并至老的info文件夹中

mv /var/lib/dpkg/info/* /var/lib/dpkg/info.bak

6.还原老的info文件夹。

rm -rf /var/lib/dpkg/info
mv /var/lib/dpkg/info.bak /var/lib/dpkg/info


到这里一般就都能解决这个问题了。然而有些时候会碰上比较硬核的错误上面的流程都走不通的,这时候我们可以尝试一下以下两种方法。

第二种方法:

for i in /usr/share/fonts/X11/* /usr/share/fonts/truetype/*
do sudo touch "$i"
done

然而这方法我从来没用过,网上看到的而已。


第三种方法:

apt-get update --fix-missing
apt-get autoremove && apt-get clean && apt-get install -f xxxx

至此,如果以上三种方法都无法解决这个问题的话,我觉得你恐怕需要重装个系统并且从一开始就把内核给锁了。
锁内核教程《锁定kernel版本,禁止Ubuntu 16.04 apt自己更新kernel》