install.sh 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/usr/bin/env bash
  2. # 一次性安装(可重复执行):创建专用用户 agentsvc、目录与权限、systemd 服务、agent-claude 命令。
  3. # 用法:sudo deploy/install.sh
  4. set -euo pipefail
  5. cd "$(dirname "$0")/.."
  6. ROOT=/srv/agent-server
  7. SVC=agentsvc
  8. [ "$(id -u)" = 0 ] || { echo "请用 sudo 运行" >&2; exit 1; }
  9. if ! id "$SVC" &>/dev/null; then
  10. useradd --system --home-dir "$ROOT/home" --no-create-home --shell /usr/sbin/nologin "$SVC"
  11. echo "已创建用户 $SVC"
  12. fi
  13. # 程序与共享资源:root 所有、服务只读(Agent 无法篡改自身代码、Python 环境和技能)
  14. install -d -o root -g root -m 0755 "$ROOT" "$ROOT/app" "$ROOT/runtime" "$ROOT/skills"
  15. chown -R root:root "$ROOT/app" "$ROOT/runtime" "$ROOT/skills"
  16. chmod -R a+rX "$ROOT/runtime" "$ROOT/skills"
  17. # 服务数据:只有 agentsvc 可访问(含 CLI 登录态、数据库、会话工作区)
  18. for d in home data managed-skills workspaces logs; do
  19. install -d -o "$SVC" -g "$SVC" -m 0700 "$ROOT/$d"
  20. chown -R "$SVC:$SVC" "$ROOT/$d"
  21. done
  22. # 资料库:agentsvc 组可读写,管理员加入该组后可以直接往里放资料
  23. install -d -o "$SVC" -g "$SVC" -m 2770 "$ROOT/knowledge"
  24. chown "$SVC:$SVC" "$ROOT/knowledge"
  25. if [ -n "${SUDO_USER:-}" ] && [ "$SUDO_USER" != root ]; then
  26. usermod -aG "$SVC" "$SUDO_USER"
  27. echo "已把 $SUDO_USER 加入 $SVC 组(重新登录后生效,用于往资料库放文件)"
  28. fi
  29. # 资料库挂载服务(docs/design/21-knowledge-sources.md §9.4):允许平台(agentsvc)访问部署用户挂载的目录
  30. if [ -f /etc/fuse.conf ] && ! grep -q '^user_allow_other' /etc/fuse.conf; then
  31. echo user_allow_other >> /etc/fuse.conf
  32. echo "已在 /etc/fuse.conf 中开启 user_allow_other"
  33. fi
  34. if [ -n "${SUDO_USER:-}" ] && [ "$SUDO_USER" != root ]; then
  35. install -d -o "$SVC" -g "$SVC" -m 2770 "$ROOT/knowledge/files"
  36. install -d -o "$SUDO_USER" -g "$SVC" -m 0750 "$ROOT/knowledge/mnt"
  37. install -d -o "$SUDO_USER" -g "$SVC" -m 2750 "$ROOT/mounter"
  38. fi
  39. install -m 0644 deploy/agent-server.service /etc/systemd/system/agent-server.service
  40. install -m 0755 deploy/agent-claude /usr/local/bin/agent-claude
  41. install -m 0755 deploy/agent-codex /usr/local/bin/agent-codex
  42. systemctl daemon-reload
  43. systemctl enable agent-server >/dev/null
  44. echo "安装完成(挂载服务 agent-mounter 由 deploy.sh 安装,以 ${SUDO_USER:-部署用户} 运行)。下一步:deploy/deploy.sh 部署程序,然后执行 agent-claude 并输入 /login 登录。"