在老版本 HPC 系统上运行 Antigravity(反重力)

在老版本 HPC 系统上运行 Antigravity(反重力)

1. 背景

在许多科研机构的 HPC 集群中,系统环境往往比较保守,长期保持在较老版本的 Linux 发行版上。

这种环境对于传统科学计算任务来说通常没有问题,但在使用 现代远程开发工具(例如 Antigravity、Cursor 等)时,可能会遇到兼容性问题。

在尝试使用 Antigravity 连接 HPC 节点时,远端会自动安装并启动一个 remote server 。

然而在老版本系统中,这个 server 在启动时可能会因为系统运行库版本过旧而失败,从而导致远程开发环境无法建立。

本文提供一种解决思路。


2. 问题表现

当 Antigravity 尝试连接服务器时,日志中可能出现类似错误:

vbscript 复制代码
Error: installation failed.
SSH server closed unexpectedly.

查看更详细日志,可以看到远端 server 启动失败,例如:

bash 复制代码
~/.antigravity-server/bin/<server-version>/node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
~/.antigravity-server/bin/<server-version>/node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
~/.antigravity-server/bin/<server-version>/node: /lib64/libc.so.6: version `GLIBC_2.28' not found
Warning: valid glibc version not found. Antigravity only supports remote connections with glibc >= 2.28

从用户角度看,表现为:

  • SSH 登录看似正常
  • 但 Antigravity 无法建立远程开发环境
  • 连接过程在启动远端 server 时失败

需要注意的是:

SSH 本身是成功的,失败发生在 SSH 登录后远端 server 启动阶段。

连接流程实际上类似:

bash 复制代码
Antigravity
      │
      ▼
SSH 登录 HPC 节点
      │
      ▼
启动 ~/.antigravity-server/bin/<version>/node
      │
      ▼
系统运行库版本过旧
      │
      ▼
server 启动失败

3. 解决思路

解决方案的核心思路是:

不要在宿主机系统上启动 remote server,而是在一个更新的容器环境中启动它。

整体架构如下:

markdown 复制代码
Antigravity
      │
      ▼
SSH 登录 HPC 节点
      │
      ▼
进入容器环境
      │
      ▼
在容器中启动 remote server

只要 remote server 能在容器中成功启动,后续连接通常就可以复用该 server。


4. 容器运行时选择

在 HPC 环境中,普通用户通常无法直接使用 Docker daemon。

因此更常见的选择是:

复制代码
Singularity / Apptainer

它们专门为 HPC 场景设计,允许用户在不具备 root 权限的情况下运行容器。


5. 准备容器镜像

通常可以直接从 Docker Hub 获取基础系统镜像,例如 Ubuntu:

bash 复制代码
singularity pull ubuntu.sif docker://ubuntu:22.04

但在很多 HPC 环境中,计算节点无法直接访问 Docker Hub,这时会出现类似错误:

vbnet 复制代码
While making image from oci registry: error fetching image to cache:
failed to get checksum for docker://ubuntu:22.04:
error pinging docker registry registry-1.docker.io:
Get "https://registry-1.docker.io/v2/":
read tcp xxxx->xxxx: read: connection reset by peer

这通常说明:

  • 计算节点无法访问公网
  • Docker Hub 被网络策略限制

解决方法

可以在 本地机器下载镜像,然后上传到服务器。

例如在本地执行:

bash 复制代码
apptainer pull ubuntu.sif docker://ubuntu:22.04

然后上传到服务器,例如:

bash 复制代码
scp ubuntu.sif user@server:~/container/

最终镜像路径示例:

javascript 复制代码
~/container/ubuntu.sif

6. 编写容器启动脚本

为了方便进入容器,可以创建一个启动脚本,例如:

javascript 复制代码
~/container/start_container.sh

示例内容如下:

bash 复制代码
#!/bin/bash

# 初始化 module 环境(兼容非交互 shell)
if [ -f /etc/profile.d/modules.sh ]; then
    . /etc/profile.d/modules.sh
elif [ -f /usr/share/Modules/init/bash ]; then
    . /usr/share/Modules/init/bash
fi

# 补充 module 搜索路径(某些 HPC 环境需要)
module use /path/to/modulefiles 2>/dev/null || true

# 加载 Singularity
module load singularity

# 进入容器
exec singularity exec \
    --bind $HOME:$HOME \
    ~/container/ubuntu.sif \
    bash

赋予执行权限:

bash 复制代码
chmod +x ~/container/start_container.sh

脚本的主要作用:

  1. 初始化 module 环境(兼容非交互 shell)
  2. 加载 Singularity
  3. 启动 Ubuntu 容器

7. 临时修改 shell 启动流程

为了让 Antigravity 第一次启动 remote server 时进入容器,可以 临时修改 .bashrc。

在 .bashrc 中加入:

bash 复制代码
exec ~/container/start_container.sh

此时 SSH 登录流程变为:

vbscript 复制代码
SSH 登录
   │
   ▼
.bashrc 执行
   │
   ▼
进入容器
   │
   ▼
Antigravity 在容器中安装 remote server

8. 第一次连接成功后发生的事情

当 Antigravity 第一次成功连接时,它会在远端创建一个目录,例如:

bash 复制代码
~/.antigravity-server

该目录包含:

vbscript 复制代码
.antigravity-server/
├── bin/
│   └── <server-version>/
│       ├── node
│       └── server files

remote server 就运行在这里。


9. 一个重要现象

实践中发现:

只要第一次在容器环境中成功构建并启动 remote server,后续连接通常可以复用该 server。

连接流程会变成:

vbscript 复制代码
Antigravity
   │
   ▼
SSH 登录
   │
   ▼
检测远端 server 已存在
   │
   ▼
直接复用

因此后续连接可能 不再依赖容器环境。


10. 非常重要的一步

一旦第一次连接成功,必须 立即恢复 .bashrc。

也就是说,将之前添加的行注释掉:

bash 复制代码
# exec ~/container/start_container.sh

否则:

  • 所有 SSH 登录都会自动进入容器
  • 普通 shell 使用会变得不方便
  • 登录终端可能直接变为容器提示符

因此正确流程是:

  1. 临时修改 .bashrc
  2. 成功连接 Antigravity
  3. 立刻恢复 .bashrc

11. 最终操作流程总结

完整流程如下:

Step 1

准备容器镜像:

javascript 复制代码
~/container/ubuntu.sif

如果服务器无法访问 Docker Hub:

  • 在本地下载
  • 上传到服务器

Step 2

编写容器启动脚本:

javascript 复制代码
~/container/start_container.sh

Step 3

在 .bashrc 中临时加入:

bash 复制代码
exec ~/container/start_container.sh

Step 4

使用 Antigravity 连接服务器一次

使其成功安装 remote server:

bash 复制代码
~/.antigravity-server

Step 5

恢复 .bashrc:

bash 复制代码
# exec ~/container/start_container.sh

12. 经验总结

这次问题的关键经验包括:

  1. SSH 本身通常没有问题
  2. 失败发生在远端 server 启动阶段
  3. 老版本系统运行库可能无法满足现代开发工具需求
  4. 容器是绕过旧系统环境的有效方法
  5. 第一次成功启动 remote server 最关键
  6. remote server 一旦建立,后续连接通常会复用

13. 常用排查命令

查看 remote server 目录:

bash 复制代码
ls ~/.antigravity-server

查看 server 进程:

bash 复制代码
ps -ef | grep antigravity

删除 server(用于重新安装):

bash 复制代码
rm -rf ~/.antigravity-server

手动测试容器脚本:

bash 复制代码
~/container/start_container.sh

相关推荐
lucas_AI几秒前
24 天、4310 万行代码:AI 集群啃下了人类史上最长的数学证明
人工智能
SEO_juper3 分钟前
Node.js 页面主题聚焦度检测:title 和正文各说各的,AI 也读不懂
开发语言·人工智能·node.js·seo·外贸独立站
IT_陈寒4 分钟前
React实战技巧总结:如何优雅处理复杂列表的渲染卡顿问题?
前端·人工智能·后端
lucas_AI6 分钟前
DeepMind 发布 Genie 4:世界模型会「出声」了,一句话实时改写世界
人工智能·llm
CAIE研习社7 分钟前
学过提示词,想继续提升AI能力,可以考哪些证书?
人工智能
TK泰妞11 分钟前
TikTok AI 带货短视频有哪些类型?6 种内容结构与选型方法
人工智能·音视频
长不大的杨瑞杰13 分钟前
OpenCode v2 远程开发实战:Web UI、Pair、SSH 隧道与 OpenTunnel 安全接入
人工智能·安全·云计算·软件工程·devops
阿俊-全栈开发14 分钟前
LikeShop 多商户高级版商城满减满赠活动的自定义规则二开实现
大数据·人工智能·likeshop开源商城·likeshop单商户标准版·多商户源码
狂奔solar15 分钟前
DS Bot:让 AI 拥有「数字团队协作」的插件架构
人工智能·架构
qq_252941316816 分钟前
混凝土损伤分割与检测数据集 | 混凝土损伤 实例分割 裂缝检测 裸露钢筋 结构健康监测9261期
人工智能·yolo·目标检测·计算机视觉·混泥土