升级从16.04到18.04导致了systemd的故障。

在从16.04升级到18.04的过程中,在最后阶段它显示了以下信息:
The upgrade has completed but there were errors during the upgrade 
process. 

To continue please press [ENTER]

按下[ENTER]键
现在当我执行apt update / apt upgrade命令时,会出现以下提示信息:
The following packages have unmet dependencies:
 systemd : Depends: libsystemd0 (= 229-4ubuntu21.31) but 237-3ubuntu10.48 is installed

https://packages.ubuntu.com/bionic/libs/中查看,无论如何,对于18.04的libsystemd0显示如下。所以我不确定为什么系统认为依赖关系应该是229-4ubuntu21.31。
libsystemd0 (237-3ubuntu10.38 [amd64, i386], 237-3ubuntu10 [arm64, armhf, ppc64el, s390x]) [security]
    systemd utility library

apt upgrade 结束时还会显示以下内容:
You might want to run 'apt-get -f install' to correct these.

当我运行这个时,我得到的结果是:
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:
  cgmanager libargon2-0 libcryptsetup12 libgd3 libip4tc0 libjson-c3 libkadm5clnt-mit9 libluajit-5.1-2 libluajit-5.1-common libvpx3 libxpm4 nginx-common
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  upstart
Suggested packages:
  graphviz upstart-monitor
The following packages will be REMOVED:
  init libpam-systemd systemd systemd-shim systemd-sysv ubuntu-standard
The following NEW packages will be installed:
  upstart
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  init systemd-sysv (due to init)
0 upgraded, 1 newly installed, 6 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/392 kB of archives.
After this operation, 18.1 MB disk space will be freed.
You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'

显然发生了一些非常可怕的事情。
我有点力不从心,希望能得到一些指导/下一步的建议。
谢谢。
添加:按照NOrbert的要求输出。
nexargi@server-02:~$ apt-cache policy systemd libsystemd0 init systemd-sysv
systemd:
  Installed: 229-4ubuntu21.31
  Candidate: 229-4ubuntu21.31
  Version table:
 *** 229-4ubuntu21.31 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     229-4ubuntu21.27 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-security/main amd64 Packages
     229-4ubuntu4 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
libsystemd0:
  Installed: 237-3ubuntu10.48
  Candidate: 237-3ubuntu10.48
  Version table:
 *** 237-3ubuntu10.48 100
        100 /var/lib/dpkg/status
     229-4ubuntu21.31 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     229-4ubuntu21.27 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-security/main amd64 Packages
     229-4ubuntu4 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
init:
  Installed: 1.29ubuntu4
  Candidate: 1.29ubuntu4
  Version table:
 *** 1.29ubuntu4 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     1.29ubuntu1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
systemd-sysv:
  Installed: 229-4ubuntu21.31
  Candidate: 229-4ubuntu21.31
  Version table:
 *** 229-4ubuntu21.31 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     229-4ubuntu21.27 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-security/main amd64 Packages
     229-4ubuntu4 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

根据NOrbert的要求,编辑以包含到Pastebin的链接: @NOrbert 请注意,这些是在恢复16.04后立即获取的。即它们代表任何版本升级之前16.04的状态。

grep -r ^deb /etc/apt --include=*.list https://pastebin.com/85qJeYws

apt-cache policy https://pastebin.com/q8S47v1e

dpkg -l https://pastebin.com/Zp999iuF


您可能需要重新安装,因为您等待的时间有点长,以至于无法成功升级。16.04 在四月份已经停止维护了。 - Nmath
在Launchpad上查看xenial(16.04)的软件包时,发现它需要libsystemd0(229-4ubuntu21.31)。所以尽管升级从16.04到18.04确实已经完成,但似乎仍然有一部分systemd仍停留在xenial版本。 - Purvez
问题似乎是由于您安装了比升级路径仍然有效时所需的版本更新更高的版本,导致依赖关系出现问题。您可以尝试强制安装较旧的版本,但这只会引起更多问题。这看起来像是"依赖地狱"。 - Nmath
1@Nmath 你说:“问题似乎是由于依赖关系被破坏,因为你安装了一个比升级路径要求的新版本。”那么你说的“当升级路径仍然有效时”究竟是什么意思呢?如果它曾经是有效的,那么现在肯定还是有效的吧? - Purvez
当16.04于2021年4月30日到达EOL(终止支持)时,支持也随之结束。这包括了从16.04升级到18.04的支持终止。Ubuntu LTS版本的支持周期为5年,强烈建议在软件不再受支持之前升级到一个受支持的版本。在那个时间点,升级路径已经可用了三年。你所遇到的错误可能是因为你系统上当前安装的软件包版本不受支持。 - Nmath
关于如何从旧的、不受支持的版本升级的问题是可以讨论的(https://askubuntu.com/questions/91815/how-to-install-software-or-upgrade-from-an-old-unsupported-release),所以也许这个问题可以进一步剖析,而不必深入陷入依赖地狱。但在大多数情况下,最好只安装所需的版本,特别是因为您遇到了障碍。 - Nmath
升级仍然是可能的,@Nmath,请不要让OP感到困惑。Purvez,请将apt-cache policy systemd libsystemd0 init systemd-sysv命令的输出添加到问题中。 - N0rbert
@N0rbert非常感谢你的帮助。我已经根据你的要求更新了问题,并附上了输出结果。 - Purvez
@N0rbert 当然,这个可能仍然是可行的,但是到目前为止,OP已经花了多少小时在这上面了呢?而且,当安装一个新系统只需要30分钟时,这真的是最好的选择吗? - Nmath
@Nmath,你在这里没有理解重点。是的,建立一个新的空服务器很容易。然而,安装所有需要在服务器上运行应用程序的软件才是噩梦所在。与其尝试在一个干净的空服务器上重新创建所有不同的软件堆栈部分,我更愿意升级。 - Purvez
你们的备份在哪里?花在这里尝试解决本可以通过正确备份/文档和及时系统维护来避免的问题上所花费的时间,没有什么比已经花费的时间更长了。 - Nmath
@Nmath你在建议什么样的备份方式可以让现有的应用程序集上传到一个全新的服务器上,并且使用升级后的操作系统版本。你一定是住在天上的傻瓜。 - Purvez
大多数服务器应用程序和数据库都具有用户友好的备份和恢复功能。对于那些没有这些功能的,可以使用配置文件来进行备份。如果建议您在软件不再受支持之前保持良好的备份并及时更新软件是愚蠢的话,那么我没有其他建议可以帮助您了。 - Nmath
1个回答

你有一个更新版本的libsystemd0,来自可能是某个地方。要降级,请使用下面的命令:
sudo apt-get install libsystemd0=229-4ubuntu21.31

然后通过安装升级到16.04 LTS。
sudo apt-get update
sudo apt-get install -f
sudo dpkg --configure -a
sudo apt-get dist-upgrade # to get newer dependencies

安装Aptitude是为了将来可能出现的问题准备一个好工具。
sudo apt-get install aptitude

然后重新启动并按照通常的方式启动系统升级程序到18.04 LTS。

@NOrbert 谢谢你提供的信息。然而,系统目前已升级到18.04版本,尽管一些systemd的部分似乎仍停留在16.04版本。目前当我登录服务器时,我看到的是: <请参见下一条评论> - Purvez
欢迎使用Ubuntu 18.04.5 LTS(GNU/Linux 4.4.0-210-generic x86_64)。
  • 文档:https://help.ubuntu.com
  • 管理:https://landscape.canonical.com
  • 支持:https://ubuntu.com/advantage
Ubuntu不提供任何担保,以法律允许的范围为准。新版本 '20.04.2 LTS' 已发布。 运行 'do-release-upgrade' 进行升级。
- Purvez
那么我无法理解。你在上次编辑中提供了信息,https://askubuntu.com/posts/1347966/revisions,其中明确说明你在 server-02 主机上拥有 xenial(16.04 LTS)的软件源。 - N0rbert
@NOrbert。是的,这一点我也不太理解。我有能力再回到16.04版本。我想我会这样做,然后再尝试完整的升级过程。也许我第一次做错了什么。无论如何,非常感谢您的建议和乐意帮助。 - Purvez
@NOrbert 我回退到16.04版本,然后重新运行整个过程...但不幸的是结果还是一样。我正在尝试找到do-release-upgrade的日志,以便查看出了什么问题。请问你能告诉我这个日志的位置吗? - Purvez
这样的日志通常位于/var/log/dist-upgrade/ - N0rbert
@NOrbert 我确实在那里看了,但只有从2017年升级到16.04时的日志。我想到这点,16.04虽然看起来工作正常,但可能并没有完全稳定。如果我恢复回16.04,我应该运行什么来修复任何损坏的软件包?是 apt install -f 吗?或者有没有一种方法来检查16.04的稳定性? - Purvez
很难理解为什么会发生这种情况。我进行了许多从16.04升级到18.04的升级,没有出现关键问题。您需要确定安装包的来源。像aptitude search ~o这样的命令可能会对情况有所启示。此外,您可以将grep -r ^deb /etc/apt --include=*.listapt-cache policydpkg -l的输出分享到pastebin以供进一步分析。 - N0rbert
@NOrbert 我在问题的末尾包含了三个输出的pastebin链接。将讨论转移到聊天室是否有帮助,正如系统建议的那样?我以前从未在askubuntu上使用过聊天室,所以不确定是否正确的做法。 - Purvez
让我们在聊天中继续这个讨论。 - N0rbert