fix(tools): 安装脚本国内镜像优化 + 版本升级

- Node.js: pipe-to-tar 改为下载到文件再解压(修复 302 重定向导致 curl 23)
  新增阿里云/清华镜像,降级使用 python3 tarfile 解压
- Maven: 3.9.9→3.9.16(旧版镜像全部 404)
  新增阿里云/清华/中科大/南大镜像,下载后校验 gzip magic
- JDK: 17.0.13+7→17.0.19+10(Adoptium 已清理旧版)
  新增阿里云/华为/中科大/清华镜像
- 全部添加 --connect-timeout 和 gzip 校验
This commit is contained in:
attacker committed 2026-07-02 00:21:13 +00:00
1 parent 5770f2ccd4
commit f170fed900
3 files changed
+76 -31

No files matched your search

+72 -31
View File
@@ -77,10 +77,10 @@ func PredefinedTools() []DeployTool {
CheckCommand: "/usr/local/bin/java -version 2>&1 | head -1",
VersionURL: "https://api.adoptium.net/v3/info/release_versions?heap_size=normal&image_type=jdk&page=0&page_size=1&project=jdk&release_type=ga&semver=false&sort_method=DEFAULT&sort_order=DESC&version=%5B17%2C99%5D",
DownloadURL: "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-{version}/OpenJDK17U-jdk_x64_linux_hotspot_{version}.tar.gz",
DefaultVersion: "17.0.13+7",
DefaultVersion: "17.0.19+10",
InstallScript: `#!/bin/sh
# JDK lazy install — Alpine apk 优先,否则 Adoptium API 多镜像 // Logan.Li
JDK_VERSION="${TOOL_VERSION:-17.0.13+7}"
# JDK lazy install — Alpine apk 优先,否则国内镜像轮询 Adoptium // Logan.Li
JDK_VERSION="${TOOL_VERSION:-17.0.19+10}"
JDK_MAJOR=$(echo "$JDK_VERSION" | cut -d. -f1)
JDK_FILE_VER=$(echo "$JDK_VERSION" | tr '+' '_')
echo "[JDK] Installing ${JDK_VERSION} (major ${JDK_MAJOR})..."
@@ -109,20 +109,26 @@ fi
cd /tmp && rm -rf jdk.tar.gz jdk-install
mkdir -p jdk-install && cd jdk-install
DOWNLOADED=0
# 国内镜像优先: 阿里云 > 清华 > 华为 > 中科大 > GitHub // Logan.Li
for URL in \
"https://mirrors.aliyun.com/Adoptium/${JDK_MAJOR}/jdk/${JDK_VERSION}/OpenJDK${JDK_MAJOR}U-jdk_x64_linux_hotspot_${JDK_FILE_VER}.tar.gz" \
"https://mirrors.tuna.tsinghua.edu.cn/Adoptium/${JDK_MAJOR}/jdk/x64/linux/OpenJDK${JDK_MAJOR}U-jdk_x64_linux_hotspot_${JDK_FILE_VER}.tar.gz" \
"https://mirrors.huaweicloud.com/Adoptium/${JDK_MAJOR}/jdk/${JDK_VERSION}/OpenJDK${JDK_MAJOR}U-jdk_x64_linux_hotspot_${JDK_FILE_VER}.tar.gz" \
"https://mirrors.ustc.edu.cn/Adoptium/${JDK_MAJOR}/jdk/${JDK_VERSION}/OpenJDK${JDK_MAJOR}U-jdk_x64_linux_hotspot_${JDK_FILE_VER}.tar.gz" \
"https://api.adoptium.net/v3/binary/version/${JDK_VERSION}/linux/x64/jdk/hotspot/normal/eclipse?project=jdk" \
"https://mirrors.tuna.tsinghua.edu.cn/Adoptium/${JDK_MAJOR}/jdk/${JDK_VERSION}/OpenJDK${JDK_MAJOR}U-jdk_x64_linux_hotspot_${JDK_FILE_VER}.tar.gz" \
"https://github.com/adoptium/temurin${JDK_MAJOR}-binaries/releases/download/jdk-${JDK_VERSION}/OpenJDK${JDK_MAJOR}U-jdk_x64_linux_hotspot_${JDK_FILE_VER}.tar.gz"
do
echo "[JDK] Trying $URL"
if curl -fsSL -L -o jdk.tar.gz "$URL"; then
DOWNLOADED=1
break
if curl -fsSL -L --connect-timeout 15 --max-time 300 -o jdk.tar.gz "$URL"; then
if [ -s jdk.tar.gz ] && file jdk.tar.gz | grep -q gzip; then
DOWNLOADED=1
break
fi
fi
rm -f jdk.tar.gz
done
[ "$DOWNLOADED" -eq 1 ] || { echo "[JDK] all mirrors failed"; exit 1; }
tar xzf jdk.tar.gz
tar xzf jdk.tar.gz || { echo "[JDK] extract failed"; exit 1; }
JDK_DIR=$(find . -maxdepth 1 -type d -name 'jdk-*' | head -1)
[ -n "$JDK_DIR" ] || { echo "[JDK] extract dir not found"; exit 1; }
mkdir -p /usr/local/share
@@ -148,29 +154,35 @@ echo "[JDK] Installed: $(/usr/local/bin/java -version 2>&1 | head -1)"
CheckCommand: "/usr/local/bin/mvn --version 2>/dev/null | head -1",
DownloadURL: "https://dlcdn.apache.org/maven/maven-3/{version}/binaries/apache-maven-{version}-bin.tar.gz",
VersionURL: "https://dlcdn.apache.org/maven/maven-3/",
DefaultVersion: "3.9.9",
DefaultVersion: "3.9.16",
InstallScript: `#!/bin/sh
# Maven lazy install — 多镜像轮询 // Logan.Li
MAVEN_VERSION="${TOOL_VERSION:-3.9.9}"
# Maven lazy install — 国内镜像优先(阿里云 > 华为 > 清华 > 中科大 > 官方)// Logan.Li
MAVEN_VERSION="${TOOL_VERSION:-3.9.16}"
MAJOR="${MAVEN_VERSION%%.*}"
echo "[Maven] Downloading ${MAVEN_VERSION}..."
cd /tmp && rm -rf maven.tar.gz maven-install
mkdir -p maven-install && cd maven-install
DOWNLOADED=0
for URL in \
"https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://repo.huaweicloud.com/apache/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz"
"https://mirrors.aliyun.com/apache/maven/maven-${MAJOR}/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://repo.huaweicloud.com/apache/maven/maven-${MAJOR}/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-${MAJOR}/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://mirrors.ustc.edu.cn/apache/maven/maven-${MAJOR}/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://mirrors.nju.edu.cn/apache/maven/maven-${MAJOR}/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://dlcdn.apache.org/maven/maven-${MAJOR}/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" \
"https://archive.apache.org/dist/maven/maven-${MAJOR}/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz"
do
echo "[Maven] Trying $URL"
if curl -fsSL -o maven.tar.gz "$URL"; then
DOWNLOADED=1
break
if curl -fsSL --connect-timeout 15 --max-time 120 -o maven.tar.gz "$URL"; then
if [ -s maven.tar.gz ] && file maven.tar.gz | grep -q gzip; then
DOWNLOADED=1
break
fi
fi
rm -f maven.tar.gz
done
[ "$DOWNLOADED" -eq 1 ] || { echo "[Maven] all mirrors failed"; exit 1; }
tar xzf maven.tar.gz
tar xzf maven.tar.gz || { echo "[Maven] extract failed"; exit 1; }
MVN_DIR=$(find . -maxdepth 1 -type d -name 'apache-maven-*' | head -1)
[ -n "$MVN_DIR" ] || { echo "[Maven] extract dir not found"; exit 1; }
mkdir -p /usr/local/share
@@ -311,28 +323,57 @@ direct_install_binary() {
RESOLVED="$1"
DEST="$NVM_DIR/versions/node/${RESOLVED}"
TMP="/tmp/node-dl-$$"
rm -rf "$TMP" "$DEST"
ARCHIVE="/tmp/node-archive-$$.tar.xz"
rm -rf "$TMP" "$DEST" "$ARCHIVE"
mkdir -p "$TMP"
# 国内优先: 阿里云 OSS > npmmirror > 清华 > 官方 // Logan.Li
if [ -f /etc/alpine-release ]; then
# Node 官方仅 glibc;Alpine musl 走 unofficial-builds // Logan.Li
URLS="https://unofficial-builds.nodejs.org/download/release/${RESOLVED}/node-${RESOLVED}-linux-x64-musl.tar.xz"
URLS="
https://unofficial-builds.nodejs.org/download/release/${RESOLVED}/node-${RESOLVED}-linux-x64-musl.tar.xz
"
else
URLS="${NODE_MIRROR}/${RESOLVED}/node-${RESOLVED}-linux-x64.tar.xz https://nodejs.org/dist/${RESOLVED}/node-${RESOLVED}-linux-x64.tar.xz"
URLS="
https://mirrors.aliyun.com/nodejs-release/${RESOLVED}/node-${RESOLVED}-linux-x64.tar.xz
https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/${RESOLVED}/node-${RESOLVED}-linux-x64.tar.xz
${NODE_MIRROR}/${RESOLVED}/node-${RESOLVED}-linux-x64.tar.xz
https://nodejs.org/dist/${RESOLVED}/node-${RESOLVED}-linux-x64.tar.xz
"
fi
DOWNLOADED=0
for URL in $URLS; do
[ -n "$URL" ] || continue
echo "[Node.js] Downloading $URL"
rm -rf "$TMP"/* 2>/dev/null || true
if curl -fsSL -L "$URL" | tar -xJ -C "$TMP" 2>/dev/null; then
SUB=$(find "$TMP" -mindepth 1 -maxdepth 1 -type d | head -1)
if [ -n "$SUB" ] && [ -x "$SUB/bin/node" ]; then
mv "$SUB" "$DEST"
rm -rf "$TMP"
echo "[Node.js] Installed $RESOLVED"
return 0
rm -f "$ARCHIVE"
if curl -fsSL -L --connect-timeout 30 --max-time 300 -o "$ARCHIVE" "$URL"; then
if [ -s "$ARCHIVE" ]; then
DOWNLOADED=1
break
fi
fi
echo "[Node.js] Failed: $URL"
rm -f "$ARCHIVE"
done
[ "$DOWNLOADED" -eq 1 ] || { echo "[Node.js] all mirrors failed"; rm -rf "$TMP"; return 1; }
# xz is not always available; fallback to python3 tarfile // Logan.Li
if command -v xz >/dev/null 2>&1; then
xz -dc "$ARCHIVE" | tar -xC "$TMP" 2>/dev/null || true
fi
if [ ! -x "$TMP"/*/bin/node ] 2>/dev/null; then
python3 -c "
import tarfile, os
with tarfile.open('$ARCHIVE') as tf:
tf.extractall(path='$TMP', filter='fully_trusted')
" 2>/dev/null || true
fi
rm -f "$ARCHIVE"
SUB=$(find "$TMP" -mindepth 1 -maxdepth 1 -type d | head -1)
if [ -n "$SUB" ] && [ -x "$SUB/bin/node" ]; then
mv "$SUB" "$DEST"
rm -rf "$TMP"
echo "[Node.js] Installed $RESOLVED"
return 0
fi
echo "[Node.js] extract failed"
rm -rf "$TMP"
return 1
}
View File
Whitespace-only changes.