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 "====================================="
相关推荐
西安景驰电子1 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php
luj_17681 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
水无痕simon2 小时前
3 短信应用场景以及平台架构
java·服务器
猫吃了源码2 小时前
k9s简介和安装
linux·docker·kubernetes
IPdodo_3 小时前
静态 IP、住宅 IP 和固定出口有什么区别?开发场景选型指南
服务器·网络·网络协议·tcp/ip·代理ip
云原生指北3 小时前
Docker Sandboxes 上手:从安装到第一次跑 Agent
运维·docker·容器
小马同学-3 小时前
高可用-Keepalived全解析
linux·运维
ziyun6668884 小时前
Docker 容器化 Web 服务架构搭建与自动化运维项目
运维·docker·架构
wavemap4 小时前
HyperPHP 免费主机无限流量
服务器·php
Forever Nore4 小时前
LeetCode 13 罗马数字转整数 - 按规则处理
linux·服务器·leetcode