deploy: 站点探测不再强制 IPv4/IPv6 并加超时
git.jocayn.qzz.io 在 Cloudflare 后面同时有 IPv4/IPv6 地址,部分网络(如 nas)IPv4 不通、 IPv6 可用;原来用 -4 强制 IPv4 且没有连接超时,会重试到卡死。改为由 curl 自动选择协议族, 探测 8 秒连接超时、15 秒总时长且不重试,下载加 15 秒连接超时。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+18
-14
@@ -101,19 +101,24 @@ if [ "$REINSTALL" -eq 0 ] && [ -x "$BIN_PATH" ] && { [ -e "$ENV_FILE" ] || [ -e
|
||||
die "检测到已安装的 bolt。升级请用 update.sh(保留配置);确实要按本次参数重写配置请加 --reinstall"
|
||||
fi
|
||||
|
||||
# fetch <url> <输出文件> [-4|-6]
|
||||
# fetch <url> <输出文件> [probe]:probe 用于探测站点,连接最多等 8 秒、总共 15 秒且不重试
|
||||
fetch() {
|
||||
if [ "${3:-}" = probe ]; then
|
||||
c_opt="--connect-timeout 8 -m 15"; w_opt="-T 15 -t 1"
|
||||
else
|
||||
c_opt="--connect-timeout 15 --retry 3"; w_opt="-T 60 -t 3"
|
||||
fi
|
||||
if command -v curl >/dev/null 2>&1; then
|
||||
if [ -n "${BOLT_DL_TOKEN:-}" ]; then
|
||||
curl -fsSL --retry 3 ${3:-} -H "Authorization: token $BOLT_DL_TOKEN" -o "$2" "$1"
|
||||
curl -fsSL $c_opt -H "Authorization: token $BOLT_DL_TOKEN" -o "$2" "$1"
|
||||
else
|
||||
curl -fsSL --retry 3 ${3:-} -o "$2" "$1"
|
||||
curl -fsSL $c_opt -o "$2" "$1"
|
||||
fi
|
||||
elif command -v wget >/dev/null 2>&1; then
|
||||
if [ -n "${BOLT_DL_TOKEN:-}" ]; then
|
||||
wget -q ${3:-} --header="Authorization: token $BOLT_DL_TOKEN" -O "$2" "$1"
|
||||
wget -q $w_opt --header="Authorization: token $BOLT_DL_TOKEN" -O "$2" "$1"
|
||||
else
|
||||
wget -q ${3:-} -O "$2" "$1"
|
||||
wget -q $w_opt -O "$2" "$1"
|
||||
fi
|
||||
else
|
||||
die "需要 curl 或 wget"
|
||||
@@ -141,30 +146,29 @@ elif [ -n "${BOLT_DL_URL:-}" ]; then
|
||||
else
|
||||
# 选择站点:BOLT_GIT_HOST 优先,否则先试 IPv4 站点再试 IPv6 站点
|
||||
HOST=""
|
||||
IPFLAG=""
|
||||
if [ -n "${BOLT_GIT_HOST:-}" ]; then
|
||||
HOST="${BOLT_GIT_HOST%/}"
|
||||
else
|
||||
for cand in "$HOST4 -4" "$HOST6 -6"; do
|
||||
if fetch "${cand% *}/api/v1/version" "$TMP/probe" "${cand#* }" 2>/dev/null; then
|
||||
HOST=${cand% *}
|
||||
IPFLAG=${cand#* }
|
||||
# 不强制协议族,由 curl 自动选择可用的 IPv4 / IPv6 地址
|
||||
for h in "$HOST4" "$HOST6"; do
|
||||
if fetch "$h/api/v1/version" "$TMP/probe" probe 2>/dev/null; then
|
||||
HOST=$h
|
||||
break
|
||||
fi
|
||||
done
|
||||
[ -n "$HOST" ] || die "无法连接 $HOST4(IPv4)或 $HOST6(IPv6),可用 BOLT_GIT_HOST 指定站点"
|
||||
[ -n "$HOST" ] || die "无法连接 $HOST4 或 $HOST6,可用 BOLT_GIT_HOST 指定站点"
|
||||
fi
|
||||
say "下载站点: $HOST"
|
||||
if [ -z "$VERSION" ]; then
|
||||
fetch "$HOST/api/v1/repos/$REPO/releases/latest" "$TMP/latest.json" "$IPFLAG" || die "查询最新版本失败"
|
||||
fetch "$HOST/api/v1/repos/$REPO/releases/latest" "$TMP/latest.json" || die "查询最新版本失败"
|
||||
VERSION=$(sed -n 's/.*"tag_name":"\([^"]*\)".*/\1/p' "$TMP/latest.json")
|
||||
[ -n "$VERSION" ] || die "无法解析最新版本号"
|
||||
fi
|
||||
BASE="$HOST/$REPO/releases/download/$VERSION"
|
||||
say "从 Release 下载: $BASE/bolt-$PLATFORM-$ARCH"
|
||||
fetch "$BASE/bolt-$PLATFORM-$ARCH" "$TMP/bolt" "$IPFLAG" || die "下载失败,请确认 Release $VERSION 有 bolt-$PLATFORM-$ARCH 附件"
|
||||
fetch "$BASE/bolt-$PLATFORM-$ARCH" "$TMP/bolt" || die "下载失败,请确认 Release $VERSION 有 bolt-$PLATFORM-$ARCH 附件"
|
||||
# 有 SHA256SUMS 附件时校验
|
||||
if fetch "$BASE/SHA256SUMS" "$TMP/SHA256SUMS" "$IPFLAG" 2>/dev/null; then
|
||||
if fetch "$BASE/SHA256SUMS" "$TMP/SHA256SUMS" 2>/dev/null; then
|
||||
want=$(awk -v f="bolt-$PLATFORM-$ARCH" '$2 == f || $2 == "*" f {print $1}' "$TMP/SHA256SUMS")
|
||||
if command -v sha256sum >/dev/null 2>&1; then
|
||||
got=$(sha256sum "$TMP/bolt" | awk '{print $1}')
|
||||
|
||||
Reference in New Issue
Block a user