#!/bin/bash # PT System Checking 一键部署脚本 # 支持从 Gitea 下载并配置为 systemd 服务 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 配置变量 GITEA_REPO="https://gitea.service.jazzwhom.top/Passthem/pt-disk-report" SERVICE_NAME="pt_system_checking" INSTALL_DIR="/opt/${SERVICE_NAME}" SYSTEMD_SERVICE="/etc/systemd/system/${SERVICE_NAME}.service" # 打印信息函数 print_info() { echo -e "${GREEN}[INFO]${NC} $1" } print_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查是否以 root 运行 check_root() { if [ "$EUID" -ne 0 ]; then print_error "请使用 root 权限运行此脚本" echo "使用方法: sudo bash install.sh" exit 1 fi } # 检测系统架构 detect_arch() { local arch=$(uname -m) case $arch in x86_64) echo "amd64" ;; aarch64|arm64) echo "arm64" ;; *) print_error "不支持的架构: $arch" exit 1 ;; esac } # 获取最新版本 get_latest_version() { local version=$(curl -s "${GITEA_REPO}/releases" | grep -oP 'releases/tag/v\K[0-9.]+' | head -1) if [ -z "$version" ]; then version="0.1.0" print_warn "无法自动获取版本,使用默认版本 ${version}" >&2 fi echo "$version" } # 下载二进制文件 download_binary() { local arch=$1 local version=$2 local binary_name="${SERVICE_NAME}-${arch}" local download_url="${GITEA_REPO}/releases/download/v${version}/${binary_name}" print_info "下载 ${arch} 架构的二进制文件..." print_info "下载地址: ${download_url}" if ! curl -L -f -o "/tmp/${binary_name}" "${download_url}"; then print_error "下载失败,请检查版本号和网络连接" print_info "尝试的 URL: ${download_url}" exit 1 fi chmod +x "/tmp/${binary_name}" print_info "下载完成" } # 交互式配置 interactive_config() { echo "" print_info "=== 配置服务参数 ===" echo "" # 检查是否为非交互模式(通过管道执行) if [ ! -t 0 ]; then print_info "检测到非交互模式,使用默认配置" SERVER_URL="" INTERVAL=300 LOG_LEVEL="info" print_info "配置摘要:" echo " 服务器 URL: ${SERVER_URL:-未配置}" echo " 检查间隔: ${INTERVAL} 秒" echo " 日志级别: ${LOG_LEVEL}" echo "" return fi # 服务器 URL read -p "请输入服务器 URL(用于上报磁盘状态,留空则不上报): " SERVER_URL SERVER_URL=${SERVER_URL:-""} # 检查间隔 read -p "请输入检查间隔(秒,默认 300): " INTERVAL INTERVAL=${INTERVAL:-300} # 日志级别 read -p "请输入日志级别(trace/debug/info/warn/error,默认 info): " LOG_LEVEL LOG_LEVEL=${LOG_LEVEL:-"info"} echo "" print_info "配置摘要:" echo " 服务器 URL: ${SERVER_URL:-未配置}" echo " 检查间隔: ${INTERVAL} 秒" echo " 日志级别: ${LOG_LEVEL}" echo "" read -p "确认以上配置?(y/n): " confirm if [[ ! $confirm =~ ^[Yy]$ ]]; then print_warn "取消安装" exit 0 fi } # 安装服务 install_service() { local arch=$1 local binary_name="${SERVICE_NAME}-${arch}" print_info "安装服务..." # 创建安装目录 mkdir -p "${INSTALL_DIR}" # 复制二进制文件 cp "/tmp/${binary_name}" "${INSTALL_DIR}/${SERVICE_NAME}" chmod +x "${INSTALL_DIR}/${SERVICE_NAME}" # 创建 systemd 服务文件 cat > "${SYSTEMD_SERVICE}" </dev/null || true rm -f "${SYSTEMD_SERVICE}" rm -rf "${INSTALL_DIR}" systemctl daemon-reload print_info "服务已卸载" } # 主函数 main() { echo "" print_info "=== PT System Checking 一键部署脚本 ===" echo "" # 检查参数 if [ "$1" == "uninstall" ]; then check_root uninstall_service exit 0 fi check_root # 检测架构 ARCH=$(detect_arch) print_info "检测到系统架构: ${ARCH}" # 获取版本 print_info "获取最新版本信息..." VERSION=$(get_latest_version) print_info "使用版本: v${VERSION}" # 下载二进制文件 download_binary "${ARCH}" "${VERSION}" # 交互式配置 interactive_config # 安装服务 install_service "${ARCH}" # 启动服务 start_service # 清理临时文件 rm -f "/tmp/${SERVICE_NAME}-${ARCH}" echo "" print_info "部署完成!" } # 运行主函数 main "$@"