V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
0xroot
V2EX  ›  程序员

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

  •  
  •   0xroot · 2022-05-08 09:57:45 +08:00 · 3843 次点击
    这是一个创建于 930 天前的主题,其中的信息可能已经有所发展或是发生改变。
    源码编译的 glibc-2.29 ,make install 之后 ldconfig 完 shell 就异常了:
    ls
    11928 segmentation fault (core dumped) ls --color=tty


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

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

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

    我一般是拿 Debian 做 glibc 缝合怪的,很少会出问题。
    0xroot
        10
    0xroot  
    OP
       2022-05-08 17:28:55 +08:00 via iPhone
    @msg7086 咨询了一下开发者,确实是需要 20.04

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