更新完成后,原来好好的 Remote SSH 再也连不上了,提示 GLIBC 版本太低
Warning: Missing GLIBC >= 2.28! from /lib/x86_64-linux-gnu/libc-2.27.so
Error: Missing required dependencies. Please refer to our FAQ https://aka.ms/vsc
code-remote/faq/old-linux for additional information.
有办法降级 Remote SSH 吗?
1
lybcyd 303 天前
看了这段信息的对应提示,官方解决办法是降级 vscode 到 1.85 版本
|
2
p1gd0g 303 天前
|
4
fuckshiter 303 天前
前几天遇到,感觉是这个 glibc2.28 版本的文件有问题,你可以去别的正常的系统搞一个这个 glibc ,备份好原来那个先,然后覆盖就没事了。我是这样解决的。你可以先看看你的 ubuntu 的 glibc 是什么版本 ldd --version.
|
5
choah 303 天前
Ubuntu16.04 的 2.23 版本瑟瑟发抖
|
6
vikaptain 303 天前
看下插件切换到 pre-release version 能不能行,不行的话就 vscode 降级。
|
7
seers 303 天前 via Android
我也是,centos7 ,准备换到 Ubuntu22.04 了,glibc 版本低了也不好
|
8
Dogtler 302 天前
喔,我昨晚也手贱点了更新,然后一直报 server on long log 巴拉巴拉。
刚整好,版本回退到 1.8.5 即可,1.8.6 需要 centos 8 才有 glibc 1.28. |
9
Dogtler 302 天前
vscode 在插件自动更新那一栏选择取消,以后保持不更新 openssh 。
|
10
Charrlles 302 天前 via iPhone
VSCode 的迭代一般都是一两个月发一个功能版本,在功能版本之间会发一到两个 recovery 版本,修复由功能版本引起的 bug 。所以我都是关掉 vscode 的自动更新,有想要的功能就等到 recovery 版本再手动检测更新,这样会比较稳定
https://github.com/microsoft/vscode/releases |
11
exch4nge 302 天前 via iPhone
正好昨天遇到了,简要说就是装 musl ,装 glibc ,再用 patchelf 解决了
|
12
Chipmunker 302 天前
@exch4nge 用 patchelf 修改哪个软件的 rpath ?是 code-server 自带的 node 麽?
|
13
Sonui 302 天前
|
15
f1ynnv2 301 天前
试了一下 macOS 下可以下载个最后的 1.85.2 版本,放在某个目录继续使用。只要不追求在 LaunchPad 里同时有两个图标同时出现,其实不需要任何修改。
|
16
exch4nge 301 天前
@Chipmunker 是 node
@f1ynnv2 #14 vscode ssh 上去的时候看 OUTPUT (输出)窗口会有详细的日志,第一步分析日志发现直接报一些系统版本有关系的错误,我的系统是 CentOS 7 所以提示的是 glibc 跟 cxx 版本过低 找到日志里的一个路径,是 code-xxxxxxxxxxxxxxx 结尾的,上机器找到这个目录,这个文件是个 script ,打开会发现有检查 /tmp/xxxxxxxxxxxx 这个路径有文件就 skip os version check 之类的操作,手动创建这个文件 然后一般这个目录的上一级目录有个 node 可执行文件,这个是需要 patch 的,我用了自己安装的 glibc 跟 cxx 的路径,用 patchelf 打了补丁,打完执行 ./node 检查看看能否运行 再次尝试用 vscode ssh 上去(每次先退 vscode 再把相关进程都 kill 掉),还是会有错误,仔细看日志发现,某个可执行文件执行不了,报错里提到也没找到 musl 什么的,然后自己再安装了 musl 然后再次尝试 vscode ssh 上去,就可以了,右下角会弹出警告框,但是功能没问题。 如果你能直接升级操作系统的 glibc 之类的版本的话,那应该更简单,不过我没试过,也在网上看到很多升级 glibc 后遇到很多问题的事情,就没敢动,只是找个其它位置安装的。 |
18
f1ynnv2 301 天前 1
@exch4nge 感谢,我也成功了,是参考这篇文章: https://zhuanlan.zhihu.com/p/551770477
不过这篇文章是随便找了个 node 来演示的,实际上要按照你说的这个找到对应版本的 vscode-server 的 node 。 我的系统是 ubuntu16.04 ,使用 vscode 1.86 macos 版本来测试成功了。用到的几个文件放在这里供大家参考吧: libc6_2.39-0ubuntu1_amd64.deb libstdc++6_13.1.0-2ubuntu2~23.04_amd64.deb 对了,后面解压这些.deb 文件可能会报错,这样解决: ``` tar -xzf patchelf-0.18.0-x86_64.tar.gz ar -xv libc6_2.39-0ubuntu1_amd64.deb tar -I zstd -xvf data.tar.zst ar -xv libstdc++6_13.1.0-2ubuntu2~23.04_amd64.deb tar -I zstd -xvf data.tar.zst ``` |
19
f1ynnv2 301 天前
如果其他人也有这需求,参考下面完整的步骤吧:
1. 问题 VSCode 自 1.86 开始,服务器端的 vscode-server 里的 node 要求 glibc >=2.28, libstdc++ >= 3.4.25, 这样导致一大批老系统无法使用 vsocde 的 SSH 开发功能。https://code.visualstudio.com/docs/remote/linux#_remote-host-container-wsl-linux-prerequisites 2. 解决方案 采用 patchelf ,单独修改目标机上 vscode-server 的 node 对上述两个库的依赖 参考: https://zhuanlan.zhihu.com/p/551770477 2.1 确认 node 依赖的库版本 根据客户机上 VScode 的版本 commit 号找到服务器上对应的目录,一般是~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/这类形式 直接运行这个目录下的 node 会报错,可以获取依赖的库版本号: 此外还可以从 https://code.visualstudio.com/docs/remote/linux#_remote-host-container-wsl-linux-prerequisites 查询开发库版本的依赖。 2.2 下载 patchelf https://github.com/NixOS/patchelf 2.3 下载 glibc https://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/glibc/ glibc 的软件包名前缀为 libc6, 本次下载文件为:libc6_2.39-0ubuntu1_amd64.deb 2.4 下载 glibcxx 从这里 https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html 查找需要的 gcc 版本,然后在 https://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/main/g/gcc-<版本号>/下面找到对应的包,本次使用的是 libstdc++6_13.1.0-2ubuntu2~23.04_amd64.deb 3. 服务器端准备 3.1 上述三个文件都上传到服务器 3.2 解压 sudo apt install zstd tar -xzf patchelf-0.18.0-x86_64.tar.gz ar -xv libc6_2.39-0ubuntu1_amd64.deb tar -I zstd -xvf data.tar.zst ar -xv libstdc++6_13.1.0-2ubuntu2~23.04_amd64.deb tar -I zstd -xvf data.tar.zst 3.3 归集所有 lib 库 将解压得到的 lib/x86_64-linux-gnu/*和 usr/lib/x86_64-linux-gnu/*都复制到统一的目录下,本次放在~/libs 下: cp -r lib/x86_64-linux-gnu/* ~/libs/ cp -r usr/lib/x86_64-linux-gnu/* ~/libs/ 3.4 使用 patchelf cd ~/libs ~/patchelf/bin/patchelf --set-rpath `pwd` ~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/node ~/patchelf/bin/patchelf --set-interpreter `pwd`/ld-linux-x86-64.so.2 ~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/node 3.5 使用 ldd 命令确认库已替换 ldd ~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/node 3.6 检查替换后能正常工作 ~/.vscode-server/bin/05047486b6df5eb8d44b2ecd70ea3bdf775fd937/node ,不能报错 3.7 屏蔽服务器端库检查 touch /tmp/vscode-skip-server-requirements-check 4. 重新连接 vscode vscode 每次更新版本后,服务端都要到对应目录下找到对应的 node 执行上面的步骤。 这次下载的 glibc 和 glibcxx 版本都很高,可以存档供以后每次 vscode 更新版本时使用,老系统可以再顶几年。 |
20
l4ever 301 天前
同样, 我的安卓固件编译机是 ubuntu14. 升级了几个库失败了, 强制安装了新版 deb 包
系统直接干死了. 无法登录了, 现在只要输入用户名就立即提示 login incorect, 无法输入密码 已经重装了系统. |
24
pzs 300 天前
|