Files
BackOneUI/scripts/build-secure-chat-updater-bundle.sh
T
2026-07-07 13:09:44 +07:00

106 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Build a tar.gz updater bundle that adds native Secure Chat to an existing BackOneUI install.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
BACKONE_REPO="${BACKONE_REPO:-$ROOT/../BackOne}"
PKG_TEMPLATE="${ROOT}/pkg/linux/secure-chat-updater"
DEPROOT="${BACKONE_UI_DEPROOT:-$HOME/backone-ui-build-deps}"
BUILD_PROFILE="${BUILD_PROFILE:-release}"
ARCH="$(uname -m)"
OUT_DIR="${ROOT}/build/linux-updater-bundles"
case "$ARCH" in
x86_64) ARCH_TAG="amd64" ;;
aarch64) ARCH_TAG="arm64" ;;
*) ARCH_TAG="$ARCH" ;;
esac
VERSION="$(grep '^version' "${ROOT}/Cargo.toml" | head -1 | sed 's/.*"\(.*\)".*/\1/')"
BUNDLE_NAME="backone-ui-secure-chat-updater-${VERSION}-linux-${ARCH_TAG}"
STAGE="${OUT_DIR}/${BUNDLE_NAME}"
echo "==> Building BackOneUI (${BUILD_PROFILE}) with Secure Chat..."
export PKG_CONFIG_PATH="${DEPROOT}/usr/lib/x86_64-linux-gnu/pkgconfig:${PKG_CONFIG_PATH:-}"
export PKG_CONFIG_SYSROOT_DIR="$DEPROOT"
export LD_LIBRARY_PATH="${DEPROOT}/usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH:-}"
if [[ -x "${ROOT}/scripts/linux-build.sh" ]]; then
bash "${ROOT}/scripts/linux-build.sh" --"${BUILD_PROFILE}"
else
cd "${ROOT}"
cargo build --"${BUILD_PROFILE}"
fi
BIN_SRC="${ROOT}/target/${BUILD_PROFILE}/backone_desktop_ui"
if [[ ! -x "$BIN_SRC" ]]; then
echo "Binary not found: $BIN_SRC" >&2
exit 1
fi
echo "==> Staging bundle ${BUNDLE_NAME}..."
rm -rf "$STAGE"
mkdir -p "$STAGE/usr/bin" "$STAGE/usr/share/applications" "$STAGE/usr/share/backone" "$STAGE/extras"
cp -a "${PKG_TEMPLATE}/manifest.json" "$STAGE/"
cp -a "${PKG_TEMPLATE}/install.sh" "$STAGE/"
chmod 755 "$STAGE/install.sh"
cp -a "$BIN_SRC" "$STAGE/usr/bin/backone_desktop_ui"
cp -a "${PKG_TEMPLATE}/usr/share/backone/backone-ui.env" "$STAGE/usr/share/backone/"
cp -a "${ROOT}/backone-ui.desktop" "$STAGE/usr/share/applications/backone-ui.desktop"
# Ship web secure-chat addon from local tree or sibling BackOne repo.
ADDON_SRC=""
if [[ -d "${ROOT}/addons/secure-chat" ]]; then
ADDON_SRC="${ROOT}/addons/secure-chat"
elif [[ -d "${BACKONE_REPO}/addons/secure-chat" ]]; then
ADDON_SRC="${BACKONE_REPO}/addons/secure-chat"
fi
if [[ -n "$ADDON_SRC" ]]; then
mkdir -p "$STAGE/opt/backone-addon-secure-chat"
cp -a "${ADDON_SRC}/addon.json" \
"$STAGE/opt/backone-addon-secure-chat/"
cp -a "${ADDON_SRC}/frontend/index.js" \
"$STAGE/opt/backone-addon-secure-chat/"
cat > "$STAGE/extras/install-web-secure-chat-addon.sh" <<'EOS'
#!/usr/bin/env bash
set -euo pipefail
BUNDLE_DIR="$(cd "$(dirname "$0")/.." && pwd)"
ADDON_SRC="${BUNDLE_DIR}/opt/backone-addon-secure-chat"
if [[ "${EUID}" -ne 0 ]]; then
echo "Run with sudo" >&2
exit 1
fi
mkdir -p /usr/lib/backone/addons/secure-chat
mkdir -p /var/lib/backone/app/addons/secure-chat
cp "${ADDON_SRC}/addon.json" /usr/lib/backone/addons/secure-chat/
cp "${ADDON_SRC}/index.js" /var/lib/backone/app/addons/secure-chat/
if [[ -x /usr/lib/backone/addons/updater/backone-updater ]]; then
/usr/lib/backone/addons/updater/backone-updater rebuild-manifest
fi
echo "Installed backone-addon-secure-chat files for the web app-shell."
EOS
chmod 755 "$STAGE/extras/install-web-secure-chat-addon.sh"
fi
if [[ -x "${ROOT}/scripts/linux-setup-backone-access.sh" ]]; then
cp -a "${ROOT}/scripts/linux-setup-backone-access.sh" "$STAGE/extras/setup-webhub.sh"
fi
# Patch manifest version from Cargo.toml
sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"${VERSION}\"/" "$STAGE/manifest.json"
mkdir -p "$OUT_DIR"
TARBALL="${OUT_DIR}/${BUNDLE_NAME}.tar.gz"
tar -C "$OUT_DIR" -czf "$TARBALL" "$BUNDLE_NAME"
echo ""
echo "Built updater bundle:"
echo " ${TARBALL}"
echo ""
echo "Install on target system:"
echo " tar -xzf ${BUNDLE_NAME}.tar.gz"
echo " cd ${BUNDLE_NAME}"
echo " sudo ./install.sh"