remrin

remrin

github
email

修复 远程主机不满足运行VS Code服务器的先决条件

问题#

你说的对,但是此远程主机可能不符合 glibclibstdc++ VS Code 服务器的先决条件

image

前言#

自 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 压缩包。

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 并链接到远程服务器,不出意外应该已经好了。

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


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。