You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
4.4 KiB
Bash

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env bash
# 在容器内配置 aptamd64 主归档 + arm64 ubuntu-ports、安装 Tauri 交叉打 deb 所需依赖、Node、Rust。
set -euxo pipefail
export DEBIAN_FRONTEND=noninteractive
dpkg --add-architecture arm64
# 强制将默认源限制为 amd64避免 apt 去 archive/security 拉 arm64 索引(会 404
if [[ -f /etc/apt/sources.list ]]; then
cp /etc/apt/sources.list /etc/apt/sources.list.bak
sed -E -i \
-e 's|^deb[[:space:]]+http://|deb [arch=amd64] http://|g' \
-e 's|^deb[[:space:]]+https://|deb [arch=amd64] https://|g' \
/etc/apt/sources.list
fi
for list_file in /etc/apt/sources.list.d/*.list; do
[[ -e "$list_file" ]] || continue
sed -E -i \
-e 's|^deb[[:space:]]+http://|deb [arch=amd64] http://|g' \
-e 's|^deb[[:space:]]+https://|deb [arch=amd64] https://|g' \
"$list_file"
done
# 清理并重建 arm64 ports 源,仅用于 arm64 索引与依赖解析。
rm -f /etc/apt/sources.list.d/arm64-ports.list
cat > /etc/apt/sources.list.d/arm64-ports.list <<'EOF'
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal-updates main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal-backports main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal-security main restricted universe multiverse
EOF
apt-get update
apt-get install -y --no-install-recommends \
ca-certificates curl gnupg git ubuntu-keyring python3
# 本机构建 amd64
apt-get install -y --no-install-recommends \
build-essential pkg-config patchelf \
libglib2.0-dev libgtk-3-dev \
libwebkit2gtk-4.0-dev libjavascriptcoregtk-4.0-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.0.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.0-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-pixbuf2.0-dev:arm64 libatk1.0-dev:arm64 libepoxy-dev:arm64 \
libwebkit2gtk-4.0-dev:arm64 libjavascriptcoregtk-4.0-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-pixbuf2.0-dev:arm64 libatk1.0-dev:arm64 libepoxy-dev:arm64 \
libwebkit2gtk-4.0-dev:arm64 libjavascriptcoregtk-4.0-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.0.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
# 非登录 shelldocker 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/*