GitHub:
https://github.com/MikeWang000000/vscode-server-centos7
从 VSCode v1.99 版本开始,SSH 插件将无法在 RHEL/CentOS 7 上运行,因为它们的 glibc 、libstdc++ 已不再满足最新版本的最低要求。
使用以下步骤即可复活:
进入 Releases 页面,下载对应的版本的压缩包,放到服务器上;
在服务器上登录你的帐户,执行以下命令:
mkdir -p ~/.vscode-server
tar xzf vscode-server_*.tar.gz -C ~/.vscode-server --strip-components 1
~/.vscode-server/code-latest --patch-now
使用 SSH 插件连接服务器,完成。
此 repo 使用最新版本的 glibc 、libstdc++ 编译放至 ~/.vscode-server/gnu
目录下,并修改 VSCode Server 相关 ELF 的 .interp
节,做到不升级/修改系统库,仅对 VSCode 相关二进制文件生效。
在 SSH 上远程安装的插件也会被自动链接至最新的 glibc 、libstdc++。
如果升级了 VSCode 版本,需要重新到 GitHub 上下载对应的版本,然后手动安装 Server 端,替换掉官方的版本。
CentOS 7 是一个很旧的 Linux 发行版了,升级到最新版本的操作系统始终是最推荐的。
然而,某些特定的场景下我们仍需使用 CentOS 7 进行开发,例如客户提出的旧版本 Linux 兼容性要求,或者基于 CentOS 7 兼容的信创系统适配等等。
此 repo 目标在于临时解决这类问题,不过我还是希望大家都能快快升级吧。
![]() |
1
nagisaushio 19 天前 via Android
|
![]() |
2
ysc3839 19 天前
@nagisaushio 我自己的方案是从 CentOS 8 的源下载新版 glibc 包,从 patchelf GitHub release 下载最新的预编译包,解压到 /opt 下面,然后设置 vscode 的那三个环境变量。
|
![]() |
3
hanxiV2EX 19 天前 via Android ![]() 我的方法是用 docker ,用 docker 启动一个最新的 ubuntu ,里面装好 ssh ,把 dot 目录都挂载进去,什么版本都没问题了。。。
|
![]() |
4
nagisaushio 19 天前 via Android
@ysc3839 CentOS 8 那个我试过好像报了 kernel too old ,索性自己编译了
|
![]() |
5
mikewang OP ![]() @nagisaushio #1
其实原先我也是直接 patchelf 的,但是插件会有些问题。 比如 C/C++ 这个插件,就算 SSH 插件能正常用了,但它还是没法启动 gdb 调试,因为插件里 OpenDebugAD7 这个二进制也需要最新的 glibc 。https://github.com/microsoft/vscode-cpptools/issues/13219 所以这个还做了额外的工作,使用 inotify 监控 extensions.json ,检测到安装新插件时,自动给插件打补丁。然后还判断是否为 glibc 的二进制,排除使用 musl 的二进制(有些还是 musl 动态链接的)。 |
![]() |
7
nagisaushio 19 天前 via Android
@mikewang #5 可以可以,这个没想到
|
![]() |
8
ysc3839 19 天前
@nagisaushio 要求 glibc >= 2.28 ,CentOS 8 刚好就是 2.28 。
@mikewang 我目前在 CentOS 7 docker 里面开发 C++,似乎没遇到什么错误。 |
![]() |
9
tt0411 19 天前
|
![]() |
12
mikewang OP @tt0411 #9 是的,我这里就是简化了所有步骤:
- 将 patchelf 做成了 libpatchelf 静态编译进去 (libpatchelf/libpatchelf.h) - 自带编译好的 glibc 和 libstdc++ - 修改了 glibc ,将系统目录改为当前目录,这样改 .interp 就行了,不用再改 rpath 。事实上这么做也更安全。(patches/glibc.patch) 然后加上了额外的功能,就是自动处理插件。官方的方案只能让 server 能用,实测很多 native 插件还是不行的。 做的就是一个开箱即用,不用配参数。 |
![]() |
13
tlanyan 19 天前
印象中从 1.93 版本,server 端就不支持 CentOS 7 了
|
![]() |
14
ysc3839 9 天前 via Android
连接远程机子 Docker 内的 CentOS 7 会报错
[4945 ms] Command failed: /root/.vscode-server/bin/17baf841131aa23349f217ca7c570c76ee87b957/bin/code-server --log debug --force-disable-user-env --server-data-dir /root/.vscode-server --telemetry-level all --accept-server-license-terms --host 127.0.0.1 --port 0 --connection-token-file /root/.vscode-server/data/Machine/.connection-token-17baf841131aa23349f217ca7c570c76ee87b957 --extensions-download-dir /root/.vscode-server/extensionsCache --start-server --skip-requirements-check [4945 ms] /root/.vscode-server/bin/17baf841131aa23349f217ca7c570c76ee87b957/node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /root/.vscode-server/bin/17baf841131aa23349f217ca7c570c76ee87b957/node) 似乎是没修改 node ?能否修复一下? |