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的名字源自其设计原理,类似于将信息包装在多层“洋葱”中&…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
