|
|
#!/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
|
|
|
|
|
|
# 交叉 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
|
|
|
|
|
|
# 为避免 NodeSource 在 multiarch 场景触发 python3 依赖解算冲突,直接使用 Ubuntu 官方 nodejs/npm。
|
|
|
apt-get install -y --no-install-recommends nodejs:amd64 npm:amd64
|
|
|
|
|
|
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/*
|