mirror of
https://github.com/sky22333/hubproxy.git
synced 2026-06-12 20:24:05 +08:00
122 lines
2.8 KiB
Bash
122 lines
2.8 KiB
Bash
#!/bin/sh
|
||
set -eu
|
||
|
||
REPO="${REPO:-sky22333/hubproxy}"
|
||
VERSION="${VERSION:-latest}"
|
||
TMP_DIR="${TMP_DIR:-/tmp/hubproxy-install}"
|
||
|
||
log() {
|
||
printf '%s\n' "$*"
|
||
}
|
||
|
||
fail() {
|
||
printf 'HubProxy 安装失败:%s\n' "$*" >&2
|
||
exit 1
|
||
}
|
||
|
||
need_cmd() {
|
||
command -v "$1" >/dev/null 2>&1 || fail "缺少必要命令:$1"
|
||
}
|
||
|
||
detect_arch() {
|
||
case "$(uname -m)" in
|
||
x86_64|amd64)
|
||
echo "amd64"
|
||
;;
|
||
aarch64|arm64)
|
||
echo "arm64"
|
||
;;
|
||
*)
|
||
fail "不支持的系统架构:$(uname -m)"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
detect_packager() {
|
||
if command -v apk >/dev/null 2>&1; then
|
||
echo "apk"
|
||
elif command -v apt-get >/dev/null 2>&1; then
|
||
echo "deb"
|
||
elif command -v dnf >/dev/null 2>&1 || command -v yum >/dev/null 2>&1 || command -v rpm >/dev/null 2>&1; then
|
||
echo "rpm"
|
||
else
|
||
fail "不支持的系统:需要 apt、dnf、yum、rpm 或 apk"
|
||
fi
|
||
}
|
||
|
||
asset_name() {
|
||
packager="$1"
|
||
arch="$2"
|
||
|
||
case "$packager:$arch" in
|
||
deb:amd64|rpm:amd64|apk:amd64) echo "hubproxy-linux-amd64.${packager}" ;;
|
||
deb:arm64|rpm:arm64|apk:arm64) echo "hubproxy-linux-arm64.${packager}" ;;
|
||
*) fail "不支持的安装包目标:${packager}/${arch}" ;;
|
||
esac
|
||
}
|
||
|
||
asset_url() {
|
||
asset="$1"
|
||
|
||
if [ "$VERSION" = "latest" ]; then
|
||
echo "https://github.com/${REPO}/releases/latest/download/${asset}"
|
||
else
|
||
echo "https://github.com/${REPO}/releases/download/${VERSION}/${asset}"
|
||
fi
|
||
}
|
||
|
||
install_package() {
|
||
package_file="$1"
|
||
packager="$2"
|
||
|
||
case "$packager" in
|
||
deb)
|
||
apt-get install -y "$package_file"
|
||
;;
|
||
rpm)
|
||
if command -v dnf >/dev/null 2>&1; then
|
||
dnf install -y "$package_file"
|
||
elif command -v yum >/dev/null 2>&1; then
|
||
yum install -y "$package_file"
|
||
else
|
||
rpm -Uvh "$package_file"
|
||
fi
|
||
;;
|
||
apk)
|
||
apk add --allow-untrusted "$package_file"
|
||
;;
|
||
*)
|
||
fail "不支持的包管理器:$packager"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
fail "请使用 root 权限运行"
|
||
fi
|
||
|
||
need_cmd curl
|
||
|
||
ARCH="$(detect_arch)"
|
||
PACKAGER="$(detect_packager)"
|
||
|
||
rm -rf "$TMP_DIR"
|
||
mkdir -p "$TMP_DIR"
|
||
trap 'rm -rf "$TMP_DIR"' EXIT INT TERM
|
||
|
||
log "安装 HubProxy:linux/${ARCH}(${PACKAGER})"
|
||
|
||
ASSET="$(asset_name "$PACKAGER" "$ARCH")"
|
||
ASSET_URL="$(asset_url "$ASSET")"
|
||
|
||
PACKAGE_FILE="${TMP_DIR}/$(basename "$ASSET_URL")"
|
||
log "下载安装包..."
|
||
curl -fL -o "$PACKAGE_FILE" "$ASSET_URL" || fail "下载安装包失败"
|
||
|
||
log "安装软件包..."
|
||
install_package "$PACKAGE_FILE" "$PACKAGER"
|
||
|
||
log "安装完成"
|
||
log "默认端口:5000"
|
||
log "配置文件:/etc/hubproxy/config.toml"
|