如果其他人也有这需求,参考下面完整的步骤吧:
1. 问题
VSCode 自 1.86 开始,服务器端的 vscode-server 里的 node 要求 glibc >=2.28, libstdc++ >= 3.4.25, 这样导致一大批老系统无法使用 vsocde 的 SSH 开发功能。
https://code.visualstudio.com/docs/remote/linux#_remote-host-container-wsl-linux-prerequisites2. 解决方案
采用 patchelf ,单独修改目标机上 vscode-server 的 node 对上述两个库的依赖 参考:
https://zhuanlan.zhihu.com/p/5517704772.1 确认 node 依赖的库版本
根据客户机上 VScode 的版本 commit 号找到服务器上对应的目录,一般是~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/这类形式
直接运行这个目录下的 node 会报错,可以获取依赖的库版本号:
此外还可以从
https://code.visualstudio.com/docs/remote/linux#_remote-host-container-wsl-linux-prerequisites 查询开发库版本的依赖。
2.2 下载 patchelf
https://github.com/NixOS/patchelf2.3 下载 glibc
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/glibc/glibc 的软件包名前缀为 libc6, 本次下载文件为:libc6_2.39-0ubuntu1_amd64.deb
2.4 下载 glibcxx
从这里
https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html 查找需要的 gcc 版本,然后在
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-<版本号>/下面找到对应的包,本次使用的是 libstdc++6_13.1.0-2ubuntu2~23.04_amd64.deb
3. 服务器端准备
3.1 上述三个文件都上传到服务器
3.2 解压
sudo apt install zstd
tar -xzf patchelf-0.18.0-x86_64.tar.gz
ar -xv libc6_2.39-0ubuntu1_amd64.deb
tar -I zstd -xvf data.tar.zst
ar -xv libstdc++6_13.1.0-2ubuntu2~23.04_amd64.deb
tar -I zstd -xvf data.tar.zst
3.3 归集所有 lib 库
将解压得到的 lib/x86_64-linux-gnu/*和 usr/lib/x86_64-linux-gnu/*都复制到统一的目录下,本次放在~/libs 下:
cp -r lib/x86_64-linux-gnu/* ~/libs/
cp -r usr/lib/x86_64-linux-gnu/* ~/libs/
3.4 使用 patchelf
cd ~/libs
~/patchelf/bin/patchelf --set-rpath `pwd` ~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/node
~/patchelf/bin/patchelf --set-interpreter `pwd`/ld-linux-x86-64.so.2 ~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/node
3.5 使用 ldd 命令确认库已替换
ldd ~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/node
3.6 检查替换后能正常工作
~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/node ,不能报错
3.7 屏蔽服务器端库检查
touch /tmp/vscode-skip-server-requirements-check
4. 重新连接 vscode
vscode 每次更新版本后,服务端都要到对应目录下找到对应的 node 执行上面的步骤。
这次下载的 glibc 和 glibcxx 版本都很高,可以存档供以后每次 vscode 更新版本时使用,老系统可以再顶几年。