CentOS 8 GLIBC升级失败系统崩溃抢修实战

这篇具有很好参考价值的文章主要介绍了CentOS 8 GLIBC升级失败系统崩溃抢修实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

服务器为CentOS 8,支持glibc版本为2.28,但编译一个工具的glibc需求版本为2.34,于是非常脑残地参考这篇Tutorial开始升级之旅:下载glibc-2.34,并configure到了系统目录,然后将源码make && make install,然后……

1. 恐怖的问题

几乎所有命令都执行不了了,报类似下面的错误:

symbol lookup error: /usr/lib64/libdl.so.2: undefined symbol: dl_vsym, version GLIBC_PRIVATE

结论是:CentOS 8与高版本glibc不兼容,glibc-2.28有的符号(例如:dl_vsym),但glibc-2.34可能没有。但CentOS 8的大多数程序都依赖这些符号,于是炸裂。

这篇文章指明还有机会在ssh连接时恢复系统环境。可惜的是,博主脑子一热退出了ssh,此后再也无法访问服务器。

2. 参考解决方案

  • centos6.9中glibc升级失败救援+救援模式挂载硬盘
  • Centos7手动升级glibc导致系统异常(无法开机)

总的来说基本思路如下:

  1. 拿一个U盘制作原系统(比如我的系统是CentOS 8,就下载CentOS 8 iso)启动盘
  2. U盘内进入Rescue模式
  3. Rescue模式下重装兼容的glibc包

这里最大的问题在于CentOS镜像太大,下载太费时间。而Debian提供的Live OS小巧易用,并且可以安装rpm包管理器。于是我们采用如下思路抢修:

  1. 制作Debian Live OS
  2. 将原系统挂载到Live OS中
  3. 在Live OS中下载并安装glibc RPM包
  4. chroot检查是否成功恢复

接下来具体介绍抢修过程

3. 抢修实战

3.1 准备工作

  • 制作启动盘(以下为个人制作方法)
    • 准备一个空U盘
    • 下载ventoy
    • 运行ventoy.exe安装至U盘
    • 下载Debian Live OS镜像,下载debian-live-12.0.0-amd64-standard.iso即可,这个镜像最小
    • 将下载的iso复制到U盘中即可
  • 手机数据线(用于为Live OS联网)
  • 前往机房

3.2 抢修流程

  1. 服务器强制关机

  2. 将U盘插入USB口

  3. 开机,选择从U盘启动。不同机器处理方式不同。例如,Dell R740服务器需要开机时按F11,手动选择从U盘启动。但博主抢修的这台机器是惠普的,似乎自己就识别到了U盘

  4. 选择Debian Live OS进入

  5. 进入Live OS后,没有网络。此时手机打开热点,将数据线连接到服务器的USB口上,并从高级选项中选择通过USB共享网络。
    CentOS 8 GLIBC升级失败系统崩溃抢修实战,操作系统,杂记,centos,linux,运维

  6. 此时,服务器上通过ip addr应该能够看到一个多出来的网卡,例如,博主的是enx12c483f98c5a。可以看到该网卡还没有被分配ip地址。
    CentOS 8 GLIBC升级失败系统崩溃抢修实战,操作系统,杂记,centos,linux,运维

  7. 输入sudo dhclient为网卡动态获取ip,ping www.baidu.com测试网络是否连接成功。

  8. 下载rpm包。直接上清华源找对应的rpm包。这里博主升级前就是glibc-2.28。

    cd ~
    wget https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/BaseOS/x86_64/os/Packages/glibc-2.28-228.el8.x86_64.rpm
    wget https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/BaseOS/x86_64/os/Packages/glibc-common-2.28-228.el8.x86_64.rpm
    wget https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/BaseOS/x86_64/os/Packages/glibc-langpack-en-2.28-228.el8.x86_64.rpm
    
  9. 挂载原系统并安装rpm包:

    • 输入sudo lsblk查看原系统在哪个设备上,CentOS一般来说root为/dev/mapper/cl-root,挂载这个分区即可

      sudo mount /dev/mapper/cl-root /mnt
      
    • 安装rpm包

      sudo apt install rpm
      sudo rpm -ivh --nodeps --force --root=/mnt glibc-*.rpm
      
  10. sudo chroot /mnt成功即说明glibc抢修成功

  11. 接下来sudo umount /mnt && sudo shutdown,等待关机后,拔出U盘。

  12. 静待重启……………………难过的事情再次发生了,系统卡在了无休止的Permission Denied中(在加载界面按下esc可查看)
    CentOS 8 GLIBC升级失败系统崩溃抢修实战,操作系统,杂记,centos,linux,运维

3.3 解决启动后Permission Denied

3.3.1 参考方案
  • Centos 8 stuck in boot loop, multiple permission denieds. Any solution to this?
3.3.2 解决

根据上述参考,猜测与selinux有关,于是尝试禁用selinux。具体做法是在grub菜单处,按下e修改command line:将enforcing=0加入到command line最后,然后ctrl + x启动系统。终于成功了!猜测是因为安装rpm的时候破坏了selinux的某些配置,例如发现/.autorelabel文件消失了。至于如何恢复selinux就不在本文的讨论范围之内了。博主非常极端地把selinux关掉了😄。

3.4 解决undefined reference to `__libc_csu_fini’

更新于2023/8/11。恢复后的服务器无法编译,报类似下述错误:
/usr/lib/gcc/x86_64-redhat-linux/8/…/…/…/…/lib64/crt1.o:在函数‘_start’中:
(.text+0x16):对‘__libc_csu_fini’未定义的引用

恢复过程中可能由于--nodeps --force 原因有些依赖包没装好,因此系统起来后需要重装一下:

sudo yum reinstall glibc
sudo yum reinstall glibc-devel

4. 总结

这次抢修经历是非常惊心动魄的,前前后后加起来差不多5、6个小时。多亏了seekstar的帮忙。回过头来,这次抢修最大的教训就是再也不会在服务器环境乱动glibc了。OK,现在可以起飞了🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫🛫文章来源地址https://www.toymoban.com/news/detail-595932.html

到了这里,关于CentOS 8 GLIBC升级失败系统崩溃抢修实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【操作系统】Centos7搭建nfs文件共享服务器实战

    1.NFS介绍 2.环境准备 3.在A服务端机器安装nfs-utils和rpcbind包 4.启动rpcbind检查是否启动了rpcbind服务并监听111端口 5.配置NFS服务的配置文件,参数配置:vi /etc/exports 数据同步与数据异步的区别 数据同步:当系统从内存中向磁盘中持久化数据时,同步发送表示只有当内存中的数据

    2024年02月07日
    浏览(57)
  • linux|操作系统|centos7物理机安装网卡驱动8188gu(内核升级,firmware固件,USB设备管理,module管理)

    目前服务器领域centos7基本是主流的操作系统,而linux相对于Windows来说,软硬件方面的支持是差很多的,在硬件方面来说,以一个免驱的网卡为例,window xp可能不会自动识别到,但Windows10基本都会自动识别到,简简单单的即插即用。根本原因在Windows随着版本的升级,内置的各

    2024年01月20日
    浏览(88)
  • 【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细)

    大家好,又见面了,我是沐风晓月,本文是专栏【运维系列-架构与服务】专栏中的[linux基本功-系统服务实战篇],主要讲解nginx的编译安装和yum安装的方式 此专栏是沐风晓月对Linux常见的服务和架构进行总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。 如果

    2024年02月02日
    浏览(57)
  • 【Linux-编译器gcc/glibc升级】CentOS7.9使用NodeJS18时报错/lib64/libm.so.6: version `GLIBC_2.27‘ not found

    文章已收录至https://lichong.work,转载请注明原文链接。 ps:欢迎关注公众号“Fun肆编程”或添加我的私人微信交流经验🤝 最近做一个前端项目Jenkins的自动构建时,项目使用nodejs18,正好公司Jenkins节点有些不够用,就用了台资源空余比较多的服务器用于充当Jenkins节点,配置好

    2024年02月16日
    浏览(44)
  • centos7 arm服务器编译升级安装动态库libstdc++.so.6,解决GLIBC和CXXABI版本低的问题

    前言         由于centos7内置的libstdc++.so.6版本太低,导致安装第三方包的时候,会报“CXXABI_1.3.8”不存在等问题。         自带的打印如下: 如图 升级 注意:当前的libstdc++.so.6.0.25只适用于centos7 arm服务器,其他系统慎用! 1、把libstdc++.so.6.0.25拷贝到/usr/lib64目录下 2、备份

    2024年01月18日
    浏览(51)
  • 关于version `GLIBC_2.34‘ not found解决办法(非升级glibc库或Linux系统)

    源代码 使用arm-linux-gnueabihf-gcc交叉编译 部署到开发板后运行报错 使用bing和百度搜索 version `GLIBC_2.34’ not found 得到的解决办法归纳为一下几点 升级部署环境系统版本,降低打包编译环境的系统版本 在部署环境中下载符合版本的gblc库(一般高于原来的环境) 使用工具gblc-al

    2023年04月25日
    浏览(42)
  • 【playwright】centos系统安装提示version `GLIBC_2.27‘ not found

    在centos执行playwright install时,报错 /home/PlaywrightAllure/venv/lib/python3.7/site-packages/playwright/driver/node: /lib64/libm.so.6: version `GLIBC_2.27\\\' not found (required by /home/PlaywrightAllure/venv/lib/python3.7/site-packages/playwright/driver/node) /home/PlaywrightAllure/venv/lib/python3.7/site-packages/playwright/driver/node: /lib64/libc.

    2023年04月26日
    浏览(44)
  • 安装GLIBC2.35失败

    安装2.35的报错信息如下: /usr/bin/install -c -m 644 /home/luolong/glibc-2.35/build/libc.a /usr/lib64/libc.a /usr/bin/install -c -m 644 /home/luolong/glibc-2.35/build/libc_nonshared.a /usr/lib64/libc_nonshared.a /usr/bin/install -c /home/luolong/glibc-2.35/build/libc.so /lib64/libc.so.6.new mv -f /lib64/libc.so.6.new /lib64/libc.so.6 gcc -B/usr/bin/

    2024年02月05日
    浏览(78)
  • Ubuntu 18.04升级GLIBC2.27为GLIBC2.29

    1. 查看当前版本         ubuntu18.04本身的GLIBC版本是2.27可以通过下面这句指令查看  2. 下载GLIBC2.29         接下来的过程进入超级管理员模式进行 3. 解压并创建对应文件夹 4. 编译安装 5. 建立软链接         上面指令是在新终端中查看当前的链接,会发现libm.so.6--li

    2024年02月02日
    浏览(51)
  • linux升级glibc-2.28

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包