CentOS 是一种 Linux 发行版,glibc 是 Linux 系统中的重要组件之一。在 CentOS 中,glibc 通常是作为系统的默认 C 标准库使用的,因为它是许多软件的基础库。在 CentOS 中,glibc 的版本通常与 CentOS 版本一起发布。因为 CentOS 通常会优先选择稳定性而不是最新性,所以 CentOS 使用的 glibc 版本通常不是很新。
glibc 的版本较低有时会影响某些服务的使用,特别是一些需要使用较新的 glibc 版本的软件,可能无法在 CentOS 中正常运行。因此,在 CentOS 中使用这些软件时,可能需要手动升级 glibc 或使用其他 Linux 发行版。
此外,由于 glibc 是 Linux 系统中的重要组件之一,在升级 glibc 之前,需要确保备份系统数据和文件,并在升级之前进行全面的测试和评估以避免潜在的系统崩溃和不稳定性。大多数情况下,建议使用系统默认的 glibc 版本,除非有明确的需要使用较新版本的 glibc。
除了手动升级 glibc,还可以使用 Docker 来解决软件的不兼容性问题。Docker 是一种容器化技术,可以将应用程序及其所有依赖项打包到一个可移植的容器中,从而实现跨平台运行。使用 Docker 可以避免在系统中安装不同版本的 glibc,从而保证系统的稳定性和安全性。
我们还可以通过创建和发布 Docker 镜像的方式,方便地管理和复用我们的应用。这个过程包括了选择适合我们应用的操作系统作为基础镜像、安装和配置需要的软件和依赖项、添加我们自己的应用代码和文件,最终生成一个可以被部署和运行的镜像。通过这样的方式,我们可以更加灵活地管理我们的应用,并且在不同的环境中轻松地部署和运行。同时,将我们的应用打包成镜像的方式也方便了团队之间的协作和交流,可以更加高效地分享和重复使用我们的应用代码和配置。
在本篇笔记中,我们详细记录了如何基于 CentOS 7 系统,升级 glibc 并创建、发布 Docker 镜像。我们提供了详细的步骤和相关命令,使读者能够轻松地复现整个过程。希望这篇笔记能够帮助大家更好地理解和使用 glibc,并且掌握使用 Docker 的技能来提升应用程序的管理和部署效率。
Docker Container
启动 Container:
docker run -dit --name glibc centos:centos7.9.2009 /bin/bash
进入 Container:
docker exec -it glibc /bin/bash
安装基础库
yum install -y wget
yum install -y sudo
yum install -y vim
yum groupinstall -y "Development Tools"
yum install -y python3
yum install -y texinfo
yum install -y mlocate
下载安装包
cd /tmp/
wget --no-check-certificate https://ftp.gnu.org/gnu/make/make-4.4.tar.gz
wget --no-check-certificate https://mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-11.3.0/gcc-11.3.0.tar.gz
wget --no-check-certificate https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.gz
wget --no-check-certificate http://ftp.gnu.org/gnu/glibc/glibc-2.33.tar.gz
安装 make
tar zxvf make-4.4.tar.gz
cd make-4.4
./configure --prefix=/usr
make
make install
cd ..
rm -rf make-4.4*
验证版本:
make --version
GNU Make 4.4
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
安装 gcc
tar zxvf gcc-11.3.0.tar.gz
cd gcc-11.3.0
./contrib/download_prerequisites
./configure --disable-multilib --enable-languages=c,c++
make -j 4
make install
cd ..
rm -rf gcc-11.3.0*
验证版本:
gcc --version
gcc (GCC) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
安装 binutils
tar zxvf binutils-2.40.tar.gz
cd binutils-2.40
./configure --prefix=/usr
make
make install
cd ..
rm -rf binutils-2.40*
验证版本:
ld -v
GNU ld (GNU Binutils) 2.40
安装 glibc
tar zxvf glibc-2.33.tar.gz
cd glibc-2.33
mkdir -p build
cd build
../configure --prefix=/usr
make
sed -i '128i\ && $name ne "nss_test2"' ../scripts/test-installation.pl
make install
cd ../..
rm -rf glibc-2.33*
验证版本:
ldd --version
ldd (GNU libc) 2.33
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
修正动态链接库软链接:
rm -rf /lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.29 /lib64/libstdc++.so.6
Docker Image
退出 Container:
Ctrl + C
导出 Container 至归档文件:
docker export glibc > centos7.9.2009_glibc2.3.3.tar.gz
终止/删除 Container:
docker stop glibc
docker rm glibc
从归档文件导入镜像:
cat centos7.9.2009_glibc2.3.3.tar.gz | docker import - yurun/centos:centos7.9.2009_glibc2.3.3
删除归档文件:
rm -rf centos7.9.2009_glibc2.3.3.tar.gz
推送镜像:
docker push yurun/centos:centos7.9.2009_glibc2.3.3
拉取镜像:
docker pull yurun/centos:centos7.9.2009_glibc2.3.3