原文: vscode 1.99 后无法连接到 ubuntu 18.04 | Akkuman 的技术博客
背景
vscode 远程开发出现报错 The remote host doesn’t meet the prerequisites for running VS Code Server(远程主机不满足运行VS Code服务器的先决条件)
根本原因
早在2023年还是2024年初,vscode 就出过一次这种问题,官方的主要目的是放弃对低版本系统的支持。不过当时没有任何通知,比较突然,后续官方发了一个修复版本,让大家可以继续使用低版本系统到 2025 年第一季度,给了大家一定的时间去升级系统。
然后官方在 1.97 的 changelog 中决定在 1.99 后将不允许连接到低版本系统进行远程开发。
不过官方也给出了解决方案
参见 https://aka.ms/vscode-remote/faq/old-linux
250622 之后的解决方案
现在似乎又出问题了,最稳定的还是使用 linuxbrew。这里给出基于 linuxbrew 的解决方案,此处使用 bash 举例,如果你是 zsh 等环境,可以参见 homebrew | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
|
|
如果是海外环境,直接使用 /bin/bash -c "$(curl -fsSL https://github.com/Homebrew/install/raw/master/install.sh)"
即可
然后使用命令 brew install patchelf
安装 patchelf
然后执行如下命令
|
|
旧版解决方案
官方给出的解决方案是先使用 crosstool 弄出一个高版本 glibc 的环境,然后使用 patchelf 来自动 patch
不过这个方案需要拿 crosstool 自己编译,也挺麻烦
有人给出了可以使用 brew 安装 glibc 和 patchelf,参见 Connect to Unsupported Older Linux servers with VS Code Remote-SSH using Custom glibc & libstdc++ - DEV Community
但是 brew 是一个 ruby 工具,安装也挺麻烦。
下面给出一种更简单的方案
下载 glibc
|
|
下载 patchelf
打开 Releases · NixOS/patchelf 下载合适的 patchelf
然后解压出来,将 bin/patchelf 放置到主机上的 /usr/local/bin/patchelf
配置环境变量
然后将以下内容写入到 ~/.ssh/environment 中
|
|
然后执行如下命令开启 ssh 环境变量
|
|
构造搜索路径
注意该步骤是必要的,否则会出现终端无法打开的问题
|
|
重要的题外话
考虑到后面也可能出现同样的问题(linuxbrew 预编译的 glibc 有预置的库搜索路径)导致一些功能缺失,建议直接安装 linuxbrew + glibc 来使用。国内可参见 homebrew | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 来安装,然后按照 Connect to Unsupported Older Linux servers with VS Code Remote-SSH using Custom glibc & libstdc++ - DEV Community 中的来进行配置即可
重新测试
然后重新连接即可
如果不成功,请 ssh 登录到远程机器,执行 env | grep VSCODE
确认一下环境变量,如果不是这个,请检查你远程主机上的下列文件
-
~/.bashrc
-
/etc/environment
-
~/.profile
-
~/.zprofile
-
~/.bash_profile
查看是否有包含上述环境变量,如果存在就删除
参考链接
- VS Code Server Not Detecting Custom Environment Variables for Old Linux Workaround · Issue #246375 · microsoft/vscode
- Connect to Unsupported Older Linux servers with VS Code Remote-SSH using Custom glibc & libstdc++ - DEV Community
- Remote Development FAQ
- Allow connecting to unsupported Linux remotes, by use of custom glibc and stdc++ libraries · Issue #231623 · microsoft/vscode
- How does homebrew store bottles? · Homebrew · Discussion #4335
- Package core/glibc