更新各种脚本
This commit is contained in:
248
update.sh
Executable file
248
update.sh
Executable file
@ -0,0 +1,248 @@
|
||||
#!/bin/bash
|
||||
# PT System Checking 一键更新脚本
|
||||
# 从 Gitea 下载最新版本并更新服务
|
||||
|
||||
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 update.sh"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查服务是否已安装
|
||||
check_installed() {
|
||||
if [ ! -f "${INSTALL_DIR}/${SERVICE_NAME}" ]; then
|
||||
print_error "服务未安装,请先运行 install.sh 进行安装"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "${SYSTEMD_SERVICE}" ]; then
|
||||
print_error "systemd 服务文件不存在,请先运行 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_current_version() {
|
||||
if [ -f "${INSTALL_DIR}/${SERVICE_NAME}" ]; then
|
||||
local version=$("${INSTALL_DIR}/${SERVICE_NAME}" --version 2>/dev/null | grep -oP 'v\K[0-9.]+' || echo "未知")
|
||||
echo "$version"
|
||||
else
|
||||
echo "未安装"
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取最新版本
|
||||
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 "下载完成"
|
||||
}
|
||||
|
||||
# 备份当前版本
|
||||
backup_current() {
|
||||
local backup_file="${INSTALL_DIR}/${SERVICE_NAME}.backup"
|
||||
|
||||
if [ -f "${INSTALL_DIR}/${SERVICE_NAME}" ]; then
|
||||
print_info "备份当前版本..."
|
||||
cp "${INSTALL_DIR}/${SERVICE_NAME}" "${backup_file}"
|
||||
print_info "备份保存至: ${backup_file}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 恢复备份
|
||||
restore_backup() {
|
||||
local backup_file="${INSTALL_DIR}/${SERVICE_NAME}.backup"
|
||||
|
||||
if [ -f "${backup_file}" ]; then
|
||||
print_warn "恢复备份版本..."
|
||||
cp "${backup_file}" "${INSTALL_DIR}/${SERVICE_NAME}"
|
||||
chmod +x "${INSTALL_DIR}/${SERVICE_NAME}"
|
||||
print_info "已恢复到备份版本"
|
||||
fi
|
||||
}
|
||||
|
||||
# 更新服务
|
||||
update_service() {
|
||||
local arch=$1
|
||||
local binary_name="${SERVICE_NAME}-${arch}"
|
||||
|
||||
print_info "更新服务..."
|
||||
|
||||
# 停止服务
|
||||
if systemctl is-active --quiet "${SERVICE_NAME}"; then
|
||||
print_info "停止服务..."
|
||||
systemctl stop "${SERVICE_NAME}"
|
||||
fi
|
||||
|
||||
# 替换二进制文件
|
||||
cp "/tmp/${binary_name}" "${INSTALL_DIR}/${SERVICE_NAME}"
|
||||
chmod +x "${INSTALL_DIR}/${SERVICE_NAME}"
|
||||
|
||||
print_info "服务更新完成"
|
||||
}
|
||||
|
||||
# 启动服务
|
||||
start_service() {
|
||||
print_info "启动服务..."
|
||||
|
||||
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 "服务启动失败,正在恢复备份..."
|
||||
restore_backup
|
||||
systemctl start "${SERVICE_NAME}"
|
||||
|
||||
if systemctl is-active --quiet "${SERVICE_NAME}"; then
|
||||
print_info "已恢复到备份版本"
|
||||
else
|
||||
print_error "恢复失败,请查看日志:"
|
||||
echo " journalctl -u ${SERVICE_NAME} -n 50"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo ""
|
||||
print_info "=== PT System Checking 一键更新脚本 ==="
|
||||
echo ""
|
||||
|
||||
check_root
|
||||
check_installed
|
||||
|
||||
# 检测架构
|
||||
ARCH=$(detect_arch)
|
||||
print_info "检测到系统架构: ${ARCH}"
|
||||
|
||||
# 获取版本信息
|
||||
CURRENT_VERSION=$(get_current_version)
|
||||
print_info "当前版本: ${CURRENT_VERSION}"
|
||||
|
||||
print_info "获取最新版本信息..."
|
||||
LATEST_VERSION=$(get_latest_version)
|
||||
print_info "最新版本: v${LATEST_VERSION}"
|
||||
|
||||
# 版本比较
|
||||
if [ "$CURRENT_VERSION" == "$LATEST_VERSION" ]; then
|
||||
print_info "已是最新版本,无需更新"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_warn "即将从 v${CURRENT_VERSION} 更新到 v${LATEST_VERSION}"
|
||||
|
||||
# 检查是否为非交互模式
|
||||
if [ -t 0 ]; then
|
||||
read -p "是否继续?(y/n): " confirm
|
||||
if [[ ! $confirm =~ ^[Yy]$ ]]; then
|
||||
print_warn "取消更新"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
print_info "检测到非交互模式,自动继续更新"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 备份当前版本
|
||||
backup_current
|
||||
|
||||
# 下载新版本
|
||||
download_binary "${ARCH}" "${LATEST_VERSION}"
|
||||
|
||||
# 更新服务
|
||||
update_service "${ARCH}"
|
||||
|
||||
# 启动服务
|
||||
start_service
|
||||
|
||||
# 清理临时文件
|
||||
rm -f "/tmp/${SERVICE_NAME}-${ARCH}"
|
||||
|
||||
echo ""
|
||||
print_info "更新完成!版本: v${LATEST_VERSION}"
|
||||
}
|
||||
|
||||
# 运行主函数
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user