From fbd585ab732046e9326507054a8e1444b577a3e1 Mon Sep 17 00:00:00 2001 From: jim800121chen Date: Thu, 16 Apr 2026 04:11:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(local-tool):=20Linux=20build=20=E6=94=AF?= =?UTF-8?q?=E6=8F=B4=20webkit2gtk-4.1=EF=BC=88Ubuntu=2022.10+=20/=20Debian?= =?UTF-8?q?=2012+=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用者在 Linux build 看到: pkg-config --cflags ... webkit2gtk-4.0 Package 'webkit2gtk-4.0' not found 根因:Wails v2.11 預設 cgo pkg-config 指定 webkit2gtk-4.0,但 Ubuntu 22.10 之後的版本已經把系統 package 從 webkit2gtk-4.0 改名為 4.1 (API 大致相容)。使用者 bootstrap 裝的是 libwebkit2gtk-4.1-dev, pkg-config 找不到 4.0.pc 就 fail。 修法: 1. Makefile wails-linux target 自動偵測 webkit2gtk 版本 - 優先 pkg-config --exists webkit2gtk-4.1 → wails build -tags webkit2_41 (Wails v2.10+ 支援的 build tag,切換到 4.1 的 cgo 宣告) - 退回 pkg-config --exists webkit2gtk-4.0 → wails build 預設 - 兩者都沒有 → 清楚錯誤訊息 + 建議安裝指令 2. scripts/bootstrap-linux.sh 裝 webkit2gtk dev package 時也做版本偵測 - apt-cache show 優先查 4.1,退回 4.0 - Ubuntu 22.04 及之前 repo 有 4.0;22.10+ / 24.04 repo 只有 4.1 - 兩個都試過才 err 驗證: - make -n wails-linux dry-run 正常 parse - bash -n scripts/bootstrap-linux.sh 語法 OK - macOS 端 make dmg 仍 work(未改 darwin target) 使用者待做:Linux 端 git pull 拉新版 → 重跑 bootstrap-linux.sh (確保 webkit2gtk-4.1-dev 安裝)→ make appimage。 Co-Authored-By: Claude Opus 4.6 (1M context) --- local-tool/Makefile | 18 +++++++++++++++++- local-tool/scripts/bootstrap-linux.sh | 14 +++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/local-tool/Makefile b/local-tool/Makefile index 8a39ec4..2687506 100644 --- a/local-tool/Makefile +++ b/local-tool/Makefile @@ -490,7 +490,23 @@ wails-linux: payload-linux ## ⚠️ 必須在 Linux runner 上執行:wails bu echo ""; \ exit 1; \ fi - cd visiona-local && wails build -platform linux/amd64 -clean + # webkit2gtk-4.0 從 Ubuntu 22.10+ / Debian 12+ 起被 webkit2gtk-4.1 取代。 + # 偵測 pkg-config 哪個存在:優先用 4.1(加 -tags webkit2_41),4.0 則 + # 不加 tag(Wails 預設)。 + @if pkg-config --exists webkit2gtk-4.1 2>/dev/null; then \ + echo "==> webkit2gtk-4.1 detected → wails build with -tags webkit2_41"; \ + cd visiona-local && wails build -platform linux/amd64 -clean -tags webkit2_41; \ + elif pkg-config --exists webkit2gtk-4.0 2>/dev/null; then \ + echo "==> webkit2gtk-4.0 detected → wails build (default)"; \ + cd visiona-local && wails build -platform linux/amd64 -clean; \ + else \ + echo ""; \ + echo "❌ 找不到 webkit2gtk-4.0 或 webkit2gtk-4.1 dev header"; \ + echo " 請執行:sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev"; \ + echo " (舊版 Ubuntu 20.04 可改用 libwebkit2gtk-4.0-dev)"; \ + echo ""; \ + exit 1; \ + fi @du -sh visiona-local/build/bin/visiona-local # ── 安裝檔打包 ───────────────────────────────────────────────────── diff --git a/local-tool/scripts/bootstrap-linux.sh b/local-tool/scripts/bootstrap-linux.sh index 4a2a68b..582b94c 100755 --- a/local-tool/scripts/bootstrap-linux.sh +++ b/local-tool/scripts/bootstrap-linux.sh @@ -25,10 +25,22 @@ 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 \ + libgtk-3-dev \ python3 python3-pip python3-venv \ file desktop-file-utils fuse libfuse2 +# webkit2gtk:優先 4.1(Ubuntu 22.10+ / Debian 12+),退回 4.0(Ubuntu 20.04 / 22.04)。 +# Makefile wails-linux target 會偵測已安裝的版本並自動加 -tags webkit2_41。 +if apt-cache show libwebkit2gtk-4.1-dev >/dev/null 2>&1; then + log " → 偵測到 libwebkit2gtk-4.1-dev 可用,安裝中" + sudo apt install -y libwebkit2gtk-4.1-dev +elif apt-cache show libwebkit2gtk-4.0-dev >/dev/null 2>&1; then + log " → 偵測到 libwebkit2gtk-4.0-dev 可用,安裝中" + sudo apt install -y libwebkit2gtk-4.0-dev +else + err "找不到 libwebkit2gtk-4.1-dev 或 libwebkit2gtk-4.0-dev。請手動安裝對應的 webkit2gtk dev package(Ubuntu: sudo apt install libwebkit2gtk-4.1-dev)" +fi + 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