Files

116 lines
2.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 下载或更新仓库内的 obsutil 二进制。
# - 默认安装到仓库根目录下的 ./obsutil
# - 若系统已有 obsutil,不会覆盖;只管理仓库内副本
# - install.sh 和手动维护都可复用这个脚本
set -Eeuo pipefail
SCRIPT_PATH="${BASH_SOURCE[0]:-$0}"
LIB_DIR="$(cd "$(dirname -- "$SCRIPT_PATH")" && pwd -P)"
ROOT_DIR="$(cd "${LIB_DIR}/.." && pwd -P)"
TARGET_BIN="${ROOT_DIR}/obsutil"
DRY_RUN=false
usage() {
cat <<'USAGE'
用法:
./lib/obsutil.sh [--dry-run]
说明:
- 下载并安装或更新仓库内的 ./obsutil
- 默认覆盖仓库里的旧版本
- dry-run 只打印将执行的动作,不实际下载
USAGE
}
while [[ $# -gt 0 ]]; do
case "$1" in
--dry-run) DRY_RUN=true; shift ;;
-h|--help) usage; exit 0 ;;
*) echo "未知参数:$1" >&2; usage; exit 2 ;;
esac
done
need_cmd() {
command -v "$1" >/dev/null 2>&1 || {
echo "缺少命令:$1" >&2
exit 2
}
}
download_file() {
local url="$1"
local output="$2"
if command -v curl >/dev/null 2>&1; then
curl -fsSL "$url" -o "$output"
return 0
fi
if command -v wget >/dev/null 2>&1; then
wget -qO "$output" "$url"
return 0
fi
echo "缺少下载工具:curl 或 wget" >&2
exit 2
}
resolve_package_name() {
case "$(uname -m)" in
x86_64|amd64) printf '%s\n' "obsutil_linux_amd64.tar.gz" ;;
aarch64|arm64) printf '%s\n' "obsutil_linux_arm64.tar.gz" ;;
*)
echo "不支持的 CPU 架构:$(uname -m)" >&2
echo "请手动安装 obsutil 后再试" >&2
exit 2
;;
esac
}
need_cmd install
need_cmd tar
PACKAGE_NAME="$(resolve_package_name)"
DOWNLOAD_URL="https://obs-community-intl.obs.ap-southeast-1.myhuaweicloud.com/obsutil/current/${PACKAGE_NAME}"
if $DRY_RUN; then
if [[ -x "$TARGET_BIN" ]]; then
echo "[dry-run] 将更新仓库内 obsutil${TARGET_BIN}"
else
echo "[dry-run] 将安装仓库内 obsutil${TARGET_BIN}"
fi
echo "[dry-run] 下载地址:${DOWNLOAD_URL}"
exit 0
fi
TMP_DIR="$(mktemp -d)"
ARCHIVE_PATH="${TMP_DIR}/${PACKAGE_NAME}"
trap 'rm -rf "$TMP_DIR"' EXIT
if [[ -x "$TARGET_BIN" ]]; then
echo "开始更新仓库内 obsutil${TARGET_BIN}"
else
echo "开始安装仓库内 obsutil${TARGET_BIN}"
fi
download_file "$DOWNLOAD_URL" "$ARCHIVE_PATH"
tar -xzf "$ARCHIVE_PATH" -C "$TMP_DIR"
BINARY_PATH="$(find "$TMP_DIR" -type f -name obsutil | head -n 1)"
if [[ -z "$BINARY_PATH" ]]; then
echo "下载包中未找到 obsutil 可执行文件" >&2
exit 2
fi
install -m 755 "$BINARY_PATH" "$TARGET_BIN"
VERSION_OUTPUT="$("$TARGET_BIN" version 2>/dev/null || true)"
if [[ -z "$VERSION_OUTPUT" ]]; then
echo "obsutil 已安装,但运行校验失败:${TARGET_BIN}" >&2
exit 2
fi
echo "obsutil 已就绪:${TARGET_BIN}"
echo "$VERSION_OUTPUT" | head -n 1