修复 远程主机不满足运行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 版本

::: warning
这只是一种技术解决方法，并不是官方支持的使用场景。使用前请谨慎考虑。
:::

详细步骤指南

正是基于这样的背景，我发现了vscode-sysroot 这个项目。项目本质是用 Docker 及 crosstool-ng 工具，自行编译了一个包含 glibc 2.28 并能兼容老版本内核（例如 3.10）的 sysroot。并且包含 patchelf 。完美契合我目前的状况，所以就直接用了这个项目。

1. 准备 Docker 环境

首先，请确保有本地环境或者服务器已经安装并成功运行了 Docker。这是编译 sysroot 的基础。

2. 构建 Sysroot 压缩包

然后，克隆一下 vscode-sysroot 这个仓库，需要用这个仓库来编译并生成 sysroot 压缩包。

Copy
git clone https://github.com/ursetto/vscode-sysroot.git
cd vscode-sysroot

项目提供了两种构建方式：

构建 Docker 镜像

Copy
docker build -t my-vscode-sysroot .

创建一个临时容器

Copy
docker create --name temp-sysroot-container my-vscode-sysroot

从容器的 /src 目录将生成的压缩包复制到当前主机目录

Copy
docker cp temp-sysroot-container:/src/vscode-sysroot-x86_64-linux-gnu.tgz ./vscode-sysroot-x86_64-linux-gnu.tgz

删除临时容器

Copy
docker rm temp-sysroot-container

(可选) 如果你想进入容器内部进行调试或检查

Copy
docker run -it --rm my-vscode-sysroot bash

3. 部署打包后的 Sysroot 到服务器

上传 Sysroot 压缩包

首先，将 vscode-sysroot-x86_64-linux-gnu.tgz 文件上传到服务器。可以使用 scp 或其他文件传输工具：

Copy
scp ./vscode-sysroot-x86_64-linux-gnu.tgz user@your-remote-server:~

解压 Sysroot

登录到远程服务器，然后执行以下命令来创建目标目录并解压 sysroot。路径是 ~/.vscode-server/sysroot/

Copy
# 在远程服务器上执行
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：

Copy
# 在本地机器上执行 (确保你在 vscode-sysroot 项目的根目录)
scp sysroot.sh user@your-remote-server:~/.vscode-server/sysroot.sh

配置 Shell 环境

为了让 VS Code Server 启动时能自动加载我们准备好的 sysroot 环境，需要在远程服务器的 shell 配置文件（通常是 ~/.bashrc 或 ~/.zshrc，取决于你使用的 shell）中添加一行命令来引入 sysroot.sh：

Copy
# 在远程服务器上执行
echo 'source ~/.vscode-server/sysroot.sh' >> ~/.bashrc
# 如果你使用 zsh，则改为:
# echo 'source ~/.vscode-server/sysroot.sh' >> ~/.zshrc

修改保存后，记得重新加载配置文件或直接重新登录服务器，以使设置生效：

Copy
# 在远程服务器上执行
source ~/.bashrc
# 或者 source ~/.zshrc

4. 连接和验证

重新打开 VS Code 并链接到远程服务器，不出意外应该已经好了。

此文由 Mix Space 同步更新至 xLog
原始链接为 https://remrin.dev/posts/dev/vscode-remote-fix