起因
实验室更换了新的服务器,由于本人日常使用VS Code,故准备安装之。默认进入VS Code官网,下载rpm包,准备安装。
经过
- 安装的日期是2024年2月22日,因此下载的VS Code版本是1.86.2,其包名是code-1.86.2-1707854644.el8.x86_64.rpm。(写在前面,压缩包的VS Code勉强能使用,但是不能保存配置,每次启动都要显示Start up,具体见后文。)
- 执行
yum localinstall code-1.86.2-1707854644.el8.x86_64.rpm
。 - 报错,说Requires: libc.so.6(GLIBC_2.28)(64bit)。第一反应是安装这个库。
- 执行
yum provides libc.so.6
。找到提供libc.so.6的包,发现是glibc提供的,安装之。 - 执行
yum install glibc
。告诉我已经安装了最新版本,Nothing to do。(现在反思如果看到这一步就停下来后面就没有这么多事了T.T)查找原因后发现,原来GLIBC有具体的版本,查看版本之。 - 执行
strings /usr/lib64/libc.so.6 | grep GLIBC_
。发现当前版本最新只有GLIBC_2.17。好!那么就找方法更新。 - 执行
wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.31.tar.gz
tar -xzf glibc-2.31.tar.gz
mkdir glibc-2.31/build
cd glibc-2.31/build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks --disable-werror
提示make bison compiler python太老了,无法执行。执着啊!依次更新之。
8. 执行
wget https://mirrors.aliyun.com/gnu/make/make-4.3.tar.gz
tar -xzf make-4.3.tar.gz
mkdir make-4.3/build
cd make-4.3/build
../configure --prefix=/usr
make
make install
。make更新完成输入make -v
。可以看到版本确实变成4.3了。
9. 执行
wget https://mirrors.aliyun.com/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
tar -zxf gcc-9.3.0.tar.gz
mkdir gcc-9.3.0/build
cd gcc-9.3.0/build
../configure --enable-checking=release --enable-language=c,c++ --disable-multilib --prefix=/usr
报错Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+。安装之。
10. 执行
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
tar -jxf gmp-6.1.0.tar.bz2
报错 bzip2: Cannot exec: No such file or directory。安装之。
11. 执行yum install bzip2
。安装bzip2。
12. 执行
tar -jxf gmp-6.1.0.tar.bz2
mkdir gmp-6.1.0/build
cd gmp-6.1.0/build
../configure
make
make install
tar -jxf mpfr-3.1.4.tar.bz2
mkdir mpfr-3.1.4/build
cd mpfr-3.1.4/build
../configure
make
make install
tar -xzf mpc-1.0.3.tar.gz
mkdir mpc-1.0.3/build
cd mpc-1.0.3/build
../configure
make
make install
安装完成gcc 9.3.0编译依赖。继续编译gcc。
13. 执行
../configure --enable-checking=release --enable-language=c,c++ --disable-multilib --prefix=/usr
make
报错。中间步骤后面再续。
14. 编译安装完glibc2.28后,会报错。此时看起来相安无事,实际上xvnc已经无法正常工作了。
15. 平时我是使用xrdp远程连接到服务器的,但是现在每次连接都会报错,观察log,发现xvnc没有办法启动。
16. 兜兜转转意识到是glibc修改了系统的库,查看/usr/lib64/目录下的libc.so.6发现它确实是软链到libc-2.28.so,好好好,为了保证xrdp的正常使用,我准备修改软链到libc-2.17.so。
17. 执行unlink libc.so.6
。坏事开始发生了,所有的命令都无法执行,我没办法重新创建这个软链。
18. 开始补救。执行export LD_PRELOAD=/lib64/libc-2.5.so
。可以恢复执行,然而当我创建到libc-2.17.so软链后,发现其他用户连ssh都无法登陆了。故修改回libc-2.28.so。ssh所有用户登陆正常。
19. 作死!!!查找资料后发现GLIBC包含了许多库,要完成替换,必须替换所有库,其中ld.so和libc.so是两个最核心的库,于是我开始准备替换ld.so的软链,有了上次unlink出错的经验,我这次很小心,采用了替换软链的方法(最作死的一步)执行ln -sfn ld-2.17.so ld.so
。至此所有的命令都显示Segmentation fault(Core dumped)。
19. 目前尚未修复,等待更新。希望大家不要重蹈覆辙!!!经测试在https://code.visualstudio.com/updates/v1_86 网址下载1.82版本可以直接yum安装VS Code。