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

相关推荐
JHC00000013 分钟前
基于Ollama,Milvus构建的建议知识检索系统
人工智能·python·milvus
ZPC821019 分钟前
如何创建一个单例类 (Singleton)
开发语言·前端·人工智能
AppOS38 分钟前
手把手教你 Openclaw 在 Mac 上本地化部署,保姆级教程!接入飞书打造私人 AI 助手
人工智能·macos·飞书
workflower1 小时前
AI制造-推荐初始步骤
java·开发语言·人工智能·软件工程·制造·需求分析·软件需求
wukangjupingbb1 小时前
解析Computational driven drug discovery: from structure to clinic
人工智能·机器学习
tctasia1 小时前
TCT Asia 2026现场观察:中国增材制造,已经进入“规模化时刻”(上)
大数据·人工智能·制造
AI周红伟1 小时前
AI自动盯盘与定时行情分析:OpenClaw股票辅助Agent集成完整使用指南-周红伟
运维·服务器·人工智能·音视频·火山引擎
Legend NO241 小时前
大模型与知识图谱的协同技术体系
人工智能·自然语言处理·知识图谱
fuquxiaoguang1 小时前
MetaClaw:让AI在对话中悄悄变强,不用GPU也能持续进化
人工智能·metaclaw