diff --git a/README.md b/README.md new file mode 100644 index 0000000..e907e0b --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +在 Ubuntu 24.04.x(x86_64) 上: + +cd /path/to/TauriClient +chmod +x scripts/build-linux-deb-all.sh +./scripts/build-linux-deb-all.sh +不带参数:按 PROJECTS 数组依次构建 所有 项目(当前为 call-client、broadcast-client)。 +只构建部分项目: +./scripts/build-linux-deb-all.sh call-client +./scripts/build-linux-deb-all.sh call-client broadcast-client +各子项目里仍可执行(只打 当前项目 的 amd64 + arm64): + +call-client: npm run build:deb:all +broadcast-client: npm run build:deb:all +输出目录(你要的两类路径) +集中拷贝目录(推荐拿包) +TauriClient/dist/linux-deb/<项目名>/amd64/_.deb +TauriClient/dist/linux-deb/<项目名>/arm64/_.deb + +Tauri 原始输出(未改路径) +<项目>/src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb/ +<项目>/src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/deb/ + +脚本在每次 npm run build:deb:x64 / build:deb:arm64 成功后,会把对应目录下的 .deb 复制到 dist/linux-deb/...。 + +后续加新项目 +在 scripts/build-linux-deb-all.sh 里 PROJECTS 数组 增加一行目录名即可(与 call-client 同级),并保证该项目 package.json 里仍有: + +build:deb:x64、build:deb:arm64(与现有一致) diff --git a/broadcast-client/package.json b/broadcast-client/package.json index 410a252..3583d72 100644 --- a/broadcast-client/package.json +++ b/broadcast-client/package.json @@ -9,7 +9,7 @@ "build:deb": "tauri build --bundles deb --target x86_64-unknown-linux-gnu", "build:deb:x64": "tauri build --bundles deb --target x86_64-unknown-linux-gnu", "build:deb:arm64": "tauri build --bundles deb --target aarch64-unknown-linux-gnu", - "build:deb:all": "npm run build:deb:x64 && npm run build:deb:arm64", + "build:deb:all": "bash ../scripts/build-linux-deb-all.sh broadcast-client", "build:appimage": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu", "build:appimage:x64": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu", "build:appimage:arm64": "tauri build --bundles appimage --target aarch64-unknown-linux-gnu", diff --git a/broadcast-client/src-tauri/tauri.conf.json b/broadcast-client/src-tauri/tauri.conf.json index d9fe5c6..e835e19 100644 --- a/broadcast-client/src-tauri/tauri.conf.json +++ b/broadcast-client/src-tauri/tauri.conf.json @@ -33,7 +33,22 @@ } }, "bundle": { - "active": false, - "targets": "all" + "active": true, + "targets": ["deb"], + "linux": { + "deb": { + "depends": [] + }, + "appimage": { + "bundleMediaFramework": false + } + }, + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] } } diff --git a/call-client/package.json b/call-client/package.json index e80e4a9..b90d898 100644 --- a/call-client/package.json +++ b/call-client/package.json @@ -9,7 +9,7 @@ "build:deb": "tauri build --bundles deb --target x86_64-unknown-linux-gnu", "build:deb:x64": "tauri build --bundles deb --target x86_64-unknown-linux-gnu", "build:deb:arm64": "tauri build --bundles deb --target aarch64-unknown-linux-gnu", - "build:deb:all": "npm run build:deb:x64 && npm run build:deb:arm64", + "build:deb:all": "bash ../scripts/build-linux-deb-all.sh call-client", "build:appimage": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu", "build:appimage:x64": "tauri build --bundles appimage --target x86_64-unknown-linux-gnu", "build:appimage:arm64": "tauri build --bundles appimage --target aarch64-unknown-linux-gnu", diff --git a/scripts/build-linux-deb-all.sh b/scripts/build-linux-deb-all.sh new file mode 100644 index 0000000..3b3225e --- /dev/null +++ b/scripts/build-linux-deb-all.sh @@ -0,0 +1,125 @@ +#!/usr/bin/env bash +# 在 Ubuntu 24.04.x(x86_64 宿主机)上为多个 Tauri 2 + Vue 项目打出 amd64 与 arm64 的 .deb。 +# +# 依赖(示例,按 Tauri Linux 文档补齐): +# - Node/npm、Rust、@tauri-apps/cli +# - rustup target add aarch64-unknown-linux-gnu +# - 本机 amd64 与交叉 arm64 的 libwebkit2gtk、gtk 等 -dev 包及 pkg-config 布局 +# +# 用法: +# ./scripts/build-linux-deb-all.sh # 构建 PROJECTS 中全部项目 +# ./scripts/build-linux-deb-all.sh call-client # 仅构建指定项目(可多个) +# +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# --------------------------------------------------------------------------- +# 同框架项目列表(相对 REPO_ROOT 的目录名)。后续新增项目在此追加一行即可。 +# --------------------------------------------------------------------------- +PROJECTS=( + "call-client" + "broadcast-client" + # "another-tauri-app" +) + +# 统一收集 .deb 的根目录(相对 REPO_ROOT) +OUTPUT_ROOT="$REPO_ROOT/dist/linux-deb" + +build_one_target() { + local project_dir="$1" + local npm_cmd="$2" + local abs_project="$REPO_ROOT/$project_dir" + + if [[ ! -f "$abs_project/package.json" ]]; then + echo "错误: 未找到项目 $project_dir(缺少 package.json)" >&2 + exit 1 + fi + + echo "==> [$project_dir] $npm_cmd" + (cd "$abs_project" && npm run "$npm_cmd") +} + +collect_debs() { + local project_dir="$1" + local arch_label="$2" + local triple="$3" + local src="$REPO_ROOT/$project_dir/src-tauri/target/$triple/release/bundle/deb" + local dest="$OUTPUT_ROOT/$project_dir/$arch_label" + + if [[ ! -d "$src" ]]; then + echo "警告: 未找到输出目录 $src(跳过复制)" >&2 + return 0 + fi + + mkdir -p "$dest" + shopt -s nullglob + local files=( "$src"/*.deb ) + shopt -u nullglob + if (( ${#files[@]} == 0 )); then + echo "警告: $src 下没有 .deb 文件" >&2 + return 0 + fi + cp -v "${files[@]}" "$dest/" +} + +build_project() { + local project_dir="$1" + echo "" + echo "######## $project_dir: amd64 ########" + unset PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR PKG_CONFIG_ALLOW_CROSS 2>/dev/null || true + build_one_target "$project_dir" "build:deb:x64" + collect_debs "$project_dir" "amd64" "x86_64-unknown-linux-gnu" + + echo "" + echo "######## $project_dir: arm64 (cross) ########" + export PKG_CONFIG_ALLOW_CROSS=1 + export PKG_CONFIG_SYSROOT_DIR=/ + export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig + export PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig + build_one_target "$project_dir" "build:deb:arm64" + collect_debs "$project_dir" "arm64" "aarch64-unknown-linux-gnu" + unset PKG_CONFIG_ALLOW_CROSS PKG_CONFIG_SYSROOT_DIR PKG_CONFIG_PATH PKG_CONFIG_LIBDIR +} + +select_projects() { + if (($# == 0)); then + printf '%s\n' "${PROJECTS[@]}" + return + fi + local name ok + for name in "$@"; do + ok=0 + for p in "${PROJECTS[@]}"; do + if [[ "$p" == "$name" ]]; then + ok=1 + break + fi + done + if [[ "$ok" -eq 0 ]]; then + echo "错误: 未知项目 \"$name\"(请加入 scripts/build-linux-deb-all.sh 的 PROJECTS 数组)" >&2 + exit 1 + fi + echo "$name" + done +} + +main() { + mapfile -t to_build < <(select_projects "$@") + mkdir -p "$OUTPUT_ROOT" + + for p in "${to_build[@]}"; do + build_project "$p" + done + + echo "" + echo "==> 全部完成" + echo " 统一输出目录: $OUTPUT_ROOT" + echo " 每项目下: <项目名>/amd64/*.deb 与 <项目名>/arm64/*.deb" + echo " Tauri 原始路径仍在各项目:" + echo " src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb/" + echo " src-tauri/target/aarch64-unknown-linux-gnu/release/bundle/deb/" +} + +main "$@"