From 5147f7633657eed08261469794c5ab8102c53855 Mon Sep 17 00:00:00 2001 From: passthem Date: Sun, 22 Feb 2026 20:07:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=89=E8=A3=85=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + Makefile | 110 ++++++++++++++++++++++ README.md | 125 +++++++++++++++++++++++++ install.sh | 265 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 502 insertions(+) create mode 100644 Makefile create mode 100644 README.md create mode 100755 install.sh diff --git a/.gitignore b/.gitignore index ea8c4bf..c79e61b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /target +/release +/.cargo diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4ccf283 --- /dev/null +++ b/Makefile @@ -0,0 +1,110 @@ +# Makefile for pt_system_checking +# 支持 amd64 和 arm64 架构的交叉编译 + +# 项目名称 +PROJECT_NAME = pt_system_checking +VERSION = 0.1.0 + +# 构建目录 +BUILD_DIR = target +RELEASE_DIR = release + +# 目标架构 +ARCH_AMD64 = x86_64-unknown-linux-gnu +ARCH_ARM64 = aarch64-unknown-linux-gnu + +# 输出二进制文件名 +BINARY_AMD64 = $(PROJECT_NAME)-amd64 +BINARY_ARM64 = $(PROJECT_NAME)-arm64 + +.PHONY: all help install-targets build-amd64 build-arm64 build-all clean release test prepare-release + +# 默认目标 +all: build-all + +# 帮助信息 +help: + @echo "可用的构建目标:" + @echo " make install-targets - 安装交叉编译工具链" + @echo " make build-amd64 - 构建 amd64 版本" + @echo " make build-arm64 - 构建 arm64 版本(适用于香橙派 Zero3)" + @echo " make build-all - 构建所有架构版本" + @echo " make release - 创建发布版本(优化编译)" + @echo " make prepare-release - 准备发布文件(包含安装脚本)" + @echo " make test - 运行测试" + @echo " make clean - 清理构建文件" + @echo " make install - 安装到系统(需要 root 权限)" + +# 安装交叉编译目标 +install-targets: + @echo "安装交叉编译工具链..." + rustup target add $(ARCH_AMD64) + rustup target add $(ARCH_ARM64) + @echo "" + @echo "请确保已安装 ARM64 交叉编译工具:" + @echo " Ubuntu/Debian: sudo apt-get install gcc-aarch64-linux-gnu" + @echo " Fedora/RHEL: sudo dnf install gcc-aarch64-linux-gnu" + @echo " Arch Linux: sudo pacman -S aarch64-linux-gnu-gcc" + @echo "" + @if ! command -v aarch64-linux-gnu-gcc >/dev/null 2>&1; then \ + echo "警告: 未检测到 aarch64-linux-gnu-gcc,ARM64 交叉编译可能失败"; \ + echo "请运行: sudo apt-get install gcc-aarch64-linux-gnu"; \ + else \ + echo "✓ 检测到 aarch64-linux-gnu-gcc"; \ + fi + @echo "工具链安装完成" + +# 构建 amd64 版本 +build-amd64: + @echo "构建 amd64 版本..." + cargo build --target $(ARCH_AMD64) + @mkdir -p $(RELEASE_DIR) + @cp $(BUILD_DIR)/$(ARCH_AMD64)/debug/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_AMD64) + @echo "amd64 版本构建完成: $(RELEASE_DIR)/$(BINARY_AMD64)" + +# 构建 arm64 版本(适用于香橙派 Zero3) +build-arm64: + @echo "构建 arm64 版本(适用于香橙派 Zero3)..." + cargo build --target $(ARCH_ARM64) + @mkdir -p $(RELEASE_DIR) + @cp $(BUILD_DIR)/$(ARCH_ARM64)/debug/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_ARM64) + @echo "arm64 版本构建完成: $(RELEASE_DIR)/$(BINARY_ARM64)" + +# 构建所有架构 +build-all: build-amd64 build-arm64 + @echo "所有架构构建完成" + +# 发布版本(优化编译) +release: + @echo "构建优化版本..." + @mkdir -p $(RELEASE_DIR) + cargo build --release --target $(ARCH_AMD64) + cargo build --release --target $(ARCH_ARM64) + @cp $(BUILD_DIR)/$(ARCH_AMD64)/release/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_AMD64) + @cp $(BUILD_DIR)/$(ARCH_ARM64)/release/$(PROJECT_NAME) $(RELEASE_DIR)/$(BINARY_ARM64) + @echo "发布版本构建完成:" + @ls -lh $(RELEASE_DIR)/ + +# 运行测试 +test: + cargo test + +# 清理构建文件 +clean: + cargo clean + rm -rf $(RELEASE_DIR) + @echo "清理完成" + +# 准备发布文件(包含二进制文件和安装脚本) +prepare-release: release + @echo "准备发布文件..." + @cp install.sh $(RELEASE_DIR)/ + @chmod +x $(RELEASE_DIR)/install.sh + @echo "发布文件已准备完成,位于 $(RELEASE_DIR)/ 目录" + @echo "请将以下文件上传到 Gitea Releases:" + @ls -lh $(RELEASE_DIR)/ + +# 安装到系统(默认安装当前架构) +install: + cargo install --path . + @echo "安装完成" diff --git a/README.md b/README.md new file mode 100644 index 0000000..430ab29 --- /dev/null +++ b/README.md @@ -0,0 +1,125 @@ +# PT System Checking - 磁盘状态监控服务 + +一个轻量级的系统磁盘监控服务,定期检查磁盘可用空间并上报到指定服务器。 + +## 功能特性 + +- 自动检测所有非可移动磁盘的可用空间 +- 定期上报磁盘状态到远程服务器 +- 支持通过环境变量或命令行参数配置 +- 支持 amd64 和 arm64 架构(适用于香橙派 Zero3) +- 一键部署脚本,自动配置 systemd 服务 + +## 快速开始 + +### 一键部署(推荐) + +在目标设备上运行以下命令: + +```bash +curl -fsSL https://gitea.service.jazzwhom.top/Passthem/pt-disk-report/raw/branch/main/install.sh | sudo bash +``` + +或者下载后运行: + +```bash +wget https://gitea.service.jazzwhom.top/Passthem/pt-disk-report/raw/branch/main/install.sh +sudo bash install.sh +``` + +安装脚本会: +1. 自动检测系统架构(amd64/arm64) +2. 从 Gitea Releases 下载对应的二进制文件 +3. 交互式配置服务参数(服务器 URL、检查间隔、日志级别) +4. 安装并启动 systemd 服务 + +### 卸载服务 + +```bash +sudo bash install.sh uninstall +``` + +## 本地构建 + +### 安装交叉编译工具链 + +```bash +make install-targets +``` + +### 构建所有架构 + +```bash +make release +``` + +### 准备发布文件 + +```bash +make prepare-release +``` + +这会在 `release/` 目录生成: +- `pt_system_checking-amd64` - x86_64 架构二进制文件 +- `pt_system_checking-arm64` - ARM64 架构二进制文件(适用于香橙派 Zero3) +- `install.sh` - 一键部署脚本 + +## 配置说明 + +服务支持以下配置项(通过环境变量): + +- `PT__SERVER_URL` - 服务器 URL(用于上报磁盘状态) +- `PT__INTERVAL` - 检查间隔(秒,默认 300) +- `PT__LOG_LEVEL` - 日志级别(trace/debug/info/warn/error,默认 info) + +## 服务管理 + +安装后可使用以下命令管理服务: + +```bash +# 查看服务状态 +systemctl status pt_system_checking + +# 查看实时日志 +journalctl -u pt_system_checking -f + +# 停止服务 +systemctl stop pt_system_checking + +# 启动服务 +systemctl start pt_system_checking + +# 重启服务 +systemctl restart pt_system_checking + +# 禁用开机自启 +systemctl disable pt_system_checking +``` + +## 手动安装 + +如果不使用一键脚本,可以手动安装: + +1. 下载对应架构的二进制文件 +2. 复制到 `/opt/pt_system_checking/` +3. 创建 systemd 服务文件 `/etc/systemd/system/pt_system_checking.service` +4. 配置环境变量 +5. 启动服务:`systemctl enable --now pt_system_checking` + +## 开发 + +### 运行测试 + +```bash +make test +``` + +### 清理构建文件 + +```bash +make clean +``` + +## 许可证 + +根据项目需要添加许可证信息。 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..28ece1a --- /dev/null +++ b/install.sh @@ -0,0 +1,265 @@ +#!/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() { + print_info "获取最新版本信息..." + local version=$(curl -s "${GITEA_REPO}/releases" | grep -oP 'releases/tag/v\K[0-9.]+' | head -1) + if [ -z "$version" ]; then + print_warn "无法自动获取版本,使用默认版本 0.1.0" + echo "0.1.0" + else + echo "$version" + fi +} + +# 下载二进制文件 +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 "" + + # 服务器 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}" + + # 获取版本 + 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 "$@"