Created
April 13, 2025 04:04
-
-
Save leolovenet/46ac7b8e71c86b0e96ff7f0080b44c79 to your computer and use it in GitHub Desktop.
On Centos7, use chroot to install a new version of glibc and create a new independent system, enabling continued use of VSCode Remote Development(>=1.99)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
yum groupinstall "Development Tools" -y | |
yum install gmp-devel mpfr-devel libmpc-devel -y | |
# 安装 glibc-2.35 | |
cd /usr/local/src || exit | |
wget https://ftp.gnu.org/gnu/glibc/glibc-2.35.tar.gz | |
tar -xvzf glibc-2.35.tar.gz | |
mkdir build && cd build || exit 1 | |
../configure --prefix=/home/local/glibc-2.35 --enable-kernel=3.2 --enable-multi-arch --enable-stack-protector=strong --with-headers=/usr/include | |
make -j8 && make install | |
# 安装 gcc-11.5.0 | |
cd /usr/local/src || exit | |
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-11.5.0/gcc-11.5.0.tar.gz | |
tar -zxf gcc-11.5.0.tar.gz | |
cd gcc-11.5.0 || exit 1 | |
./contrib/download_prerequisites | |
mkdir build && cd build || exit 1 | |
../configure --prefix=/home/local/gcc-11.5.0 --enable-languages=c,c++ --disable-multilib | |
make -j8 && make install | |
# 拷贝文件到 chroot 环境 | |
mkdir -p /home/chroot | |
rsync -a /etc /home/chroot/ | |
rsync -a /usr /home/chroot/ | |
rsync -a /opt /home/chroot/ | |
rsync -a /var /home/chroot/ | |
rsync -a /root /home/chroot/ | |
cd /home/chroot && | |
mkdir -p boot proc sys dev dev/pts dev/shm tmp var run run/dbus root root/bin home home/leo usr/local/openresty/nginx/logs && | |
ln -s usr/lib . && | |
ln -s usr/lib64 . && | |
ln -s usr/bin . && | |
ln -s usr/sbin . && | |
# cd /home/chroot/lib64 && ls -ahl | grep "\->" | grep "\-2.17" | |
# <更新系统配置> ,使用 glibc-2.35 | |
cd /home/chroot/lib64 && rm ld-linux-x86-64.so.2 && ln -s /home/local/glibc-2.35/lib/ld-linux-x86-64.so.2 . | |
cd /home/chroot/lib64 && rm libanl.so.1 && ln -s /home/local/glibc-2.35/lib/libanl.so.1 . | |
cd /home/chroot/lib64 && rm libBrokenLocale.so.1 && ln -s /home/local/glibc-2.35/lib/libBrokenLocale.so.1 . | |
cd /home/chroot/lib64 && rm libcrypt.so.1 && ln -s /home/local/glibc-2.35/lib/libcrypt.so.1 . | |
cd /home/chroot/lib64 && rm libc.so.6 && ln -s /home/local/glibc-2.35/lib/libc.so.6 . | |
cd /home/chroot/lib64 && rm libdl.so.2 && ln -s /home/local/glibc-2.35/lib/libdl.so.2 . | |
cd /home/chroot/lib64 && rm libm.so.6 && ln -s /home/local/glibc-2.35/lib/libm.so.6 . | |
cd /home/chroot/lib64 && rm libnsl.so.1 && ln -s /home/local/glibc-2.35/lib/libnsl.so.1 . | |
cd /home/chroot/lib64 && rm libnss_compat.so.2 && ln -s /home/local/glibc-2.35/lib/libnss_compat.so.2 . | |
cd /home/chroot/lib64 && rm libnss_db.so.2 && ln -s /home/local/glibc-2.35/lib/libnss_db.so.2 . | |
cd /home/chroot/lib64 && rm libnss_dns.so.2 && ln -s /home/local/glibc-2.35/lib/libnss_dns.so.2 . | |
cd /home/chroot/lib64 && rm libnss_files.so.2 && ln -s /home/local/glibc-2.35/lib/libnss_files.so.2 . | |
cd /home/chroot/lib64 && rm libnss_hesiod.so.2 && ln -s /home/local/glibc-2.35/lib/libnss_hesiod.so.2 . | |
cd /home/chroot/lib64 && rm libpthread.so.0 && ln -s /home/local/glibc-2.35/lib/libpthread.so.0 . | |
cd /home/chroot/lib64 && rm libresolv.so.2 && ln -s /home/local/glibc-2.35/lib/libresolv.so.2 . | |
cd /home/chroot/lib64 && rm librt.so.1 && ln -s /home/local/glibc-2.35/lib/librt.so.1 . | |
cd /home/chroot/lib64 && rm libutil.so.1 && ln -s /home/local/glibc-2.35/lib/libutil.so.1 . | |
cd /home/chroot/lib64 && rm libstdc++.so.6 && ln -s /home/local/gcc-11.5.0/lib64/libstdc++.so.6 . | |
cd /home/chroot/lib64 && rm libgcc_s.so.1 && ln -s /home/local/gcc-11.5.0/lib64/libgcc_s.so.1 . | |
cd /home/chroot/lib64 && rm libquadmath.so.0 && ln -s /home/local/gcc-11.5.0/lib64/libquadmath.so.0 . | |
cd /home/chroot/lib64 && rm libgomp.so.1 && ln -s /home/local/gcc-11.5.0/lib64/libgomp.so.1 . | |
if false; then | |
#恢复 | |
cd /home/chroot/lib64 && rm ld-linux-x86-64.so.2 && ln -s ld-2.17.so ld-linux-x86-64.so.2 | |
cd /home/chroot/lib64 && rm libanl.so.1 && ln -s libanl-2.17.so libanl.so.1 | |
cd /home/chroot/lib64 && rm libBrokenLocale.so.1 && ln -s libBrokenLocale-2.17.so libBrokenLocale.so.1 | |
cd /home/chroot/lib64 && rm libcrypt.so.1 && ln -s libcrypt-2.17.so libcrypt.so.1 | |
cd /home/chroot/lib64 && rm libc.so.6 && ln -s libc-2.17.so libc.so.6 | |
cd /home/chroot/lib64 && rm libdl.so.2 && ln -s libdl-2.17.so libdl.so.2 | |
cd /home/chroot/lib64 && rm libm.so.6 && ln -s libm-2.17.so libm.so.6 | |
cd /home/chroot/lib64 && rm libnsl.so.1 && ln -s libnsl-2.17.so libnsl.so.1 | |
cd /home/chroot/lib64 && rm libnss_compat.so.2 && ln -s libnss_compat-2.17.so libnss_compat.so.2 | |
cd /home/chroot/lib64 && rm libnss_db.so.2 && ln -s libnss_db-2.17.so libnss_db.so.2 | |
cd /home/chroot/lib64 && rm libnss_dns.so.2 && ln -s libnss_dns-2.17.so libnss_dns.so.2 | |
cd /home/chroot/lib64 && rm libnss_files.so.2 && ln -s libnss_files-2.17.so libnss_files.so.2 | |
cd /home/chroot/lib64 && rm libnss_hesiod.so.2 && ln -s libnss_hesiod-2.17.so libnss_hesiod.so.2 | |
cd /home/chroot/lib64 && rm libpthread.so.0 && ln -s libpthread-2.17.so libpthread.so.0 | |
cd /home/chroot/lib64 && rm libresolv.so.2 && ln -s libresolv-2.17.so libresolv.so.2 | |
cd /home/chroot/lib64 && rm librt.so.1 && ln -s librt-2.17.so librt.so.1 | |
cd /home/chroot/lib64 && rm libutil.so.1 && ln -s libutil-2.17.so libutil.so.1 | |
cd /home/chroot/lib64 && rm libstdc++.so.6 && ln -s libstdc++.so.6.0.19 libstdc++.so.6 | |
cd /home/chroot/lib64 && rm libgcc_s.so.1 && ln -s libgcc_s-4.8.5-20150702.so.1 libgcc_s.so.1 | |
cd /home/chroot/lib64 && rm libquadmath.so.0 && ln -s libquadmath.so.0.0.0 libquadmath.so.0 | |
cd /home/chroot/lib64 && rm libgomp.so.1 && ln -s libgomp.so.1.0.0 libgomp.so.1 | |
fi | |
#挂载必要的系统文件 | |
mount -t proc proc /home/chroot/proc | |
mount --bind /sys /home/chroot/sys | |
mount --bind /dev /home/chroot/dev | |
mount --bind /dev/pts /home/chroot/dev/pts | |
mount -t tmpfs -o rw,nosuid,nodev,mode=755 tmpfs /home/chroot/run | |
mount --bind /run/dbus /home/chroot/run/dbus | |
mount --bind /root/bin /home/chroot/root/bin | |
mount --bind /home/leo /home/chroot/home/leo | |
mount --bind /dev/shm/ /home/chroot/dev/shm | |
mount --bind /usr/local/openresty/nginx/logs /home/chroot/usr/local/openresty/nginx/logs | |
if false; then | |
#卸载必要的系统文件 | |
umount /home/chroot/proc | |
umount /home/chroot/sys | |
umount /home/chroot/dev/pts | |
umount /home/chroot/dev | |
umount /home/chroot/run/dbus | |
umount /home/chroot/run | |
umount /home/chroot/root/bin | |
umount /home/chroot/home/leo | |
umount /home/chroot/dev/shm | |
umount /home/chroot/usr/local/openresty/nginx/logs | |
fi | |
# 进入 chroot 环境 | |
chroot /home/chroot | |
##################### | |
# 以下命令只需要执行一次 | |
##################### | |
vim ~/.bashrc | |
export GLIBC_VERS="glibc-2.35" | |
export GLIBC_PATH="/home/local/$GLIBC_VERS" | |
export PATH="$GLIBC_PATH/sbin:$GLIBC_PATH/bin:$PATH" | |
#export LD_LIBRARY_PATH="$GLIBC_PATH/lib:$LD_LIBRARY_PATH:/usr/lib64:/usr/local/lib64:/usr/lib:/usr/local/lib" | |
#创建 locale 相关文件 | |
/home/local/glibc-2.35/bin/localedef -v -c -i en_US -f UTF-8 en_US.UTF-8 | |
cd /home/local/glibc-2.35/etc/ && \ | |
ln -s /usr/share/zoneinfo/Asia/Shanghai ./localtime && \ | |
ln -s /etc/protocols ./protocols && \ | |
ln -s /etc/services ./services && \ | |
ln -s /etc/nsswitch.conf ./nsswitch.conf | |
#创建 ld.so.conf | |
cat >/home/local/glibc-2.35/etc/ld.so.conf <'EOF' | |
include /etc/ld.so.conf.d/*.conf | |
/usr/lib64 | |
/usr/lib | |
/usr/local/lib64 | |
/usr/local/lib | |
EOF | |
# ⚠️注意⚠️, 运行 ldconfig 会导致 `/usr/lib64/libc.so.6` 恢复, 需要退出 chroot 环境, 重新运行上面的 <更新系统配置> 命令 | |
/home/local/glibc-2.35/sbin/ldconfig | |
#创建 gcc wrapper | |
mv /opt/rh/devtoolset-11/root/usr/bin/gcc /opt/rh/devtoolset-11/root/usr/bin/gcc.real | |
cat >/opt/rh/devtoolset-11/root/usr/bin/gcc <'EOF' | |
#!/bin/bash | |
/opt/rh/devtoolset-11/root/usr/bin/gcc.real -B/home/local/glibc-2.35/lib "$@" | |
EOF | |
# change Port 1122 | |
vim /etc/ssh/sshd_config | |
#开启 sshd | |
/usr/sbin/sshd |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment