柳州做网站那家好,wordpress如何发布视频,网站制作2007,惠东住房建设局网站问题现象
通过vscode的remotessh插件连接老版本服务器#xff08;如RHEL7#xff0c;Centos7#xff09;时#xff0c;插件会报错#xff0c;无法连接。 查看插件的错误日志可以看到类似如下的报错信息#xff1a;
dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /li…问题现象
通过vscode的remotessh插件连接老版本服务器如RHEL7Centos7时插件会报错无法连接。 查看插件的错误日志可以看到类似如下的报错信息
dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /lib64/libm.so.6: version GLIBC_2.27 not found (required by dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node)
dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /lib64/libc.so.6: version GLIBC_2.25 not found (required by dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node)
dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /lib64/libc.so.6: version GLIBC_2.28 not found (required by dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node)
dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /lib64/libstdc.so.6: version CXXABI_1.3.9 not found (required by dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node)
dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /lib64/libstdc.so.6: version GLIBCXX_3.4.20 not found (required by dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node)
dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node)我们先来分析一下错误信息
首先node前面的一串hash实际上是vscode-server端的版本号在vscode 1.8x某个版本的时候微软隐性升级了捆绑的node版本此版本的node依赖于GLIBC_2.28运行时在老系统上不存在我们可以看到捆绑的node版本依赖的有libc和libc还有libstdc其中libc和libm来自于glibclibstdc来自于gcc编译器
解决思路
为了解决这个问题我们需要
重新编译glibcC运行时和gccCxx运行时 但是需要注意的是编译并覆盖安装glibc会导致系统崩溃千万不要尝试覆盖安装 但是需要注意的是编译并覆盖安装glibc会导致系统崩溃千万不要尝试覆盖安装 但是需要注意的是编译并覆盖安装glibc会导致系统崩溃千万不要尝试覆盖安装 重要的事情一定要多说几次小白新手千万不要尝试自行编译安装glibc否则系统崩溃就没救了。下面的步骤需要你完全看明白没有疑问才可以继续进行。为了避免覆盖系统glibc导致系统崩溃我们可以通过patchelf修改vscode-server端捆绑的node可执行文件使其RPATH指向我们自行编译的glibc和libstdc运行时路径
编译glibc和gcc的方式在本文中不会涵盖以免祸害小白 。只需要记得千万记得configure的时候一定要指定一个prefix千万不要覆盖系统的glibc千万不要安装到系统PATH路径中。
pathelf给node打补丁
该命令的用法是 patchelf --set-rpath $ORIGIN:$ORIGIN/lib:$ORIGIN/../lib executable
例如我的glibc安装到了一个非常规路径确保不会在PATH下面 /home/wb/.local/glibc-2.38 其目录结构是
/home/wb/.local/glibc-2.38
├── bin
├── etc
├── include
├── lib
├── libexec
├── sbin
├── share
└── var我们需要的运行时路径在lib目录下。另外我的gcc安装到了这个路径下面 /opt/toolchains 其目录结构是
/opt/toolchains/
├── bin
├── include
├── lib
├── lib64
├── libexec
└── share我们需要的libstdc运行时在lib64目录下。 首先我们要进入vscode-server端的路径通常情况下在家目录的这个位置 $HOME/.vscode-server/bin 在这个目录下我们可以看到remote-ssh插件下载的服务端程序的目录本例中服务端的版本号是1.89.1对应的commitidhash值是dc96b837cf6bb4af9cd736aa3af08cf8279f7685 那么我们就需要cd dc96b837cf6bb4af9cd736aa3af08cf8279f7685进入在该目录下我们就可以看到node可执行文件。 最终我们的pathelf命令为 在$HOME/.vscode-server/bin/dc96b837cf6bb4af9cd736aa3af08cf8279f7685下执行 patchelf --set-interpreter /home/wb/.local/glibc-2.38/lib/ld-linux-x86-64.so.2 --set-rpath /home/wb/.local/glibc-2.38/lib:/opt/toolchains/lib64 node
之后可以通过ldd node确认rpath已经修改完毕
# ldd nodelinux-vdso.so.1 (0x00007fffcdb8d000)libdl.so.2 /home/wb/.local/glibc-2.38/lib/libdl.so.2 (0x00007fb1250ed000)libstdc.so.6 /opt/toolchains/lib64/libstdc.so.6 (0x00007fb124abc000)libm.so.6 /home/wb/.local/glibc-2.38/lib/libm.so.6 (0x00007fb12500f000)libgcc_s.so.1 /opt/toolchains/lib64/libgcc_s.so.1 (0x00007fb12489e000)libpthread.so.0 /home/wb/.local/glibc-2.38/lib/libpthread.so.0 (0x00007fb125009000)libc.so.6 /home/wb/.local/glibc-2.38/lib/libc.so.6 (0x00007fb124662000)/home/wb/.local/glibc-2.38/lib/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2 (0x00007fb124ed2000)之后即可重新打开vscode客户端使用remote-ssh连接到服务器了。
补充说明
一般情况下缺少GLIBC_2.XX的情况都可以用这种方式来解决。在本例的情况下vscode-server端捆绑的node依赖的是GLIBC_2.28那么我们只需要下载glibc 2.2.8版本即可不需要下载太高的版本因为更高版本依赖于高版本的makeasld等binutils可能会无法顺利编译。本来系统就很老了不需要另外瞎折腾了能用就行。
另附上glibc和gcc的下载地址:
glibc-2.28gcc 自己挑吧一般9.3.0以上版本都可以