怎样安全,高效,优雅的提拔linux的glibc版本

打印 上一主题 下一主题

主题 691|帖子 691|积分 2077


一、发现题目

之前在配置Gorse的时候遇到了下面这个题目:
  1. gorse-in-one: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by gorse-in-one)
  2. gorse-in-one: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by gorse-in-one)
复制代码
这个题目是没有找到2.32以及2.34的glibc
可以先检察一下现在可用的glibc版本
  1. strings /lib64/libc.so.6 | grep GLIBC
复制代码
运行结果如下
  1. GLIBC_2.2.5
  2. GLIBC_2.2.6
  3. GLIBC_2.3
  4. GLIBC_2.3.2
  5. GLIBC_2.3.3
  6. GLIBC_2.3.4
  7. GLIBC_2.4
  8. GLIBC_2.5
  9. GLIBC_2.6
  10. GLIBC_2.7
  11. GLIBC_2.8
  12. GLIBC_2.9
  13. GLIBC_2.10
  14. GLIBC_2.11
  15. GLIBC_2.12
  16. GLIBC_2.13
  17. GLIBC_2.14
  18. GLIBC_2.15
  19. GLIBC_2.16
  20. GLIBC_2.17
  21. GLIBC_PRIVATE
复制代码
可以看出现在并没有那两个版本的glibc
那么,就进入正题,升级glibc版本
二、升级glibc版本

注:

  • 升级glibc版本存在体系崩溃风险,强烈建议在升级前拍摄体系快照,以便出错时实时恢复
  • 此操纵建议须要的权限较高,建议root成员进行操纵,非root成员建议全程使用sudo操纵
1. 下载对应的软件包

  1. wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.34.tar.gz
复制代码
2. 解压软件包

  1. tar -zxvf glibc-2.34.tar.gz
复制代码
3. 检察新版本glibc安装要求,并检察自己版本是否符合需求

  1. cd glibc-2.34
  2. cat INSTALL | grep -E  "later|newer"
复制代码
结果如下,主要关注python make gcc 三个版本
  1.      this option if you want to compile the GNU C Library with a newer
  2.      later.  Note that when CET is enabled, the GNU C Library requires
  3.      Intel Pentium Pro or newer.  With '--enable-cet', it is an error to
  4.      to build without this option (for example, if building with a newer
  5. The tests (and later installation) use some pre-existing files of the
  6.    * GNU 'make' 4.0 or newer
  7.    * GCC 6.2 or newer
  8.      building the GNU C Library, as newer compilers usually produce
  9.      of release, this implies GCC 7.4 and newer (excepting GCC 7.5.0,
  10.    * GNU 'binutils' 2.25 or later
  11.      binutils 2.26 or newer.
  12.    * GNU 'texinfo' 4.7 or later
  13.    * GNU 'bison' 2.7 or later
  14.    * GNU 'sed' 3.02 or newer
  15.    * Python 3.4 or later
  16.    * GDB 7.8 or later with support for Python 2.7/3.4 or later
  17.    * GNU 'gettext' 0.10.36 or later
  18. to have the header files from a 3.2 or newer kernel around for
  19. reference.  (For the ia64 architecture, you need version 3.2.18 or newer
复制代码
  1. python -V
  2. gcc -v
  3. make -v
复制代码
  1. Python 2.7.5
  2. gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
  3. GNU Make 3.82
复制代码
4. 升级python版本

如果不实行这步,直接进行升级会出现如下报错
  1. configure: error:
  2. *** These critical programs are missing or too old: make compiler python
  3. *** Check the INSTALL file for required versions.
复制代码
4.1 下载软件包

  1. wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
复制代码
4.2 解压

  1. tar -zxf Python-3.8.0.tgz
复制代码
4.3 编译

依次实行下列命令
  1. mkdir /usr/local/python3
  2. cd Python-3.8.0
  3. mkdir build
  4. ../configure --prefix=/usr/local/python3
  5. make -j 4
  6. make install
复制代码
4.4 确认更新后的python版本

  1. python3 -V
复制代码
5. 更新make版本

如果不实行这步,直接进行升级会出现如下报错
  1. configure: error:
  2. *** These critical programs are missing or too old: make compiler
  3. *** Check the INSTALL file for required versions.
复制代码
5.1 下载软件包

  1. wget http://ftp.gnu.org/pub/gnu/make/make-4.3.tar.gz
复制代码
5.2 解压

  1. tar -zxvf make-4.3.tar.gz
复制代码
5.3 编译

  1. cd make-4.3
  2. ./configure --prefix=/usr
  3. type make
  4. make check
  5. # 可能会报一些错误,不过不影响后面的install
  6. make install
复制代码
这几步稍有点慢,耐心等待
5.4 确认更新后的make版本

  1. make -v
复制代码
  1. GNU Make 4.3
  2. 为 x86_64-pc-linux-gnu 编译
  3. Copyright (C) 1988-2020 Free Software Foundation, Inc.
  4. 许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。
  5. 本软件是自由软件:您可以自由修改和重新发布它。
  6. 在法律允许的范围内没有其他保证。
复制代码
6. 更新gcc版本

如果不实行这步,直接进行升级会出现如下报错
  1. configure: error:
  2. *** These critical programs are missing or too old: compiler
  3. *** Check the INSTALL file for required versions.
复制代码
6.1 下载软件包

  1. wget http://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz
复制代码
6.2 解压

  1. tar -zxvf gcc-11.2.0.tar.gz
复制代码
6.3 编译

  1. mkdir build
  2. cd build/
  3. ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
  4. make -j 4
  5. # 这一步时间非常长
  6. yum -y remove gcc g++
  7. # 删除旧版本
  8. make install
  9. # 安装
复制代码
非常慢,耐心等待
6.4 验证gcc版本

  1. gcc -v
复制代码
  1. Using built-in specs.
  2. COLLECT_GCC=/usr/local/bin/gcc
  3. COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/11.2.0/lto-wrapper
  4. Target: x86_64-pc-linux-gnu
  5. Configured with: ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
  6. Thread model: posix
  7. Supported LTO compression algorithms: zlib
  8. gcc version 11.2.0 (GCC)
复制代码
6.5 配置全局可用

  1. ln -s /usr/local/bin/gcc /usr/bin/gcc
  2. ln -s /usr/local/bin/g++ /usr/bin/g++
  3. # 更新动态库
  4. rm -f /usr/lib64/libstdc++.so.6
  5. ln -s /usr/local/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6
复制代码
7. 编译新版本glibc

  1. cd glibc-2.34
  2. mkdir bulid
  3. cd bulid
  4. ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
复制代码
8. 安装

这步请务必确保当前用户拥有权限,非root用户请使用sudo运行
  1. make && make install
复制代码
接下来大概率会报这样的错误
  1. gcc: relocation error: /lib64/libc.so.6: symbol __tunable_get_val, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
  2. make[1]: *** [Makerules:1041: /home/luolong/glibc-2.35/build/format.lds] Error 127
  3. make[1]: Leaving directory '/home/luolong/glibc-2.35'
  4. make: *** [Makefile:12: install] Error 2
复制代码
这时候应该SSH的链接也断开了,很多基础命令也无法使用了 如使用ls命令
  1. ls: relocation error: /lib64/libpthread.so.0: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
复制代码
这是正常征象,请键入如下命令
  1. LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/libc.so.6                 /lib64/libc.so.6
  2. LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/dlfcn/libdl.so.2          /lib64/libdl.so.2
  3. LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/nptl/libpthread.so.0      /lib64/libpthread.so.0
  4. LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/elf/ld-linux-x86-64.so.2  /usr/lib64/ld-linux-x86-64.so.2
复制代码
PS:如果你并不是root用户,请将[/root/glibc-2.34/build] 改成自己的位置
此时,再次实行
  1. make install
复制代码
9. 检查可用glibc版本

  1. strings /lib64/libc.so.6 | grep GLIBC
复制代码
  1. GLIBC_2.2.5
  2. GLIBC_2.2.6
  3. GLIBC_2.3
  4. GLIBC_2.3.2
  5. GLIBC_2.3.3
  6. GLIBC_2.3.4
  7. GLIBC_2.4
  8. GLIBC_2.5
  9. GLIBC_2.6
  10. GLIBC_2.7
  11. GLIBC_2.8
  12. GLIBC_2.9
  13. GLIBC_2.10
  14. GLIBC_2.11
  15. GLIBC_2.12
  16. GLIBC_2.13
  17. GLIBC_2.14
  18. GLIBC_2.15
  19. GLIBC_2.16
  20. GLIBC_2.17
  21. GLIBC_2.18
  22. GLIBC_2.22
  23. GLIBC_2.23
  24. GLIBC_2.24
  25. GLIBC_2.25
  26. GLIBC_2.26
  27. GLIBC_2.27
  28. GLIBC_2.28
  29. GLIBC_2.29
  30. GLIBC_2.30
  31. GLIBC_2.31
  32. GLIBC_2.32
  33. GLIBC_2.33
  34. GLIBC_2.34
  35. GLIBC_PRIVATE
复制代码
成功!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表