f28b5dc50a
Co-authored-by: Cursor <cursoragent@cursor.com>
84 lines
2.0 KiB
Bash
84 lines
2.0 KiB
Bash
#!/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" <<EOF
|
|
#!/bin/bash
|
|
set -e
|
|
if [ -f ${OPT_DIR}/chrome-sandbox ]; then
|
|
chown root:root ${OPT_DIR}/chrome-sandbox
|
|
chmod 4755 ${OPT_DIR}/chrome-sandbox
|
|
fi
|
|
if [ -x ${OPT_DIR}/${EXE} ]; then
|
|
ln -sfn ${OPT_DIR}/${EXE} ${BIN_LINK}
|
|
fi
|
|
exit 0
|
|
EOF
|
|
else
|
|
cat > "$file" <<EOF
|
|
#!/bin/bash
|
|
set -e
|
|
if [ "\$1" = "remove" ] || [ "\$1" = "purge" ]; then
|
|
rm -f ${BIN_LINK}
|
|
fi
|
|
exit 0
|
|
EOF
|
|
fi
|
|
chmod 755 "$file"
|
|
echo "[build-deb-arm64] wrote default ${kind}"
|
|
}
|
|
|
|
patch_or_write "$CONTROL_DIR/postinst" "postinst"
|
|
patch_or_write "$CONTROL_DIR/postrm" "postrm"
|
|
|
|
OUT="build/${SANITIZED}-arm64-patched.deb"
|
|
dpkg-deb -b "$WORK/pkg" "$OUT"
|
|
echo "[build-deb-arm64] done: $OUT"
|