diff --git a/scripts/docker/container-entry.sh b/scripts/docker/container-entry.sh index c494373..f167027 100644 --- a/scripts/docker/container-entry.sh +++ b/scripts/docker/container-entry.sh @@ -3,6 +3,11 @@ set -euo pipefail cd /work BUILD_ARCH="${BUILD_ARCH:-all}" +ALLOW_RUNTIME_APT_FIX="${ALLOW_RUNTIME_APT_FIX:-0}" +CARGO_REGISTRY_MIRROR="${CARGO_REGISTRY_MIRROR:-https://rsproxy.cn/index/}" +CARGO_NET_RETRY="${CARGO_NET_RETRY:-8}" +CARGO_HTTP_TIMEOUT="${CARGO_HTTP_TIMEOUT:-120}" +CARGO_HTTP_MULTIPLEXING="${CARGO_HTTP_MULTIPLEXING:-false}" # npm 网络增强:默认使用官方 registry,可通过 NPM_REGISTRY 覆盖;增加超时与重试,减少 ECONNRESET 失败概率。 npm config set registry "${NPM_REGISTRY:-https://registry.npmjs.org/}" @@ -12,6 +17,25 @@ npm config set fetch-retry-mintimeout 20000 npm config set fetch-retry-maxtimeout 120000 npm config set fetch-timeout 300000 +mkdir -p "${CARGO_HOME:-/opt/cargo}" +cat > "${CARGO_HOME:-/opt/cargo}/config.toml" < 补齐 amd64 依赖(当前容器缺少 x86_64 pkg-config 文件)" + if [[ "$ALLOW_RUNTIME_APT_FIX" != "1" ]]; then + echo "错误: 缺少 amd64 依赖(x86_64 pkg-config 文件不完整),且 ALLOW_RUNTIME_APT_FIX=0。" >&2 + echo "请先重建镜像(scripts/docker/Dockerfile),或设置 ALLOW_RUNTIME_APT_FIX=1 允许运行时联网补依赖。" >&2 + exit 1 + fi + + echo "==> 运行时补齐 amd64 依赖(ALLOW_RUNTIME_APT_FIX=1)" apt-get update apt-get install -y --no-install-recommends \ build-essential:amd64 pkg-config:amd64 patchelf:amd64 \ @@ -49,7 +79,13 @@ ensure_arm64_deps() { return fi - echo "==> 补齐 arm64 交叉依赖(当前容器缺少 aarch64 pkg-config 文件)" + if [[ "$ALLOW_RUNTIME_APT_FIX" != "1" ]]; then + echo "错误: 缺少 arm64 交叉依赖(aarch64 pkg-config 文件不完整),且 ALLOW_RUNTIME_APT_FIX=0。" >&2 + echo "请先重建镜像(scripts/docker/Dockerfile),或设置 ALLOW_RUNTIME_APT_FIX=1 允许运行时联网补依赖。" >&2 + exit 1 + fi + + echo "==> 运行时补齐 arm64 交叉依赖(ALLOW_RUNTIME_APT_FIX=1)" apt-get update apt-get install -y --no-install-recommends \ -o Dpkg::Options::="--force-overwrite" \ diff --git a/scripts/docker/run-build.sh b/scripts/docker/run-build.sh index 1343074..6b64376 100644 --- a/scripts/docker/run-build.sh +++ b/scripts/docker/run-build.sh @@ -13,6 +13,10 @@ APT_GPG_KEY_ID="${APT_GPG_KEY_ID:-com.jgzy.product}" APT_GPG_AUTO_CREATE="${APT_GPG_AUTO_CREATE:-1}" UBUNTU_MIRROR="${UBUNTU_MIRROR:-http://mirrors.aliyun.com/ubuntu}" UBUNTU_PORTS_MIRROR="${UBUNTU_PORTS_MIRROR:-http://mirrors.aliyun.com/ubuntu-ports}" +CARGO_REGISTRY_MIRROR="${CARGO_REGISTRY_MIRROR:-https://rsproxy.cn/index/}" +CARGO_NET_RETRY="${CARGO_NET_RETRY:-8}" +CARGO_HTTP_TIMEOUT="${CARGO_HTTP_TIMEOUT:-120}" +CARGO_HTTP_MULTIPLEXING="${CARGO_HTTP_MULTIPLEXING:-false}" PROJECT_ARGS=() while (($# > 0)); do @@ -42,6 +46,10 @@ while (($# > 0)); do APT_GPG_AUTO_CREATE=1/0 缺少签名密钥时自动创建(默认 1) UBUNTU_MIRROR= 容器内 amd64 apt 源(默认阿里镜像) UBUNTU_PORTS_MIRROR= 容器内 arm64 apt 源(默认阿里镜像) + CARGO_REGISTRY_MIRROR= Cargo 稀疏索引镜像(默认 rsproxy) + CARGO_NET_RETRY= Cargo 网络重试次数(默认 8) + CARGO_HTTP_TIMEOUT= Cargo 单请求超时秒数(默认 120) + CARGO_HTTP_MULTIPLEXING=true/false Cargo HTTP/2 复用(默认 false) EOF exit 0 ;; @@ -117,6 +125,11 @@ if [[ "$RUN_MODE" == "docker" ]]; then -e BUILD_ARCH=amd64 \ -e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \ -e CLEAN_TAURI_TARGET="${CLEAN_TAURI_TARGET:-1}" \ + -e CARGO_REGISTRY_MIRROR="$CARGO_REGISTRY_MIRROR" \ + -e CARGO_NET_RETRY="$CARGO_NET_RETRY" \ + -e CARGO_HTTP_TIMEOUT="$CARGO_HTTP_TIMEOUT" \ + -e CARGO_HTTP_MULTIPLEXING="$CARGO_HTTP_MULTIPLEXING" \ + -e ALLOW_RUNTIME_APT_FIX="${ALLOW_RUNTIME_APT_FIX:-0}" \ "$IMAGE_TAG" \ bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}" @@ -130,6 +143,11 @@ if [[ "$RUN_MODE" == "docker" ]]; then -e BUILD_ARCH=arm64 \ -e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \ -e CLEAN_TAURI_TARGET="${CLEAN_TAURI_TARGET:-1}" \ + -e CARGO_REGISTRY_MIRROR="$CARGO_REGISTRY_MIRROR" \ + -e CARGO_NET_RETRY="$CARGO_NET_RETRY" \ + -e CARGO_HTTP_TIMEOUT="$CARGO_HTTP_TIMEOUT" \ + -e CARGO_HTTP_MULTIPLEXING="$CARGO_HTTP_MULTIPLEXING" \ + -e ALLOW_RUNTIME_APT_FIX="${ALLOW_RUNTIME_APT_FIX:-0}" \ "$IMAGE_TAG" \ bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}" else @@ -143,6 +161,11 @@ else -e BUILD_ARCH=arm64 \ -e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \ -e CLEAN_TAURI_TARGET="${CLEAN_TAURI_TARGET:-1}" \ + -e CARGO_REGISTRY_MIRROR="$CARGO_REGISTRY_MIRROR" \ + -e CARGO_NET_RETRY="$CARGO_NET_RETRY" \ + -e CARGO_HTTP_TIMEOUT="$CARGO_HTTP_TIMEOUT" \ + -e CARGO_HTTP_MULTIPLEXING="$CARGO_HTTP_MULTIPLEXING" \ + -e ALLOW_RUNTIME_APT_FIX="${ALLOW_RUNTIME_APT_FIX:-0}" \ "$IMAGE_TAG" \ bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}" fi