添加安装脚本相关
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
|||||||
/target
|
/target
|
||||||
|
/release
|
||||||
|
/.cargo
|
||||||
|
|||||||
110
Makefile
Normal file
110
Makefile
Normal file
@ -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 "安装完成"
|
||||||
125
README.md
Normal file
125
README.md
Normal file
@ -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
|
||||||
|
```
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
根据项目需要添加许可证信息。
|
||||||
265
install.sh
Executable file
265
install.sh
Executable file
@ -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}" <<EOF
|
||||||
|
[Unit]
|
||||||
|
Description=PT System Disk Checking Service
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
Group=root
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
# 工作目录
|
||||||
|
WorkingDirectory=${INSTALL_DIR}
|
||||||
|
|
||||||
|
# 二进制文件路径
|
||||||
|
ExecStart=${INSTALL_DIR}/${SERVICE_NAME}
|
||||||
|
|
||||||
|
# 环境变量配置
|
||||||
|
Environment="PT__SERVER_URL=${SERVER_URL}"
|
||||||
|
Environment="PT__INTERVAL=${INTERVAL}"
|
||||||
|
Environment="PT__LOG_LEVEL=${LOG_LEVEL}"
|
||||||
|
|
||||||
|
# 安全设置
|
||||||
|
NoNewPrivileges=true
|
||||||
|
PrivateTmp=true
|
||||||
|
|
||||||
|
# 日志配置
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
SyslogIdentifier=${SERVICE_NAME}
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 重载 systemd
|
||||||
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
print_info "服务安装完成"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 启动服务
|
||||||
|
start_service() {
|
||||||
|
print_info "启动服务..."
|
||||||
|
|
||||||
|
systemctl enable "${SERVICE_NAME}"
|
||||||
|
systemctl start "${SERVICE_NAME}"
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
if systemctl is-active --quiet "${SERVICE_NAME}"; then
|
||||||
|
print_info "服务启动成功!"
|
||||||
|
echo ""
|
||||||
|
print_info "常用命令:"
|
||||||
|
echo " 查看状态: systemctl status ${SERVICE_NAME}"
|
||||||
|
echo " 查看日志: journalctl -u ${SERVICE_NAME} -f"
|
||||||
|
echo " 停止服务: systemctl stop ${SERVICE_NAME}"
|
||||||
|
echo " 重启服务: systemctl restart ${SERVICE_NAME}"
|
||||||
|
else
|
||||||
|
print_error "服务启动失败,请查看日志:"
|
||||||
|
echo " journalctl -u ${SERVICE_NAME} -n 50"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 卸载服务
|
||||||
|
uninstall_service() {
|
||||||
|
print_info "卸载服务..."
|
||||||
|
|
||||||
|
if systemctl is-active --quiet "${SERVICE_NAME}"; then
|
||||||
|
systemctl stop "${SERVICE_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemctl disable "${SERVICE_NAME}" 2>/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 "$@"
|
||||||
Reference in New Issue
Block a user