• 请不要在回答技术问题时复制粘贴 AI 生成的内容
0xroot
V2EX  ›  程序员

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

  •  
  •   0xroot · May 8, 2022 · 5468 views
    This topic created in 1644 days ago, the information mentioned may be changed or developed.
    源码编译的 glibc-2.29 ,make install 之后 ldconfig 完 shell 就异常了:
    ls
    11928 segmentation fault (core dumped) ls --color=tty


    现在还原的话应该咋操作?重新安装 kernel 貌似不行,感谢!!!
    19 replies  •  2022-05-09 00:48:06 +08:00
    lcdtyph
    lcdtyph
    May 8, 2022 via iPhone❤️2
    1
    用 18.04 的镜像引导进入 try ubuntu
    然后 mount 你自己的硬盘,把 try ubuntu 环境里的 libc 复制到你硬盘里对应位置就行了

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

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

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

    @findex 感谢解答,第一次踩 glibc 的坑
    seers
    seers
    May 8, 2022 via Android
    11
    @Chingim 冷知识,golang 运行时依赖 glibc ,但是只要不是上古版本基本上都能跑
    lcdtyph
    lcdtyph
    May 8, 2022
    12
    @seers #11
    冷冷知识,golang build 的时候设置 CGO_ENABLED=0 可以运行时也不依赖 glibc
    FranzKafka95
    FranzKafka95
    May 8, 2022 via Android
    13
    @lcdtyph 冷啥知识,只要有 CGO 就对 glibc 有依赖,再开启 CGO 的情况下又想避免 glibc 版本依赖,还得使用静态链接。
    FranzKafka95
    FranzKafka95
    May 8, 2022 via Android
    14
    golang 某些库是必然依赖 cgo ,如 net, os/user 还有 sqlite
    FranzKafka95
    FranzKafka95
    May 8, 2022 via Android
    15
    @seers ubantu18.04 的 glibc 版本好像是 2.27 ,某些 golang 库跑不了
    wwqgtxx
    wwqgtxx
    May 8, 2022
    16
    @FranzKafka95 net 从 N 个版本开始就不依赖 cgo 了,至于 sqlite 也有 pure go 的版本,哪有什么必然依赖的
    wwqgtxx
    wwqgtxx
    May 9, 2022❤️1
    17
    net 关于 CGO 的文档: https://pkg.go.dev/net#hdr-Name_Resolution
    sqlite 的 pure go 版本: https://pkg.go.dev/modernc.org/sqlite
    lcdtyph
    lcdtyph
    May 9, 2022 via iPhone
    18
    @FranzKafka95 我当然知道 cgo 与 c runtime 的依赖,我只是在回复那一层说 golang 运行时依赖 libc
    feather12315
    feather12315
    May 9, 2022 via Android
    19
    依赖 glibc 的,是因为动态链接 glibc 时指定了 glibc 的版本( objdump -T xxx 可以看到 @glibc-xx )。
    为啥这么指定?因为涉及 abi 兼容性。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   689 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 401ms · UTC 20:04 · PVG 04:04 · LAX 12:04 · JFK 15:04
    ♥ Do have faith in what you're doing.