云计算百科
云计算领域专业知识百科平台

解决VS Code Remote-SSH 在 Ubuntu 18.04 下不兼容问题(远程主机不满足运行VS Code服务器的先决条件)

背景

从 VS Code 1.99 开始,远程服务器端需要 glibc >= 2.28 和 libstdc++ >= 3.4.25,而 Ubuntu 18.04 默认的 glibc 版本为 2.27,不满足要求,导致无法连接 VS Code Remote Server。

为了不升级系统,我们采用手动编译 glibc 2.28 并使用 patchelf 替换 VS Code Server 所需的动态链接器。


步骤总结

1. 编译 glibc 2.28 到用户目录

mkdir -p ~/tools/glibc
cd ~/tools

wget http://ftp.gnu.org/gnu/libc/glibc-2.28.tar.gz

# 解压源码
tar -xzf glibc-2.28.tar.gz
mkdir glibc-build && cd glibc-build

# 配置安装路径为用户目录
../glibc-2.28/configure –prefix=$HOME/tools/glibc –disable-werror # 注意需要关闭-Werror

# 编译并安装
make -j$(nproc)
make install

glibc 安装路径:~/tools/glibc/lib/


2. 确定 VS Code Server 的路径

使用 VS Code Remote-SSH 连接时,会在远程机器中生成:

~/.vscode-server/bin/<commit_id>/node

我们需要 patch 的就是这个 node 文件。

但是我在服务器上没找到node文件,因此手动离线安装一个.vscode-server,参考:VScode连接远程服务器踩坑实战记录(新版离线vscode-server安装)服务器其它脚本之家

安装之后在:~/.vscode-server/cli/servers/Stable-*/server中是有node的,在这个目录下做修改。


3. 安装并使用 patchelf 修改 node

sudo apt install patchelf

切换到 node 所在目录并执行:

cd ~/.vscode-server/cli/servers/Stable-*/server

patchelf –set-interpreter $HOME/tools/glibc/lib/ld-2.28.so node
patchelf –set-rpath $HOME/tools/glibc/lib node

验证成功:

./node -v

如果输出版本号,则说明成功。

如果报错,检查ldd ./node输出,是否所有库依赖于自定义目录,缺少什么就添加。

比如,缺少libstdc++.so.6和libgcc_s.so.1。

从另一台Ubuntu 20.04中拷贝:

mkdir -p ~/tmp-libs
cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6* ~/tmp-libs/
cp /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 ~/tmp-libs/

复制到你的 glibc 目录

mkdir -p ~/tools/glibc/lib64  # 如果没有 lib64 目录就建一个
cp ~/tmp-libs/libstdc++.so.6* ~/tools/glibc/lib/
cp ~/tmp-libs/libgcc_s.so.1 ~/tools/glibc/lib64/

强制 node 只从自定义目录加载所有库

cd ~/.vscode-server/cli/servers/Stable-*/server/
# 把 rpath 设为 glibc/lib 和 glibc/lib64 两个目录
patchelf –set-rpath $HOME/tools/glibc/lib:/home$HOME/tools/glibc/lib64 node
# 再次确认解释器也对:
patchelf –set-interpreter $HOME/tools/glibc/lib/ld-2.28.so node

验证

ldd ./node

应该全部库都指向 $HOME/tools/glibc/lib{,64} 下的版本。 然后再跑:

./node -v

4. 创建环境变量以实现自动 patch

编辑 ~/.bashrc 文件,在末尾添加:

# VS Code Remote Server 自动 patch 设置
export VSCODE_SERVER_CUSTOM_GLIBC_LINKER=$HOME/tools/glibc/lib/ld-2.28.so
export VSCODE_SERVER_CUSTOM_GLIBC_PATH=$HOME/tools/glibc/lib:$HOME/tools/glibc/lib64
export VSCODE_SERVER_PATCHELF_PATH=$(which patchelf)

执行以下命令使其生效:

source ~/.bashrc


问题:

若确保上述步骤成功完成,但vscode连接时扔报错,可选择跳过检查。

在你要连接的服务器上,直接建一个空文件 /tmp/vscode-skip-server-requirements-check,VS Code Server 安装脚本就会检测到它并跳过 glibc/libstdc++ 的版本校验。

此时,应该能正确启动vscode远程连接。(至少笔者亲测可行)

结果

此方案无需升级系统,仅通过用户空间编译 glibc 与设置 patchelf,即可在 Ubuntu 18.04 上成功运行新版 VS Code Remote-SSH。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 解决VS Code Remote-SSH 在 Ubuntu 18.04 下不兼容问题(远程主机不满足运行VS Code服务器的先决条件)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!