#!/usr/bin/env bash # 构建 Linux arm64 deb,并保证安装路径与 productName/executableName=DiscWorker 一致 set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" EXE="DiscWorker" SANITIZED="DiscWorker" OPT_DIR="/opt/${SANITIZED}" BIN_LINK="/usr/bin/${EXE}" echo "[build-deb-arm64] executable: ${EXE}" echo "[build-deb-arm64] opt dir: ${OPT_DIR}" node .electron-vue/build.js npx electron-builder --linux deb --arm64 shopt -s nullglob mapfile -t DEBS < <(ls -t build/*.deb 2>/dev/null || true) if [[ ${#DEBS[@]} -eq 0 ]]; then echo "[build-deb-arm64] 未找到 build/*.deb" >&2 exit 1 fi DEB="${DEBS[0]}" WORK="$(mktemp -d)" trap 'rm -rf "$WORK"' EXIT echo "[build-deb-arm64] patching: $DEB" dpkg-deb -R "$DEB" "$WORK/pkg" CONTROL_DIR="$WORK/pkg/DEBIAN" mkdir -p "$CONTROL_DIR" # 若 builder 已生成钩子,把旧小写路径替换为 DiscWorker;否则写入默认钩子 patch_or_write() { local file="$1" local kind="$2" if [[ -f "$file" ]]; then sed -i \ -e "s|/opt/discworker|/opt/${SANITIZED}|g" \ -e "s|/usr/bin/discworker|/usr/bin/${EXE}|g" \ -e "s|discworker/chrome-sandbox|${SANITIZED}/chrome-sandbox|g" \ -e "s|/opt/discworker/discworker|${OPT_DIR}/${EXE}|g" \ "$file" chmod 755 "$file" echo "[build-deb-arm64] patched existing ${kind}" return fi if [[ "$kind" == "postinst" ]]; then cat > "$file" < "$file" <