在老版本 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

相关推荐
Axinyp8 小时前
Windows WSL2 安装 OpenClaw 踩坑指南
人工智能
恋猫de小郭8 小时前
你用的 Claude 可能是虚假 Claude ,论文数据告诉你,Shadow API 中的欺骗性模型声明
前端·人工智能·ai编程
Johny_Zhao9 小时前
centos7安装部署openclaw
linux·人工智能·信息安全·云计算·yum源·系统运维·openclaw
郑鱼咚9 小时前
现在的AI热潮,恰恰证明了这个世界就是个草台班子
前端·人工智能·程序员
美团技术团队9 小时前
LongCat 为 OpenClaw 装上效率引擎:你的自动化任务还能再快 30%
人工智能
洞见前行10 小时前
国内Windows 部署 OpenClaw 全记录:国产模型 + 飞书接入一次搞定
人工智能
JVM跑得快10 小时前
Python 基础语法 × Java 对比
人工智能
AI攻城狮10 小时前
Kimi Bot + OpenClaw 完整配置指南:5 步实现本地 AI Agent 集成
人工智能·云原生·aigc