操作环境
master@ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.6 LTS Release: 16.04 Codename: xenial
报错背景
我之前使用添加 PPA 源的方式尝试安装过 Sublime Text 3, 但是由于网络环境的问题没有安装成功,因此我终止了安装进程并删除了为其配置的 PPA 源。但是,之后我在使用 apt-get install xxx
安装其他软件时却出现了如下错误提示:
E: The package sublime-text-installer needs to be reinstalled, but I can't find an archive for it.
例如:
master@ubuntu:~$ sudo apt-get install calibre [sudo] password for master: Reading package lists... Done Building dependency tree Reading state information... Done E: The package sublime-text-installer needs to be reinstalled, but I can't find an archive for it.
解决过程
报错说 sublime-text-installer
这个软件包需要被重新安装,但是系统却找不到有关存档文件了。
在 Ubuntu 系统中,我们通常有两种方式安装一个软件,一种是使用 dpkg
, 使用这种方式要求我们拥有相应软件包的 .deb
格式文件,而且 dpkg
在安装过程中不会自动解决软件的依赖关系,如果需要解决依赖关系,她只会把这些依赖关系打印到终端上,让操作者自己判断。而 apt-get
则是一个自动化的软件包管理器,不需要使用 .deb
格式的安装包即可安装,而且安装过程中还能够自动解决依赖关系。apt-get
是基于 dpkg
实现的一款软件包管理器,因此,在尝试解决使用 apt-get
过程中出现的问题时,可能需要去修改和 dpkg
有关的配置文件。
我们使用 VIM 打开 /var/lib/dpkg/status
这个文件,该文件包含系统中执行过安装操作的软件的安装状态。那些成功完成安装的软件会显示 “Status: install ok installed”, 例如:
Package: wget Status: install ok installed Priority: important Section: web Installed-Size: 884 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: amd64 Multi-Arch: foreign Version: 1.17.1-1ubuntu1.5 ...
但是当我们搜索 “sublime-text-installer” 时却找到:
Package: sublime-text-installer Status: install reinstreq half-installed Priority: extra Section: misc Architecture: all Version: 3126-2~webupd8~1
由状态信息中的 “half-installed” 我们知道,”sublime-text-installer” 的安装过程并没有正常完成。
此时,先对 /var/lib/dpkg/status
进行一个备份:
sudo cp -p /var/lib/dpkg/status status.bak0
然后删除 /var/lib/dpkg/status
文件中的这段信息:
Package: sublime-text-installer Status: install reinstreq half-installed Priority: extra Section: misc Architecture: all Version: 3126-2~webupd8~1
保存退出后,再使用 apt-get
安装程序时没有发生报错,程序可以正常完成安装。
至此,问题解决。
EOF