glibc 难题-如何撤消部分升级?

glibc 难题-如何撤消部分升级?

这个周末,我的同事在我们的 Ubuntu 10.04.04 LTS 服务器上安装了 memcached,本来应该很简单,但是却出了问题。我仍在试图弄清楚细节,但我可以告诉你:

$ /lib/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.11.1-0ubuntu7.12) stable release version 2.11.1, by Roland McGrath et al.
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.3.
Compiled on a Linux >>3.2.0-23-generic<< system on 2012-11-15.
Available extensions:
       crypt add-on version 2.1 by Michael Glad and others
       GNU Libidn by Simon Josefsson
       Native POSIX Threads Library by Ulrich Drepper et al
       BIND-8.2.3-T5B

然而,我也看到了这一点:

$ ldd --version
ldd (Ubuntu EGLIBC 2.15-0ubuntu10.5) 2.15
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

与另一台 Ubuntu 10.04.04 LTS 机器相比,我知道 2.11.1 才是它应该在的位置,除非我们尝试使用升级工具升级到 Ubuntu 12.04 LTS。但最好的方法是什么?我是否要从工作机器上复制库直到一切正常,或者有更好的方法吗?

答案1

好的,我想我们知道发生了什么。几个月前,在查看每日日志监控报告时,我发现有人开始运行 dist-upgrade。我问了他们,​​他们说他们认为他们在本地 Linux 机器上,而不是我的服务器上,并且一意识到有问题就 ^C 了。

一切看起来都很好,所以我没有多想...直到另一个同事在安装 memcached 时,由于某种可能相关的原因,安装遇到了问题,因此他使用了各种强制升级选项之一,然后一切都变得一团糟。

很多东西都坏了:apt/aptitude,任何复杂的东西,甚至 man。但 dpkg 可以工作!如果你看一下,你会发现系统每次发布/更新时都有每个标准库的存档。通过仔细反复下载软件包、安装/强制恢复到该版本、重新检查依赖项、再次下载,我们能够将系统重新组合到当时所有相关库的完全相同的版本。我认为我们必须使用一次“保留”选项来防止循环依赖性造成麻烦。花了几个小时,但我们让系统恢复到原始状态。然后我们重新启动(只是为了确保——自上次重新启动以来已经 253 天了),然后进行标准升级以获得最新版本的 Ubuntu 10.04 LTS,然后再次重新启动。瞧——保存了。

什么样的恶梦!

得到教训:

  1. 当有人意外开始升级您的系统时,应更加认真地对待;
  2. 确保登录时所有机器都能被清楚识别;
  3. 请务必关注较小的版本,因为这样我们就不会去档案馆了;
  4. 感谢那些疯狂的人,他们保留了每个系统版本的每个库版本的档案!

相关内容