install-datamanagementd.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. # 用法:
  4. # sudo ./install-datamanagementd.sh --binary /path/to/datamanagementd
  5. # 或:
  6. # sudo ./install-datamanagementd.sh --source /path/to/sub2api/repo
  7. BIN_PATH=""
  8. SOURCE_PATH=""
  9. INSTALL_DIR="/opt/sub2api"
  10. DATA_DIR="/var/lib/sub2api/datamanagement"
  11. SERVICE_FILE_NAME="sub2api-datamanagementd.service"
  12. function print_help() {
  13. cat <<'EOF'
  14. 用法:
  15. install-datamanagementd.sh [--binary <datamanagementd二进制路径>] [--source <仓库路径>]
  16. 参数:
  17. --binary 指定已构建的 datamanagementd 二进制路径
  18. --source 指定 sub2api 仓库路径(脚本会执行 go build)
  19. -h, --help 显示帮助
  20. 示例:
  21. sudo ./install-datamanagementd.sh --binary ./datamanagement/datamanagementd
  22. sudo ./install-datamanagementd.sh --source /opt/sub2api-src
  23. EOF
  24. }
  25. while [[ $# -gt 0 ]]; do
  26. case "$1" in
  27. --binary)
  28. BIN_PATH="${2:-}"
  29. shift 2
  30. ;;
  31. --source)
  32. SOURCE_PATH="${2:-}"
  33. shift 2
  34. ;;
  35. -h|--help)
  36. print_help
  37. exit 0
  38. ;;
  39. *)
  40. echo "未知参数: $1"
  41. print_help
  42. exit 1
  43. ;;
  44. esac
  45. done
  46. if [[ -n "$BIN_PATH" && -n "$SOURCE_PATH" ]]; then
  47. echo "错误: --binary 与 --source 只能二选一"
  48. exit 1
  49. fi
  50. if [[ -z "$BIN_PATH" && -z "$SOURCE_PATH" ]]; then
  51. echo "错误: 必须提供 --binary 或 --source"
  52. exit 1
  53. fi
  54. if [[ "$(id -u)" -ne 0 ]]; then
  55. echo "错误: 请使用 root 权限执行(例如 sudo)"
  56. exit 1
  57. fi
  58. if [[ -n "$SOURCE_PATH" ]]; then
  59. if [[ ! -d "$SOURCE_PATH/datamanagement" ]]; then
  60. echo "错误: 无效仓库路径,未找到 $SOURCE_PATH/datamanagement"
  61. exit 1
  62. fi
  63. echo "[1/6] 从源码构建 datamanagementd..."
  64. (cd "$SOURCE_PATH/datamanagement" && go build -o datamanagementd ./cmd/datamanagementd)
  65. BIN_PATH="$SOURCE_PATH/datamanagement/datamanagementd"
  66. fi
  67. if [[ ! -f "$BIN_PATH" ]]; then
  68. echo "错误: 二进制文件不存在: $BIN_PATH"
  69. exit 1
  70. fi
  71. if ! id sub2api >/dev/null 2>&1; then
  72. echo "[2/6] 创建系统用户 sub2api..."
  73. useradd --system --no-create-home --shell /usr/sbin/nologin sub2api
  74. else
  75. echo "[2/6] 系统用户 sub2api 已存在,跳过创建"
  76. fi
  77. echo "[3/6] 安装 datamanagementd 二进制..."
  78. mkdir -p "$INSTALL_DIR"
  79. install -m 0755 "$BIN_PATH" "$INSTALL_DIR/datamanagementd"
  80. echo "[4/6] 准备数据目录..."
  81. mkdir -p "$DATA_DIR"
  82. chown -R sub2api:sub2api /var/lib/sub2api
  83. chmod 0750 "$DATA_DIR"
  84. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  85. SERVICE_TEMPLATE="$SCRIPT_DIR/$SERVICE_FILE_NAME"
  86. if [[ ! -f "$SERVICE_TEMPLATE" ]]; then
  87. echo "错误: 未找到服务模板 $SERVICE_TEMPLATE"
  88. exit 1
  89. fi
  90. echo "[5/6] 安装 systemd 服务..."
  91. cp "$SERVICE_TEMPLATE" "/etc/systemd/system/$SERVICE_FILE_NAME"
  92. systemctl daemon-reload
  93. systemctl enable --now sub2api-datamanagementd
  94. echo "[6/6] 完成,当前状态:"
  95. systemctl --no-pager --full status sub2api-datamanagementd || true
  96. cat <<'EOF'
  97. 下一步建议:
  98. 1. 查看日志:sudo journalctl -u sub2api-datamanagementd -f
  99. 2. 在 sub2api(容器部署时)挂载 socket:
  100. /tmp/sub2api-datamanagement.sock:/tmp/sub2api-datamanagement.sock
  101. 3. 进入管理后台“数据管理”页面确认 agent=enabled
  102. EOF