更新中断和软件包混乱:如何手动删除旧软件包?

更新中断和软件包混乱:如何手动删除旧软件包?

从 16.04 切换到 18.04后do-release-upgrade,出现了一些问题,机器处于“中间”状态,存在许多损坏的依赖关系问题。我的软件包树一团糟,我绝望了…… ;-)

我尝试了很多方法(包括dpkg --configure -a,用随机删除包裹dpkg --force depends -P <pkg-name>,以及其他方法),但目前我有点陷入困境。

因此,当我尝试:

$ sudo apt --fix-broken install
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
   (here 20 lines)
The following additional packages will be installed:
... (here 5 lines)
 Suggested packages:
 ... more
Recommended packages:
 ... more
The following packages will be REMOVED:
 ... more
The following NEW packages will be installed:
 ... more (10 lines)
28 upgraded, 6 newly installed, 1 to remove and 327 not upgraded.
228 not fully installed or removed.
Need to get 0 B/13,3 MB of archives.
After this operation, 2 771 kB of additional disk space will be used.
Do you want to continue? [Y/n] 

到目前为止,我什么都不怕。但现在,进入Y

Extracting templates from packages: 100%
(Reading database ... 977800 files and directories currently installed.)
Removing ubuntu-advantage-tools (27.0.2~18.04.1) ...
Traceback (most recent call last):
  File "<string>", line 2, in <module>
  File "/usr/lib/python3/dist-packages/uaclient/apt.py", line 9, in <module>
    from uaclient import gpg
  File "/usr/lib/python3/dist-packages/uaclient/gpg.py", line 3, in <module>
    import shutil
ModuleNotFoundError: No module named 'shutil'
dpkg: error processing package ubuntu-advantage-tools (--remove):
 installed ubuntu-advantage-tools package pre-removal script subprocess returned error exit status 1
Errors were encountered while processing:
 ubuntu-advantage-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

所以这听起来像是一个 Python 错误,据我所知,它找不到shutil。所以我手动下载了我认为是这个东西的东西: https://packages.ubuntu.com/bionic/python-backports-shutil-get-terminal-size 并使用以下命令手动安装:

sudo dpkg -i python-backports-shutil-get-terminal-size_1.0.0-5_all.deb

apt --fix-broken install再次尝试还是会回到同一个地方。

我对 Python 的了解有限,因此不能确定这是否是真正的问题,但欢迎任何帮助。否则,下一步可能是从头开始重新安装,但我真的希望避免这种情况。

目前我可以手动安装软件包(从https://packages.ubuntu.com/然后dpkg -i),但就是这样,其他一切都失败了。

例如,如果我尝试安装libpython3.6-stdlib

$ sudo apt-get install libpython3.6-stdlib

我得到:

libpython3.6-stdlib : Depends: libpython3.6-minimal (= 3.6.9-1~18.04ubuntu1.4) but 3.6.13-1+xenial2 is to be installed

这意味着我仍然有来自 16.04 (Xenial) 的软件包。

我如何手动消除所有 16.04 软件包?

附加信息(机器现在仅通过控制台启动):

  • $ python --version=> Python 3.6.13
  • $ lsb_release -a不可用
  • $ uname -a告诉我它是 4.15 内核(似乎与 18.04 一致)

答案1

值得一提的是:关键点实际上在这里:

dpkg: error processing package ubuntu-advantage-tools (--remove):
 installed ubuntu-advantage-tools package pre-removal script subprocess returned error exit status 1

整个过程由于包的“预删除”脚本失败而失败ubuntu-advantage-tools(不知道那是什么东西!)。

所以我做了:

$ sudo mv /var/lib/dpkg/info/ubuntu-advantage-tools.prerm /var/lib/dpkg/info/ubuntu-advantage-tools.prerm_OLD

我就能完成sudo apt --fix-broken install命令了。

重新启动,然后出现另一个问题(键盘无法识别),使用以下方法解决了另一个问题,在恢复模式启动后:

$ sudo apt-get install xserver-xorg-input-all

终于能够以图形方式启动了,但是……包管理器仍然引用 xenial (16.04),仍然存在一些问题。我会发布另一个问题。

答案2

这听起来像是一个非常糟糕的系统;您可能想让它摆脱困境,即重新安装。如果您还没有单独的/home文件系统,请复制您的主目录和您投入工作的所有内容,然后重新开始以获得一个干净的系统。

我还会复制一些文件/etc,以防万一某些重要的配置文件值得挽救(但除非绝对必要,否则我会将其复制到新系统)。

这样想想:该系统为您服务了很多年(2016 年之后的某个时间,因为它是 16.04);让它安息吧。;-) 现在是时候来一些新的和干净的东西了。

我曾经给自己列了一个清单,列出了我对新安装的 Ubuntu 所做的工作,以使其达到我认为最可用的状态;也许你可以从中获得一些启发:https://github.com/shundhammer/huha-linux-tips/blob/master/doc/ubuntu-tips.md(有些部分可能略微过时;没关系)

相关内容