vscode新版本remotessh服务端报`GLIBC_2.28‘ not found解决方案
问题现象
通过vscode的remotessh插件连接老版本服务器(如RHEL7,Centos7)时,插件会报错,无法连接。
查看插件的错误日志可以看到类似如下的报错信息:
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来自于glibc,libstdc++来自于gcc编译器;
解决思路
为了解决这个问题,我们需要
- 重新编译glibc(C运行时)和gcc(Cxx运行时);
但是需要注意的是!编译并覆盖安装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,对应的commitid(hash值)是: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版本即可,不需要下载太高的版本,因为更高版本依赖于高版本的make,as,ld等binutils,可能会无法顺利编译。本来系统就很老了,不需要另外瞎折腾了,能用就行。
另附上glibc和gcc的下载地址:
- glibc-2.28
- gcc (自己挑吧,一般9.3.0以上版本都可以)
相关文章:
vscode新版本remotessh服务端报`GLIBC_2.28‘ not found解决方案
问题现象 通过vscode的remotessh插件连接老版本服务器(如RHEL7,Centos7)时,插件会报错,无法连接。 查看插件的错误日志可以看到类似如下的报错信息: dc96b837cf6bb4af9cd736aa3af08cf8279f7685/node: /li…...

盘他系列——oj!!!
1.Openjudge 网站: OpenJudge 2.洛谷 网站: 首页 - 洛谷 | 计算机科学教育新生态 3.环球OJ 网站: QOJ - QOJ.ac 4. 北京大学 OJ:Welcome To PKU JudgeOnline 5.自由OJ 网站: https://loj.ac/ 6.炼码 网站:LintCode 炼码 8.力扣 网站: 力扣 9.晴练网首页 - 晴练网...
洛谷 P2657 [SCOI2009] windy 数 题解 数位dp
[SCOI2009] windy 数 题目背景 windy 定义了一种 windy 数。 题目描述 不含前导零且相邻两个数字之差至少为 2 2 2 的正整数被称为 windy 数。windy 想知道,在 a a a 和 b b b 之间,包括 a a a 和 b b b ,总共有多少个 windy 数&…...

Python爬虫入门:网络世界的宝藏猎人
今天阿佑将带你踏上Python的肩膀,成为一名网络世界的宝藏猎人! 文章目录 1. 引言1.1 简述Python在爬虫领域的地位1.2 阐明学习网络基础对爬虫的重要性 2. 背景介绍2.1 Python语言的流行与适用场景2.2 网络通信基础概念及其在数据抓取中的角色 3. Python基…...

【NodeMCU实时天气时钟温湿度项目 6】解析天气信息JSON数据并显示在 TFT 屏幕上(心知天气版)
今天是第六专题,主要内容是:导入ArduinoJson功能库,借助该库解析从【心知天气】官网返回的JSON数据,并显示在 TFT 屏幕上。 如您需要了解其它专题的内容,请点击下面的链接。 第一专题内容,请参考&a…...
重构四要素:目的、对象、时机和方法
目录 1.引言 2.重构的目的:为什么重构(why) 3.重构的对象:到底重构什么(what) 4.重构的时机:什么时候重构(when) 5.重构的方法:应该如何重构(how) 6.思考题 1.引言 一些软件工程师对为什么要重构(why)、到底重构什么(what)、什么时候重构(when)应该如何重构(how)等问题的…...

基于Echarts的大数据可视化模板:服务器运营监控
目录 引言背景介绍研究现状与相关工作服务器运营监控技术综述服务器运营监控概述监控指标与数据采集可视化界面设计与实现数据存储与查询优化Echarts与大数据可视化Echarts库以及其在大数据可视化领域的应用优势开发过程和所选设计方案模板如何满足管理的特定需求模板功能与特性…...
Python3 笔记:Python的常量
常量(constant):跟变量相对应,指第一次赋予值后就保持固定不变的值。 Python里面没有声明常量的关键字,其他语言像C/C/Java会有const修饰符,但Python没有。 Python中没有使用语法强制定义常量,…...

【Linux】自动化构建工具make/Makefile和git介绍
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html 目录 前言 Linux项目自动化构建工具-make/Makefile 举例 .PHONY 常见符号 依赖关系…...
C语言—关于字符串(编程实现部分函数功能)
0.前言 当我们使用这些函数功能时,可以直接调用头文件---#include<string.h>,然后直接使用就行了,本文只是手动编写实现函数的部分功能 1.strlen函数功能实现 功能说明:strlen(s)用来计算字符串s的长度,该函数计数不会包括最…...

picoCTF-Web Exploitation-Trickster
Description I found a web app that can help process images: PNG images only! 这应该是个上传漏洞了,十几年没用过了,不知道思路是不是一样的,以前的思路是通过上传漏洞想办法上传一个木马,拿到webshell,今天试试看…...

SSH 免密登录,设置好仍然需要密码登录解决方法
说明: ssh秘钥登录设置好了,但是登录的时候依然需要提供密码 查看系统安全日志,定位问题 sudo cat /var/log/auth.log或者 sudo cat /var/log/secure找到下面的信息 Authentication refused: bad ownership or modes...(网上的…...
【斑马打印机】web前端页面通过BrowserPrint API连接斑马打印机进行RFID条形码贴纸打印
web前端页面通过BrowserPrint API连接斑马打印机进行RFID条形码贴纸打印 在现代物流、仓储和零售行业中,RFID和二维码技术发挥着至关重要的作用。这些技术不仅提高了效率,还增强了追踪和管理的能力。本文将介绍如何使用JavaScript和斑马打印机的BrowserPrint API来打印RFID二…...

DigitalOcean 应用托管更新:应用端到端运行时性能大幅改进
DigitalOcean 希望可以为企业提供所需的工具和基础设施,以帮助企业客户加速云端的开发,实现业务的指数级增长。为此 DigitalOcean 在 2020 年就推出了App Platform。 App Platform(应用托管) 是一个完全托管的 PaaS 解决方案&…...
c/c++对于char*的理解(联合string容器)
在C和C中,char*是一个指向字符(char)的指针。它经常被用来处理C风格的字符串,这种字符串是以空字符(\0)结尾的字符数组。以下是关于char*的一些关键点: C风格的字符串: C风格的字符…...

Web前端三大主流框架是什么?
Web前端开发领域的三大主流框架分别是Angular、React和Vue.js。它们在Web开发领域中占据着重要的地位,各自拥有独特的特点和优势。 Angular Angular是一个由Google开发的前端框架,最初版本称为AngularJS,后来升级为Angular。它是一个完整的…...

一个基于servlet的MVC项目-登录验证
一、MVC的概念 MVC是Model、View、Controller的缩写,分别代表 Web 应用程序中的3种职责1 模型:用于存储数据以及处理用户请求的业务逻辑。 2视图:向控制器提交数据,显示模型中的数据。 3控制器:根据视图提出的请求,判断将请求和数据交给哪个…...

Windows 11 下 kafka 的安装踩坑
安装 windows系统kafka小白入门篇——下载安装,环境配置,入门代码书写(推荐) kafka在windows下安装和使用入门教程 问题1 参考链接 运行kafka集成的zookeeper时,命令:bin\windows\zookeeper-server-star…...
二维数组:行列互换/求最大值及其所在位置/求各行各列的和/矩阵乘积/深入理解二维数组
二维数组 1.定义 只有行号可以省略,初始化 全部初始化/部分初始化/不初始化 2.元素引用 3.存储形式 :顺序存储 按行存储 4.深入理解二维数组 #include<stdio.h> #include<stdlib.h>#define M 2 #define N 3int mian() {int a[M][N] {{1,2,3},{4,5,6}}…...
The Onion Router-洋葱
目录 Tor的运作原理 Tor挑战和局限性 Tor,即The Onion Router(洋葱路由器),是一个用于匿名通信的开放网络,它旨在增强用户的隐私和安全。Tor的名字源自其设计原理,类似于将信息包装在多层“洋葱”中&…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...