#!/usr/bin/env bash # 在容器内配置 apt(amd64 主归档 + arm64 ubuntu-ports)、安装 Tauri 交叉打 deb 所需依赖、Node、Rust。 set -euxo pipefail export DEBIAN_FRONTEND=noninteractive dpkg --add-architecture arm64 rm -rf /etc/apt/sources.list.d/* rm -f /etc/apt/sources.list cat > /etc/apt/sources.list.d/ubuntu.sources <<'EOF' Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Architectures: amd64 Types: deb URIs: http://security.ubuntu.com/ubuntu Suites: noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Architectures: amd64 Types: deb URIs: http://ports.ubuntu.com/ubuntu-ports/ Suites: noble noble-updates noble-backports noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Architectures: arm64 EOF apt-get update apt-get install -y --no-install-recommends \ ca-certificates curl gnupg git ubuntu-keyring \ python3:amd64 python3-importlib-metadata:amd64 python3-markdown:amd64 # 本机构建 amd64 apt-get install -y --no-install-recommends \ build-essential pkg-config patchelf \ libglib2.0-dev libgtk-3-dev \ libwebkit2gtk-4.1-dev libjavascriptcoregtk-4.1-dev \ libayatana-appindicator3-dev librsvg2-dev libssl-dev # 构建阶段自检:避免缓存/半装镜像拖到 run 时才在 build-linux-deb-all.sh 里失败 for f in glib-2.0.pc gdk-3.0.pc webkit2gtk-4.1.pc; do if [[ ! -f "/usr/lib/x86_64-linux-gnu/pkgconfig/${f}" ]]; then echo "ERROR: amd64 缺少 pkg-config: /usr/lib/x86_64-linux-gnu/pkgconfig/${f}" >&2 echo "请检查 libwebkit2gtk-4.1-dev 等是否已正确安装。" >&2 exit 1 fi done # 交叉 arm64(勿装 systemd-sysv:arm64;用 --no-install-recommends) if ! 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; then apt-get -f install -y 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 fi for f in glib-2.0.pc gdk-3.0.pc webkit2gtk-4.1.pc; do if [[ ! -f "/usr/lib/aarch64-linux-gnu/pkgconfig/${f}" ]]; then echo "ERROR: arm64 缺少 pkg-config: /usr/lib/aarch64-linux-gnu/pkgconfig/${f}" >&2 exit 1 fi done # Node.js 22(不走 NodeSource apt,避免 multiarch 下 python 依赖冲突) NODE_VERSION="v22.16.0" curl -fsSL "https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-linux-x64.tar.xz" -o /tmp/node.tar.xz tar -xJf /tmp/node.tar.xz -C /opt ln -sfn "/opt/node-${NODE_VERSION}-linux-x64" /opt/node ln -sf /opt/node/bin/node /usr/local/bin/node ln -sf /opt/node/bin/npm /usr/local/bin/npm ln -sf /opt/node/bin/npx /usr/local/bin/npx rm -f /tmp/node.tar.xz export RUSTUP_HOME=/opt/rustup export CARGO_HOME=/opt/cargo mkdir -p "$RUSTUP_HOME" "$CARGO_HOME" curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --no-modify-path chmod -R a+w "$RUSTUP_HOME" "$CARGO_HOME" /opt/cargo/bin/rustup target add aarch64-unknown-linux-gnu # 非登录 shell(docker run bash -c)也能找到 cargo / rustc ln -sf /opt/cargo/bin/cargo /usr/local/bin/cargo ln -sf /opt/cargo/bin/rustc /usr/local/bin/rustc ln -sf /opt/cargo/bin/rustup /usr/local/bin/rustup rustc --version node --version cargo --version apt-get clean rm -rf /var/lib/apt/lists/*