VSCode 今天自动更新后, Remote SSH 连不上 Ubuntu Server 18.04 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LGA1150
V2EX    Visual Studio Code

VSCode 今天自动更新后, Remote SSH 连不上 Ubuntu Server 18.04

  •  1
     
  •   LGA1150 2024-02-02 0:05:00 +08:00 6218 次点击
    这是一个创建于 683 天前的主题,其中的信息可能已经有所发展或是发生改变。

    更新完成后,原来好好的 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 吗?

    26 条回复    2024-02-06 22:08:12 +08:00
    lybcyd
        1
    lybcyd  
       2024-02-02 10:09:29 +08:00
    看了这段信息的对应提示,官方解决办法是降级 vscode 到 1.85 版本
    LGA1150
        3
    LGA1150  
    OP
       2024-02-02 10:14:57 +08:00
    @lybcyd
    @p1gd0g 好的,目前看来只能整个 VSCode 降级,没有办法单独降级 SSH 插件
    fuckshiter
        4
    fuckshiter  
       2024-02-02 10:31:28 +08:00
    前几天遇到,感觉是这个 glibc2.28 版本的文件有问题,你可以去别的正常的系统搞一个这个 glibc ,备份好原来那个先,然后覆盖就没事了。我是这样解决的。你可以先看看你的 ubuntu 的 glibc 是什么版本 ldd --version.
    choah
        5
    choah  
       2024-02-02 10:33:37 +08:00
    Ubuntu16.04 的 2.23 版本瑟瑟发抖
    vikaptain
        6
    vikaptain  
       2024-02-02 10:54:11 +08:00
    看下插件切换到 pre-release version 能不能行,不行的话就 vscode 降级。
    seers
        7
    seers  
       2024-02-02 11:09:43 +08:00 via Android
    我也是,centos7 ,准备换到 Ubuntu22.04 了,glibc 版本低了也不好
    Dogtler
        8
    Dogtler  
       2024-02-02 15:29:30 +08:00
    喔,我昨晚也手贱点了更新,然后一直报 server on long log 巴拉巴拉。
    刚整好,版本回退到 1.8.5 即可,1.8.6 需要 centos 8 才有 glibc 1.28.
    Dogtler
        9
    Dogtler  
       2024-02-02 15:30:24 +08:00
    vscode 在插件自动更新那一栏选择取消,以后保持不更新 openssh 。
    Charrlles
        10
    Charrlles  
       2024-02-02 19:33:34 +08:00 via iPhone
    VSCode 的迭代一般都是一两个月发一个功能版本,在功能版本之间会发一到两个 recovery 版本,修复由功能版本引起的 bug 。所以我都是关掉 vscode 的自动更新,有想要的功能就等到 recovery 版本再手动检测更新,这样会比较稳定

    https://github.com/microsoft/vscode/releases
    exch4nge
        11
    exch4nge  
       2024-02-02 20:47:17 +08:00 via iPhone
    正好昨天遇到了,简要说就是装 musl ,装 glibc ,再用 patchelf 解决了
    Chipmunker
        12
    Chipmunker  
       2024-02-03 03:48:07 +08:00
    @exch4nge 用 patchelf 修改哪个软件的 rpath ?是 code-server 自带的 node 麽?
    f1ynnv2
        14
    f1ynnv2  
       2024-02-03 15:56:35 +08:00
    @exch4nge 能否请写个详细说明,感谢。
    f1ynnv2
        15
    f1ynnv2  
       2024-02-03 16:12:09 +08:00
    试了一下 macOS 下可以下载个最后的 1.85.2 版本,放在某个目录继续使用。只要不追求在 LaunchPad 里同时有两个图标同时出现,其实不需要任何修改。
    exch4nge
        16
    exch4nge  
       2024-02-03 17:23:02 +08:00
    @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 后遇到很多问题的事情,就没敢动,只是找个其它位置安装的。
    f1ynnv2
        17
    f1ynnv2  
       2024-02-03 17:25:34 +08:00
    @f1ynnv2 重新试了一下,这个方法不可行。另一个新版本的 vscode 更新插件后,会影响 1.85.2 的插件导致 remote-ssh 不可用。
    f1ynnv2
        18
    f1ynnv2  
       2024-02-03 17:30:07 +08:00   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
    ```
    f1ynnv2
        19
    f1ynnv2  
       2024-02-03 17:40:00 +08:00
    如果其他人也有这需求,参考下面完整的步骤吧:


    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 更新版本时使用,老系统可以再顶几年。
    luckyc
        20
    luckyc  
       2024-02-03 17:50:06 +08:00
    同样, 我的安卓固件编译机是 ubuntu14. 升级了几个库失败了, 强制安装了新版 deb 包
    系统直接干死了.
    无法登录了, 现在只要输入用户名就立即提示 login incorect, 无法输入密码

    已经重装了系统.
    litguy
        21
    litguy  
       2024-02-04 09:09:32 +08:00
    @l4ever 有点没搞懂,大家死守那么老版本的 OS 是什么原因 ?
    lx0758
        22
    lx0758  
       2024-02-04 09:40:31 +08:00
    @litguy 个人用户无所谓想升级就升级, 团队和公司想升级 OS 阻力可大了去了
    f1ynnv2
        23
    f1ynnv2  
       2024-02-04 18:50:58 +08:00
    @litguy 我们有一套成熟产品的嵌入式开发环境,Ti 给的 SDK 只能跑在 ubuntu16.04 上
    pzs
        24
    pzs  
       2024-02-05 10:34:54 +08:00
    pzs
        25
    pzs  
       2024-02-05 10:35:23 +08:00
    @pzs #24 降级 vscode 版本最简单了
    luckyc
        26
    luckyc  
       2024-02-06 22:08:12 +08:00
    @litguy 我这台机器是 android 编译的机器,老到 android5.1 ,新到 android11 。不敢轻易升级。

    不过这次系统坏了正好升级了一下。搞环境搞了一天。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     908 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 21:40 PVG 05:40 LAX 13:40 JFK 16:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86