Ubuntu 18.04 升级 glibc-2.29 导致异常如何还原?

2022 年 5 月 8 日
 0xroot
源码编译的 glibc-2.29 ,make install 之后 ldconfig 完 shell 就异常了:
ls
11928 segmentation fault (core dumped) ls --color=tty


现在还原的话应该咋操作?重新安装 kernel 貌似不行,感谢!!!
4906 次点击
所在节点    程序员
19 条回复
lcdtyph
2022 年 5 月 8 日
用 18.04 的镜像引导进入 try ubuntu
然后 mount 你自己的硬盘,把 try ubuntu 环境里的 libc 复制到你硬盘里对应位置就行了

libc 是用户态的,你重装 kernel 有什么用
0xroot
2022 年 5 月 8 日
@lcdtyph 感谢,我找个优盘试试
hei1000
2022 年 5 月 8 日
glibc 这种系统基础库最好不要自己安装,前一段时间 Archlinux 没有及时更新 glibc 库版本都被好多人骂(比如 https://www.reddit.com/r/archlinux/comments/scisqp/archs_unmaintained_glibc_is_a_security_risk/),因为这种东西可不是普通的软件包,上游不测试好会有很多问题
FranzKafka95
2022 年 5 月 8 日
居然想着动 glibc ,吃亏了吧
aloxaf
2022 年 5 月 8 日
教人往根目录下 make install 装软件的教程是蠢
教人往根目录下 make install 升级 glibc 的教程就是坏了
0xroot
2022 年 5 月 8 日
@FranzKafka95
@hei1000

分析仪带的软件依赖 glibc 特定版本,吃大亏了
Chingim
2022 年 5 月 8 日
所以我特别喜欢 go 发行的软件,下了就能用,而不会提示这库那库不满足要求
findex
2022 年 5 月 8 日
肯定不能单升级 glic ,glibc 可是牵一发动全身,所有工具链(编译器等)得用同一个 glibc 都编译一遍,然后在用新工具链编译一遍以前的软件。
我以前做 Linux 系统的时候,遇到过这个。这个和 kernel 无关。如果你想回去,可以尝试 chroot 手动安装 ubuntu18.04 原装的 glibc ,然后用官方的源下载官方用特定版本 glibc 给你编译好的各种软件。如果你想尝试特定版本的 glibc ,可以走一下自己做一个 Linux 系统……
msg7086
2022 年 5 月 8 日
@0xroot #6 glibc 基本等同于发行版版本了。如果你要用的软件依赖 glibc 的最低版本,那么一般意味着这款软件需要某个特定的 Linux 发行版版本才能运行。你这种情况可以试试添加 Ubuntu 20.04 的源,然后只安装 libc6 关联的包,可以做出一个缝合怪系统来,有一定概率可以正常运行。

我一般是拿 Debian 做 glibc 缝合怪的,很少会出问题。
0xroot
2022 年 5 月 8 日
@msg7086 咨询了一下开发者,确实是需要 20.04

@findex 感谢解答,第一次踩 glibc 的坑
seers
2022 年 5 月 8 日
@Chingim 冷知识,golang 运行时依赖 glibc ,但是只要不是上古版本基本上都能跑
lcdtyph
2022 年 5 月 8 日
@seers #11
冷冷知识,golang build 的时候设置 CGO_ENABLED=0 可以运行时也不依赖 glibc
FranzKafka95
2022 年 5 月 8 日
@lcdtyph 冷啥知识,只要有 CGO 就对 glibc 有依赖,再开启 CGO 的情况下又想避免 glibc 版本依赖,还得使用静态链接。
FranzKafka95
2022 年 5 月 8 日
golang 某些库是必然依赖 cgo ,如 net, os/user 还有 sqlite
FranzKafka95
2022 年 5 月 8 日
@seers ubantu18.04 的 glibc 版本好像是 2.27 ,某些 golang 库跑不了
wwqgtxx
2022 年 5 月 8 日
@FranzKafka95 net 从 N 个版本开始就不依赖 cgo 了,至于 sqlite 也有 pure go 的版本,哪有什么必然依赖的
wwqgtxx
2022 年 5 月 9 日
net 关于 CGO 的文档: https://pkg.go.dev/net#hdr-Name_Resolution
sqlite 的 pure go 版本: https://pkg.go.dev/modernc.org/sqlite
lcdtyph
2022 年 5 月 9 日
@FranzKafka95 我当然知道 cgo 与 c runtime 的依赖,我只是在回复那一层说 golang 运行时依赖 libc
feather12315
2022 年 5 月 9 日
依赖 glibc 的,是因为动态链接 glibc 时指定了 glibc 的版本( objdump -T xxx 可以看到 @glibc-xx )。
为啥这么指定?因为涉及 abi 兼容性。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/851496

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX