Hermes-Agentv-0.20.0

一、 安装UV工具

使用官方安装脚本在 Linux 系统上安装 uv(一个极速的 Python 包和项目管理工具)。这是最快捷的方式,无需预先安装 Python 或其他依赖,脚本会自动下载预编译的二进制文件并配置环境变量。

1、执行安装命令‌

打开终端,运行以下命令:

bash 复制代码
curl -LsSf https://astral.sh/uv/install.sh | sh

如果系统中没有 curl,可以使用 wget:

bash 复制代码
wget -qO- https://astral.sh/uv/install.sh | sh

2、刷新环境变量‌

安装完成后,为了让系统识别 uv 命令,你需要重启终端,或者手动刷新当前 shell 的配置:

bash 复制代码
# 如果你使用的是 bash
source ~/.bashrc

# 如果你使用的是 zsh
source ~/.zshrc

注意:脚本通常会将 uv 安装在 ~/.cargo/bin/ 或 ~/.local/bin/ 目录下,并自动尝试将其添加到 PATH 中。如果重启终端后仍提示命令未找到,请手动将安装目录加入 PATH。

3、验证安装‌

输入以下命令检查是否安装成功及查看版本:

bash 复制代码
uv --version

二、Hermes生成的脚本

脚本内容如下,大家根据自己的实际场景与需求自行调整吧😆

bash 复制代码
#!/bin/bash
# ============================================================
# Hermes Agent 全新重装脚本 (v0.10.0 -> v0.20.0)
# 自包含、可后台运行、带回滚逻辑
# 用法: bash /root/backups/reinstall_hermes.sh
# 日志: /root/backups/reinstall_hermes.log
# ============================================================
set -u
LOG=/root/backups/reinstall_hermes.log
exec > >(tee -a "$LOG") 2>&1

echo "====================================="
echo "[$(date)] 开始 Hermes 全新重装 (v0.20.0)"
echo "====================================="

CODE_DIR=/opt/hermes-agent
BACKUP_DIR=/opt/hermes-agent.bak.v0.10
VENV_OK=/opt/hermes-agent/.venv/bin/python
SRV=hermes-gateway.service

cd /root

# ---------- 0. 前置检查 ----------
echo "[1/6] 前置检查..."
if [ ! -f /root/backups/hermes-0.10.0-preupgrade-2026xxxx.zip ]; then
  echo "✗ 备份 zip 不存在,中止。"
  exit 1
fi
command -v git >/dev/null || { echo "✗ git 不存在"; exit 1; }
/opt/hermes-agent/.venv/bin/uv --version >/dev/null 2>&1 || { echo "✗ uv 不可用"; exit 1; }
echo "✓ 前置检查通过"

# ---------- 1. 停服务 ----------
echo "[2/6] 停止网关服务 $SRV ..."
systemctl stop "$SRV" 2>&1 || echo "  (stop 返回非零,继续)"
# 等待进程退出
for i in 1 2 3 4 5; do
  if ! pgrep -f "hermes_cli.main gateway" >/dev/null 2>&1; then
    break
  fi
  sleep 2
done
echo "✓ 网关已停止"

# ---------- 2. 备份旧代码目录(回滚点) ----------
echo "[3/6] 备份当前代码目录 → $BACKUP_DIR ..."
if [ -d "$BACKUP_DIR" ]; then
  rm -rf "$BACKUP_DIR"
fi
mv "$CODE_DIR" "$BACKUP_DIR" 2>&1
echo "✓ 旧目录已备份到 $BACKUP_DIR"

# ---------- 3. 全新 git clone ----------
echo "[4/6] git clone v0.20.0 → $CODE_DIR ..."
git clone --depth 1 --branch v2026.8.3 https://github.com/NousResearch/hermes-agent.git "$CODE_DIR" 2>&1
if [ $? -ne 0 ] || [ ! -f "$CODE_DIR/pyproject.toml" ]; then
  echo "✗ git clone 失败,尝试回滚..."
  rm -rf "$CODE_DIR"
  mv "$BACKUP_DIR" "$CODE_DIR"
  echo "已回滚到原目录。"
  systemctl start "$SRV"
  exit 1
fi
echo "✓ 源码克隆成功"

# ---------- 4. 建 venv + 装依赖 ----------
echo "[5/6] 创建 venv 并安装依赖 (all+feishu+messaging)..."
cd "$CODE_DIR"
# 重要: 此时 .venv 已被 mv 到 BACKUP_DIR, 用旧 venv 的 uv 或系统 uv
UV_BIN=""
for cand in "/opt/hermes-agent.bak.v0.10/.venv/bin/uv" "$(command -v uv 2>/dev/null)"; do
  if [ -n "$cand" ] && [ -x "$cand" ]; then
    UV_BIN="$cand"
    break
  fi
done
if [ -z "$UV_BIN" ]; then
  echo "✗ 找不到可用的 uv。回滚。"
  rm -rf "$CODE_DIR"; mv "$BACKUP_DIR" "$CODE_DIR"
  systemctl start "$SRV" 2>/dev/null
  exit 1
fi
echo "使用 uv: $UV_BIN"
PY_INTERP=/opt/aiext/bin/python3.12
[ -x "$PY_INTERP" ] || PY_INTERP=python3.12
"$UV_BIN" venv .venv --python "$PY_INTERP" 2>&1
if [ $? -ne 0 ]; then
  echo "✗ venv 创建失败。回滚。"
  systemctl start "$SRV" 2>/dev/null
  rm -rf "$CODE_DIR"; mv "$BACKUP_DIR" "$CODE_DIR"
  exit 1
fi
# 安装依赖 (优先 uv sync 用 lock 保持一致性; 失败则回退 uv pip install)
"$UV_BIN" sync --extra all --extra feishu --extra messaging 2>&1
INSTALL_RC=$?
if [ $INSTALL_RC -ne 0 ]; then
  echo "  (uv sync 失败,回退到 uv pip install)..."
  "$UV_BIN" pip install --python .venv/bin/python -e ".[all,feishu,messaging]" 2>&1
  INSTALL_RC=$?
fi
if [ $INSTALL_RC -ne 0 ]; then
  echo "✗ 依赖安装失败(rc=$INSTALL_RC)。回滚。"
  rm -rf "$CODE_DIR"; mv "$BACKUP_DIR" "$CODE_DIR"
  systemctl start "$SRV" 2>/dev/null
  exit 1
fi
echo "✓ 依赖安装完成"

# ---------- 5. 验证新版本 ----------
echo "[6/6] 验证新版本..."
if [ ! -x "$VENV_OK" ]; then
  echo "✗ 新 venv python 不存在。回滚。"
  rm -rf "$CODE_DIR"; mv "$BACKUP_DIR" "$CODE_DIR"
  systemctl start "$SRV" 2>/dev/null
  exit 1
fi
NEW_VER=$("$VENV_OK" -m hermes_cli.__init__ 2>/dev/null || "$VENV_OK" -c "import hermes_cli; print('ok')" 2>&1)
echo "新版本探测输出: $NEW_VER"
VER=$("$VENV_OK" -m pip show hermes-agent 2>/dev/null | grep -i "^Version" || echo "unknown")
echo "安装版本: $VER"

# 即使版本显示不完美,只要 venv 正常且能 import 就继续
"$VENV_OK" -c "import hermes_cli, run_agent" 2>&1 && echo "✓ 核心模块可导入" || { echo "✗ 核心模块导入失败,回滚"; rm -rf "$CODE_DIR"; mv "$BACKUP_DIR" "$CODE_DIR"; systemctl start "$SRV"; exit 1; }

# ---------- 6. 启动网关 ----------
echo "启动网关服务..."
systemctl daemon-reload 2>&1
systemctl enable "$SRV" 2>&1
systemctl start "$SRV" 2>&1
sleep 5
if systemctl is-active --quiet "$SRV"; then
  echo "✓ 网关已启动 (systemd 显示 active)"
else
  echo "⚠ 网关启动状态非 active,检查日志:"
  journalctl -u "$SRV" --no-pager -n 30 2>&1 | tail -30
  echo "⚠ 注意: 服务启动失败。可通过 systemctl status $SRV 查看。如需回滚:"
  echo "  systemctl stop $SRV; rm -rf /opt/hermes-agent; mv /opt/hermes-agent.bak.v0.10 /opt/hermes-agent; systemctl start $SRV"
fi

echo "====================================="
echo "[$(date)] 重装流程结束"
echo "  新版: /opt/hermes-agent  (v0.20.0 预期)"
echo "  旧版备份: /opt/hermes-agent.bak.v0.10"
echo "  日志: $LOG"
echo "====================================="
相关推荐
C++ 老炮儿的技术栈4 小时前
C++ const 的3个核心作用
服务器·c语言·c++·算法·c
进击的荆棘4 小时前
Linux系统——库的原理与制作之制作和使用动静态库
linux·动静态库
论文复现现场4 小时前
8卡 A100 服务器哪里租?NVLink、RDMA 与 NCCL 验收指南
linux·服务器·php·分布式训练·rdma·nvlink·nccl
派小心.4 小时前
多端数据分析平台的漏斗可以跨端搭建吗?5 步搭出跨端转化漏斗
大数据·运维·服务器·前端·数据分析
芷栀夏5 小时前
极空间部署Photopea:Docker运行、网页修图与多设备使用
运维·docker·容器
见闻小天地5 小时前
数据中心柴发出口保护怎么选?Emax 与 Tmax XT 的定位与分工
大数据·运维·人工智能·业界资讯
迈威通信5 小时前
迈威 MISCOM8212GP-4XGF-8GTPoE90-DC48 接入层实践:高密度 PoE++ 与万兆上行的整合方案
运维·网络·信息与通信
小小的木头人5 小时前
CentOS 7.9 离线安装 NVIDIA Container Toolkit:1.14.0 与 1.20.1 两种版本方案
linux·运维·centos
哭哭啼5 小时前
Linux 资源紧缺模拟:CPU、内存、磁盘与文件描述符压力测试
linux·运维·压力测试
酒神dnspup5 小时前
多地区网站可用性监控怎么做?DNSPup 从基线到告警的完整实战
运维·ios·云计算·iphone·dns·网络监控