使用patchelf解决vscode远程连接不支持低版本glibc的问题

本文主要是介绍使用patchelf解决vscode远程连接不支持低版本glibc的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用patchelf解决vscode远程连接不支持低版本glibc的问题

目录

  • 使用patchelf解决vscode远程连接不支持低版本glibc的问题
    • 1. 动态链接库下载
    • 2. 用 patchelf 修改 vscode-server 依赖的 glibc 版本

VScode 1.86 版本的 remote 要求 glibc 2.28 及以上,于是在各种旧版本服务器上就不支持了。

不支持的 OS 版本

新版本刚发布就在 github 上的 issue 上讨论起来了,VScode 官方文档 中也说明了,从 VS Code 版本 1.86.1(2024 年 1 月)开始提高了远程服务器构建工具链的最低要求。VS Code 分发的预构建服务器与基于 glibc 2.28 或更高版本的 Linux 发行版兼容。

当然给服务器升级 glibc 是一个极其危险的操作,本人曾经就瞎捣鼓升级了 glibc,结果导致系统崩溃,不得已重装了系统。

我们可以利用 patchelf 手动指定动态库,避免了重新编译系统的 glibc。

1. 动态链接库下载

github 上有较为方便的下载 glibc 的仓库 glibc-all-in-one

根据仓库的 README,查看支持的版本:cat list

我选择的是 2.31-0ubuntu9.14_amd64,然后执行 ./download 2.31-0ubuntu9.14_amd64

在当前文件夹下会生成 libs 文件夹,就是刚刚下载的 2.31-0ubuntu9.14_amd64 的动态库。

然后执行 ./build 2.31 arm64,这一步会在根目录下编译生成 /glibc 文件夹,可以将其移动到 glibc-all-in-one 文件夹中。

2. 用 patchelf 修改 vscode-server 依赖的 glibc 版本

在执行命令前,先删除 .vscode-server 文件夹,用 vscode 连接服务器,让它自动重新下载 vscode-server 相关文件,这个时候在 ~/.vscode-server/bin 中应该只有一个由数字和字母组成随机字符串的文件夹(我的服务器上是 863d2581ecda6849923a2118d93a088b0745d9d6,不同人应该不一样),进入这个文件夹,有一个 node 二进制文件,我们要重新 patch 的就是这个文件。

执行命令:

patchelf --set-interpreter ~/pack/glibc-all-in-one/libs/2.31-0ubuntu9.14_amd64/ld-linux-x86-64.so.2 --set-rpath ~/pack/glibc-all-in-one/libs/2.31-0ubuntu9.14_amd64/:~/pack/glibc-all-in-one/glibc/2.31/amd64/lib --force-rpath ~/.vscode-server/bin/863d2581ecda6849923a2118d93a088b0745d9d6/node

--set-interpreter 后面跟的是可执行文件的解释器路径,需要指定动态链接器的路径,路径为 ./glibc-all-in-one/libs/[your downloaded glibc version]/ld-linux-x86-64.so.2,动态链接器负责在程序运行时加载所需的共享库。

--set-rpath 这部分设置了可执行文件的运行时搜索路径(Runtime PATH),指定了程序在运行时搜索共享库时应该查找的路径。这里指定了两个路径包含了 glibc 核心库和其他库。这里的路径为 glibc-all-in-one/libs 文件夹下的你下载的不同版本的 glibc 文件夹和编译生成的 glibc/[version]/[arch]/lib 文件夹。

--force-rpath 后面跟的就是要修改的 vscode-server 的 node 文件。

如果执行命令时提示:patchelf: open: Text file busy,将本机上 vscode 运行的远程连接关掉再执行就可以了。

重新打开 vscode,就不会有操作系统版本不支持的提示了~~

这篇关于使用patchelf解决vscode远程连接不支持低版本glibc的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/853714

相关文章

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

mybatis中resultMap的association及collectio的使用详解

《mybatis中resultMap的association及collectio的使用详解》MyBatis的resultMap定义数据库结果到Java对象的映射规则,包含id、type等属性,子元素需... 目录1.reusltmap的说明2.association的使用3.collection的使用4.总

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo