如何在Debian上升级glibc?

73
我听说可以使用apt-get install libc6来完成,但是我需要在 /etc/apt/sources.list 中添加一些内容以接收最新的 glibc 版本。
你应该怎么做?
4个回答

93
通过编辑 perror的答案 中的建议,我成功在Debian Wheezy中安装了libc6 2.17
重要提示: 您需要按下CTRL-ALT-F1退出显示管理器。 然后您可以使用 sudo /etc/init.d/slim stop 停止 x (slim)。
(将 slim 替换为 mdmlightdm 或其他名称)
将以下行添加到文件/etc/apt/sources.list中:

deb http://ftp.debian.org/debian experimental main

应更改为:

deb http://ftp.debian.org/debian sid main

然后按照 perror 的余下步骤进行:
更新您的软件包数据库:

apt-get update

安装glibc软件包:

apt-get -t sid install libc6-amd64 libc6-dev libc6-dbg

重要提示: 在完成更新libc6之后,请重新启动计算机,并注释掉或删除刚刚添加的sid来源(deb http://ftp.debian.org/debian sid main),否则您可能会升级整个发行版至 sid。

2
这篇帖子应该得到更多关注。它是对perror帖子的更新,实际上修复了另一篇帖子存在的问题。 - B. Decoster
9
请注意,我不得不将“apt-get -t sid install libc6-amd64 libc6-dev libc6-dbg”替换为“apt-get -t sid install libc6 libc6-dev libc6-dbg”,但这很好用,因为安装了amd64版本。 - B. Decoster
@Fezvez:在你的“/etc/apt/sources.list”文件中移除“deb http://ftp.debian.org/debian sid main”这一行后,有出现任何问题吗? - Throoze
10
不必再从 /etc/apt/sources.list 中移除 sid 源,你可以使用 Apt-Pinning 来确保不会意外更新其他内容:http://jaqque.sbih.org/kplug/apt-pinning.html - Jürg Lehni
3
+1。另外请参阅 https://wiki.debian.org/DebianExperimental,了解如何在保持“stable”分支的情况下仅跟踪来自“sid”/“experimental”的一个软件包。对@JürgLehni评论的+1。 - 1111161171159459134
显示剩余4条评论

54

警告!!! 此解决方案现已过时,请尝试在列表中找到更新的解决方案!


事实上,你现在(我写这条消息的时候)不能轻松地做到这一点。我会尝试解释为什么。
首先,glibc已经不再存在了,它已被eglibc项目所取代。而且,Debian发行版在一段时间前就切换到了eglibc(请参见这里那里,甚至在glibc源代码包页面上也可以找到相关信息)。因此,你应该考虑通过这种命令安装eglibc软件包
apt-get install libc6-amd64 libc6-dev libc6-dbg

amd64替换为您想要的架构类型(请查看此处的软件包列表)。

不幸的是,在unstabletesting中,eglibc软件包的版本只有2.13。只有experimental提供了2.17版本的该库。因此,如果您真的想要2.15或更高版本,请安装来自实验版本的软件包(这并不推荐)。以下是以root用户身份完成此操作的步骤:

  1. 将以下行添加到文件 /etc/apt/sources.list

     deb http://ftp.debian.org/debian experimental main
    
  2. 更新软件包数据库:

     apt-get update
    
  3. 安装 eglibc 软件包:

     apt-get -t experimental install libc6-amd64 libc6-dev libc6-dbg
    
  4. 祈祷!

好了,就这样吧。

2
仅限于libc 2.24-11。 - Owl
请上面的解决方案 - Leozítor

28
您的脚本存在错误,例如,如果您已安装dos2unix,则安装将成功,但如果像我一样没有安装,则会失败并出现依赖项问题。
我是偶然发现这个问题的,因为我正在制作一个脚本文件以便给我的朋友,他是Linux新手,由于我在Windows上编写了脚本,所以我指示他安装它,当时我没有安装dos2unix,因此出现了错误。
这是我为您的解决方案制作的脚本副本,请确保已安装dos2unix。
#!/bin/sh
echo "deb http://ftp.debian.org/debian sid main" >> /etc/apt/sources.list
apt-get update
apt-get -t sid install libc6 libc6-dev libc6-dbg
echo "Please remember to hash out sid main from your sources list. /etc/apt/sources.list"

这个脚本已在3台机器上测试,没有发现任何错误。


我真的不知道你所说的“yours”是什么意思。 - Ale
1
这个对我也起作用! - mccurcio
这个救了我的服务器,我一直遇到段错误,用strace和在互联网上搜索了很久都没有解决。运行这个后,我的服务器libc更新到2.19,一切恢复正常 :-) - Ignacio Belhot Colistro
在Ubuntu 16.04上使用Python 3.5工作。 - habitats

6

更新2022年

如果您需要升级glibc,最安全的解决方案可能是升级您的Linux发行版,因为大多数软件都依赖于glibc。

检查当前的glibc版本

ldd --version

Debian发行版关联的glibc版本

请查看:tracker.debian.org/pkg/glibc

升级您的Debian发行版

摘自如何将Debian 10 Buster升级到Debian 11 Bullseye

  1. 备份您的数据
  2. 更新当前安装的软件包
    • 被标记为“保留”的软件包无法自动安装、升级或删除。这可能会在升级过程中引起问题。要检查是否有被保留的软件包:sudo apt-mark showhold
    • 如果有被保留的软件包,您应该使用sudo apt-mark unhold package_name取消保留软件包,或确保这些软件包不会干扰升级过程。
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt autoremove
  1. 升级Debian发行版
    • 编辑/etc/apt/sources.list: sudo nano /etc/apt/sources.list
    • 更新发行版名称。请参阅Debian SourcesList Wiki
    • 将终端输出设置为仅英文: export LC_ALL=C
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt autoremove
sudo systemctl reboot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接