#!/usr/bin/env bash # visionA-local — Ubuntu 22.04/24.04 x86_64 一鍵 build # # 使用方式: # git clone https://github.com/jim800121/visionA.git # cd visionA/local-tool # bash scripts/bootstrap-linux.sh # # 環境變數: # VISIONA_TARGET 預設 appimage,可設 wails-linux / payload-linux set -euo pipefail TARGET="${VISIONA_TARGET:-appimage}" GO_VERSION="1.22.5" log() { printf '\033[1;36m==> %s\033[0m\n' "$*"; } err() { printf '\033[1;31m!!! %s\033[0m\n' "$*" >&2; exit 1; } [[ "$(uname -s)" == "Linux" ]] || err "此腳本只支援 Linux" [[ "$(uname -m)" == "x86_64" ]] || err "此腳本只支援 x86_64" [[ -f Makefile && -d visiona-local ]] || err "請先 cd 到 local-tool/ 目錄再執行此腳本" log "[1/5] 安裝系統套件(需要 sudo)" sudo apt update sudo apt install -y \ git curl ca-certificates build-essential pkg-config \ libgtk-3-dev libwebkit2gtk-4.1-dev \ python3 python3-pip python3-venv \ file desktop-file-utils fuse libfuse2 log "[2/5] 安裝 Go $GO_VERSION" if ! command -v go >/dev/null || [[ "$(go version 2>/dev/null)" != *"go$GO_VERSION"* ]]; then curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" -o /tmp/go.tar.gz sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf /tmp/go.tar.gz rm /tmp/go.tar.gz fi export PATH="/usr/local/go/bin:$HOME/go/bin:$PATH" if ! grep -q '/usr/local/go/bin' "$HOME/.bashrc" 2>/dev/null; then echo 'export PATH=/usr/local/go/bin:$HOME/go/bin:$PATH' >> "$HOME/.bashrc" fi log "[3/5] 安裝 Node 20 + pnpm" if ! command -v node >/dev/null || [[ "$(node -v)" != v20.* ]]; then curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs fi command -v pnpm >/dev/null || sudo npm i -g pnpm log "[4/5] 安裝 Wails CLI" if ! command -v wails >/dev/null; then go install github.com/wailsapp/wails/v2/cmd/wails@latest fi wails doctor || log "wails doctor 有警告,繼續" log "[5/5] 開始 build(target=$TARGET)" log "ffmpeg 使用 LGPL v3 build(v2 TDD §4:BtbN n7.1 LGPL)" make vendor-python-linux vendor-wheels-linux vendor-ffmpeg-linux make payload-linux case "$TARGET" in payload-linux) ;; wails-linux) make wails-linux ;; appimage|*) make wails-linux && make appimage ;; esac log "完成 ✅" log "產出位置:$(pwd)/dist/" ls -lh dist/ 2>/dev/null || true