修复 远程主机不满足运行VS Code服务器的先决条件
问题
你说的对,但是此远程主机可能不符合 glibc
和 libstdc++
VS Code
服务器的先决条件

前言
自 VS Code 1.99 版本(大约 2025 年 3 月起),VS Code 官方对其预构建服务器在 Linux 系统上的运行环境提出了新的要求:目标系统需搭载 glibc 2.28 或更高版本。这意味着,像 Debian 10、RHEL 8 或 Ubuntu 20.04 这样的现代发行版可以无缝支持,但也确实给仍在使用一些经典 Linux 发行版(如 CentOS 7)的用户带来了一些挑战。详细的官方说明可以参考 这篇 FAQ。
好在微软还留了个窗户
如果提供了包含上述所需库版本的 sysroot,VS Code 仍允许用户通过Remote - SSH扩展连接到 VS Code 不支持的操作系统(glibc 版本不大于 2.28 且 libstdc++ 版本不大于 3.4.25 的操作系统)。这种方法可以让您和您的组织有更多时间迁移到更新的 Linux 发行版。
适合这篇教程的情况
系统为 CentOS 7.9 / RHEL 7.9 / Oracle Linux 7.9 / Ubuntu 18.04 ,且服务器没有 root 权限,又不想回退到 1.98 版本
详细步骤指南
正是基于这样的背景,我发现了vscode-sysroot 这个项目。项目本质是用 Docker 及 crosstool-ng
工具,自行编译了一个包含 glibc 2.28 并能兼容老版本内核(例如 3.10)的 sysroot。并且包含 patchelf
。完美契合我目前的状况,所以就直接用了这个项目。
1. 准备 Docker 环境
首先,请确保有本地环境或者服务器已经安装并成功运行了 Docker
。这是编译 sysroot
的基础。
2. 构建 Sysroot 压缩包
然后,克隆一下 vscode-sysroot
这个仓库,需要用这个仓库来编译并生成 sysroot
压缩包。
git clone https://github.com/ursetto/vscode-sysroot.git
cd vscode-sysroot
项目提供了两种构建方式:
构建 Docker 镜像
docker build -t my-vscode-sysroot .
创建一个临时容器
docker create --name temp-sysroot-container my-vscode-sysroot
从容器的 /src 目录将生成的压缩包复制到当前主机目录
docker cp temp-sysroot-container:/src/vscode-sysroot-x86_64-linux-gnu.tgz ./vscode-sysroot-x86_64-linux-gnu.tgz
删除临时容器
docker rm temp-sysroot-container
(可选) 如果你想进入容器内部进行调试或检查
docker run -it --rm my-vscode-sysroot bash
3. 部署打包后的 Sysroot 到服务器
上传 Sysroot 压缩包
首先,将 vscode-sysroot-x86_64-linux-gnu.tgz
文件上传到服务器。可以使用 scp
或其他文件传输工具:
scp ./vscode-sysroot-x86_64-linux-gnu.tgz user@your-remote-server:~
解压 Sysroot
登录到远程服务器,然后执行以下命令来创建目标目录并解压 sysroot。路径是 ~/.vscode-server/sysroot/
# 在远程服务器上执行
mkdir -p ~/.vscode-server/sysroot
# 假设压缩包已上传到用户主目录 ~
tar zxvf ~/vscode-sysroot-x86_64-linux-gnu.tgz -C ~/.vscode-server/sysroot --strip-components=1
小贴士:tar
命令中的 --strip-components=1
参数是为了处理压缩包内部可能存在的额外顶层目录。如果解压后发现文件路径多了一层 (例如 ~/.vscode-server/sysroot/vscode-sysroot-x86_64-linux-gnu/usr/...
),那就说明你需要这个参数。如果解压后 usr
, lib
等目录直接位于 ~/.vscode-server/sysroot/
下,则可以省略它或将值设为 0
。
部署 sysroot.sh
脚本
然后,将 vscode-sysroot
项目根目录下的 sysroot.sh
脚本复制到远程服务器的 ~/.vscode-server/
目录下,并确保它名为 sysroot.sh
:
# 在本地机器上执行 (确保你在 vscode-sysroot 项目的根目录)
scp sysroot.sh user@your-remote-server:~/.vscode-server/sysroot.sh
配置 Shell 环境
为了让 VS Code Server 启动时能自动加载我们准备好的 sysroot 环境,需要在远程服务器的 shell 配置文件(通常是 ~/.bashrc
或 ~/.zshrc
,取决于你使用的 shell)中添加一行命令来引入 sysroot.sh
:
# 在远程服务器上执行
echo 'source ~/.vscode-server/sysroot.sh' >> ~/.bashrc
# 如果你使用 zsh,则改为:
# echo 'source ~/.vscode-server/sysroot.sh' >> ~/.zshrc
修改保存后,记得重新加载配置文件或直接重新登录服务器,以使设置生效:
# 在远程服务器上执行
source ~/.bashrc
# 或者 source ~/.zshrc
4. 连接和验证
重新打开 VS Code 并链接到远程服务器,不出意外应该已经好了。