alist,ddnsgo更新脚本分享

背景

搭了服务又没怎么用,每次想起来才登上去更新下,每次手动更新都嫌麻烦了但又懒得写自动更新脚本,现在deepseek这么火,直接生成脚本一次跑通。deepseek太牛啦!

ddnsgo更新脚本

#!/bin/bash
set -euo pipefail

# 基础配置参数
INSTALL_DIR="/opt/ddns-go"
BIN_NAME="ddns-go"
SERVICE_NAME="ddns-go.service"
TMP_DIR=$(mktemp -d)
USER_NAME="ddnsgo"
GROUP_NAME="ddnsgo"

# 获取当前已安装版本
current_version=$("$INSTALL_DIR/$BIN_NAME" -v | awk '{print substr($0,2)}') || current_version="0.0.0"

# 获取GitHub最新release版本
latest_version=$(curl -sI https://github.com/jeessy2/ddns-go/releases/latest | grep -i location | awk -F '/' '{print $NF}' | tr -d 'v\r')

# 版本比较函数
version_compare() {
    printf "%s\n%s" "$1" "$2" | sort -V -r | head -n1
}

# 判断是否需要更新
if [[ $(version_compare "$current_version" "$latest_version") == "$current_version" ]]; then
    echo "当前版本 $current_version 已是最新,无需更新"
    exit 0
fi

# 确定系统架构映射关系(根据release文件命名规则)
case $(uname -m) in
    aarch64)    arch="arm64" ;;
    x86_64)     arch="x86_64" ;;
    *)          echo "不支持的架构: $(uname -m)" && exit 1 ;;
esac

# 构建下载URL
download_url="https://github.com/jeessy2/ddns-go/releases/download/v${latest_version}/ddns-go_${latest_version}_linux_${arch}.tar.gz"

# 下载并解压安装包
echo "正在下载版本 v$latest_version..."
curl -sL "$download_url" -o "$TMP_DIR/ddns-go.tar.gz" || { echo "下载失败"; exit 1; }
tar xzf "$TMP_DIR/ddns-go.tar.gz" -C "$TMP_DIR" || { echo "解压失败"; exit 1; }

# 安装新版本(使用install命令保持权限设置)
sudo install -m755 -g "$GROUP_NAME" -o "$USER_NAME" "$TMP_DIR/$BIN_NAME" "$INSTALL_DIR/$BIN_NAME"

# 停止旧服务
sudo systemctl stop "$SERVICE_NAME" 2>/dev/null || true

# 应用配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart "$SERVICE_NAME"

# 清理临时文件
rm -rf "$TMP_DIR"

echo "DDNS-GO 已成功更新至 v$latest_version"

alist更新脚本

#!/bin/bash
set -euo pipefail

# 基础配置参数
INSTALL_DIR="/opt/alist"
BIN_NAME="alist"
SERVICE_NAME="alist.service"
TMP_DIR=$(mktemp -d)
USER_NAME="alist"
GROUP_NAME="alist"

# 获取当前已安装版本
current_version=$("$INSTALL_DIR/$BIN_NAME" version | grep -E '^Version:' | awk '{print $2}' | sed 's/v//') || current_version="0.0.0"

# 获取GitHub最新release版本
latest_version=$(curl -sI https://github.com/AlistGo/alist/releases/latest | grep -i location | awk -F '/' '{print $NF}' | tr -d 'v\r')

# 版本比较函数
version_compare() {
    printf "%s\n%s" "$1" "$2" | sort -V -r | head -n1
}

# 判断是否需要更新
if [[ $(version_compare "$current_version" "$latest_version") == "$current_version" ]]; then
    echo "当前版本 $current_version 已是最新,无需更新"
    exit 0
fi

# 确定系统架构映射关系(根据release文件命名规则)
case $(uname -m) in
    aarch64)    arch="arm64" ;;
    arm64)    arch="arm64" ;;
    x86_64)     arch="amd64" ;;
    *)          echo "不支持的架构: $(uname -m)" && exit 1 ;;
esac

# 构建下载URL
download_url="https://github.com/AlistGo/alist/releases/download/v${latest_version}/alist-linux-${arch}.tar.gz"

# 下载并解压安装包
echo "正在下载版本 v$latest_version..."
curl -sL "$download_url" -o "$TMP_DIR/alist.tar.gz" || { echo "下载失败"; exit 1; }
tar xzf "$TMP_DIR/alist.tar.gz" -C "$TMP_DIR" || { echo "解压失败"; exit 1; }

# 安装新版本(使用install命令保持权限设置)
sudo install -m755 -g "$GROUP_NAME" -o "$USER_NAME" "$TMP_DIR/$BIN_NAME" "$INSTALL_DIR/$BIN_NAME"

# 停止旧服务
sudo systemctl stop "$SERVICE_NAME" 2>/dev/null || true

# 应用配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart "$SERVICE_NAME"

# 清理临时文件
rm -rf "$TMP_DIR"

echo "alist 已成功更新至 v$latest_version"

总结

deepseek太牛啦,需求及其上下文提供充分,一次就跑通了,写出来的比我自己写的好多了。

posted @ 2025-02-12 10:55  Holdmyhand  阅读(145)  评论(1)    收藏  举报