From 22db1c965f54012ffdbc1dabff991e9b45e99ad5 Mon Sep 17 00:00:00 2001 From: cysamurai Date: Tue, 14 Apr 2026 15:10:44 +0800 Subject: [PATCH] 3 --- scripts/docker/container-entry.sh | 64 +++++++++++++++++++++++++++++++ scripts/docker/run-build.sh | 47 ++++++++++++++++------- 2 files changed, 97 insertions(+), 14 deletions(-) diff --git a/scripts/docker/container-entry.sh b/scripts/docker/container-entry.sh index ed5e7b2..fe74d21 100644 --- a/scripts/docker/container-entry.sh +++ b/scripts/docker/container-entry.sh @@ -12,6 +12,70 @@ npm config set fetch-retry-mintimeout 20000 npm config set fetch-retry-maxtimeout 120000 npm config set fetch-timeout 300000 +ensure_amd64_deps() { + local x64_pc_dir="/usr/lib/x86_64-linux-gnu/pkgconfig" + local missing=0 + for f in glib-2.0.pc gdk-3.0.pc webkit2gtk-4.1.pc; do + if [[ ! -f "$x64_pc_dir/$f" ]]; then + missing=1 + break + fi + done + if [[ "$missing" -eq 0 ]]; then + return + fi + + echo "==> 补齐 amd64 依赖(当前容器缺少 x86_64 pkg-config 文件)" + apt-get update + apt-get install -y --no-install-recommends \ + build-essential:amd64 pkg-config:amd64 patchelf:amd64 \ + libglib2.0-dev:amd64 libgtk-3-dev:amd64 \ + libwebkit2gtk-4.1-dev:amd64 libjavascriptcoregtk-4.1-dev:amd64 \ + libayatana-appindicator3-dev:amd64 librsvg2-dev:amd64 libssl-dev:amd64 +} + +ensure_arm64_deps() { + local arm64_pc_dir="/usr/lib/aarch64-linux-gnu/pkgconfig" + local missing=0 + for f in glib-2.0.pc gdk-3.0.pc webkit2gtk-4.1.pc; do + if [[ ! -f "$arm64_pc_dir/$f" ]]; then + missing=1 + break + fi + done + if [[ "$missing" -eq 0 ]]; then + return + fi + + echo "==> 补齐 arm64 交叉依赖(当前容器缺少 aarch64 pkg-config 文件)" + apt-get update + apt-get install -y --no-install-recommends \ + -o Dpkg::Options::="--force-overwrite" \ + gcc-aarch64-linux-gnu \ + libglib2.0-dev:arm64 libgtk-3-dev:arm64 \ + libcairo2-dev:arm64 libpango1.0-dev:arm64 \ + libgdk-pixbuf-2.0-dev:arm64 libatk1.0-dev:arm64 libepoxy-dev:arm64 \ + libwebkit2gtk-4.1-dev:arm64 libjavascriptcoregtk-4.1-dev:arm64 \ + libssl-dev:arm64 libayatana-appindicator3-dev:arm64 librsvg2-dev:arm64 +} + +case "$BUILD_ARCH" in + amd64) + ensure_amd64_deps + ;; + arm64) + ensure_arm64_deps + ;; + all) + ensure_amd64_deps + ensure_arm64_deps + ;; + *) + echo "错误: BUILD_ARCH 仅支持 all|amd64|arm64,当前为 \"$BUILD_ARCH\"" >&2 + exit 1 + ;; +esac + if (($# == 0)); then mapfile -t projects < <(bash /work/scripts/build-linux-deb-all.sh --list-projects) else diff --git a/scripts/docker/run-build.sh b/scripts/docker/run-build.sh index cd9a505..f44bedd 100644 --- a/scripts/docker/run-build.sh +++ b/scripts/docker/run-build.sh @@ -88,20 +88,39 @@ echo "==> docker build --platform linux/amd64 -f scripts/docker/Dockerfile -t $I docker build --platform linux/amd64 -f scripts/docker/Dockerfile -t "$IMAGE_TAG" "$REPO_ROOT" if [[ "$RUN_MODE" == "docker" ]]; then - DOCKER_BUILD_ARCH="all" - echo "==> docker run (amd64+arm64: npm ci + build-linux-deb-all.sh)" + echo "==> docker run #1 (amd64: npm ci + build-linux-deb-all.sh)" + docker run --rm \ + --platform linux/amd64 \ + -v "$REPO_ROOT:/work" \ + -w /work \ + -e RUSTUP_HOME=/opt/rustup \ + -e CARGO_HOME=/opt/cargo \ + -e BUILD_ARCH=amd64 \ + -e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \ + "$IMAGE_TAG" \ + bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}" + + echo "==> docker run #2 (arm64: npm ci + build-linux-deb-all.sh)" + docker run --rm \ + --platform linux/amd64 \ + -v "$REPO_ROOT:/work" \ + -w /work \ + -e RUSTUP_HOME=/opt/rustup \ + -e CARGO_HOME=/opt/cargo \ + -e BUILD_ARCH=arm64 \ + -e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \ + "$IMAGE_TAG" \ + bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}" else - DOCKER_BUILD_ARCH="arm64" echo "==> docker run (arm64: npm ci + build-linux-deb-all.sh)" + docker run --rm \ + --platform linux/amd64 \ + -v "$REPO_ROOT:/work" \ + -w /work \ + -e RUSTUP_HOME=/opt/rustup \ + -e CARGO_HOME=/opt/cargo \ + -e BUILD_ARCH=arm64 \ + -e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \ + "$IMAGE_TAG" \ + bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}" fi - -docker run --rm \ - --platform linux/amd64 \ - -v "$REPO_ROOT:/work" \ - -w /work \ - -e RUSTUP_HOME=/opt/rustup \ - -e CARGO_HOME=/opt/cargo \ - -e BUILD_ARCH="$DOCKER_BUILD_ARCH" \ - -e NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmjs.org/}" \ - "$IMAGE_TAG" \ - bash /work/scripts/docker/container-entry.sh "${SELECTED_PROJECTS[@]}"