通过安装 3 或 4 个小测试包破坏了 Debian 10 稳定服务器...无法再使用 SSH

通过安装 3 或 4 个小测试包破坏了 Debian 10 稳定服务器...无法再使用 SSH

我想在我的 Debian 10 稳定服务器上安装更新版本clone,所以我开始按照第一个评论中的教程进行操作这个帖子

然后,(根据记忆),我在我的服务器上运行了如下内容:

sudo apt-get install libaspell15/testing libgstreamer-plugins-base1.0-0/testing...

...以及这些包的一些强制依赖项。

但是,安装后,我无法sudo再使用,并且在注销服务器后,我无法使用 SSH 重新连接:

> ssh -p 2222 [email protected]

kex_exchange_identification: read: Connection reset by peer
Connection reset by 163.***.**.227 port 2222

所以我完全陷入困境,我(和其他人)依靠该服务器来实现个人和专业目的...(我在该服务器上托管了一个多用户 Nextcloud...)他们我做了一些不可逆转的事情吗?否则,我该如何解决这个问题?

谢谢!

答案1

Debian 10 的libc6版本为 2.28-10+deb10u2,但当前的软件包testing依赖于libc6版本 2.34 或更高版本。所以看起来你的尝试一定触发了 libc 版本更新,这可能是您可以对 Linux 安装进行的最基本的更新。

您是否知道您的系统有 2 个主要版本已过时?当前stable是 Debian 12,当前testing最终将成为 Debian 13。您尝试安装的软件是三个主要版本比您当前的系统状态新。

你所做的不是不可逆转,但肯定不方便逆转。您很可能必须从外部介质(如果是物理服务器)启动或将故障服务器的系统磁盘作为第二个磁盘安装到另一个虚拟机(如果是虚拟机/云服务器)才能开始恢复。如果您有良好的备份策略,从错误前的备份进行完整恢复可能会更快。

一旦您获得了对故障系统的系统磁盘的访问权限,您的第一步应该是读取<failed system mount point>/var/log/dpkg.log并识别每个已更新的软件包,以及之前安装的确切旧版本:grep upgrade <failed system mount point>/var/log/dpkg.log

一旦您知道更新失败之前存在的确切软件包版本,请下载这些软件包,例如使用软件包搜索功能:https://www.debian.org/distrib/packages。如果您无法找到更新失败之前的确切版本,请选择 Debian 10“buster”的最新软件包版本。

您的第一个目标是卸载“测试”中的新软件包,然后降级意外主要版本升级的库软件包。如果恢复操作系统也是 Debian/Ubuntu,类似的命令dpkg --force-downgrade --root=<failed system mount point> <package files that need to be downgraded>可能是最简洁的方法。


如果您的恢复操作系统没有dpkg,那么您可能必须手动提取软件包。其程序是:

cd <directory containing the *.deb files for downgrade>
ar x <something>.deb
cd <failed system mount point>
tar xvf <deb file directory>/data.tar.*z

请注意,手动提取是一种非常强力的方法,可以将基本库恢复到位,以便您的系统能够自行运行,至少在单用户模式下如此。如果这样做,包管理将“认为”升级版本仍然安装,因此您将需要使用标准包管理工具在可以使用工具后立即降级包,原因有两个:

  • 使包管理器的数据库与实际安装的文件匹配
  • 以确保删除属于失败升级的所有文件,这样它们就不会导致进一步的冲突。

相关内容