本文說明如何在 Linux 上建置 ShogiBoardQ,製作 ShogiBoardQ-linux.zip 並在 GitHub Releases 上發行。ZIP 中包含 AppImage(應用程式本體)、3・5・7・9・11・13 手詰的詰棋題集(各 1,000 題,共 6,000 題),以及用於一般對局的 USI 引擎 Hayanagi。發行時 Linux 只附加這一個 ZIP。
目前只能在 Arch Linux 上製作發行套件。 AppImage 中隨附的程式庫的授權文件要透過 pacman 收集,因此使用 Arch Linux 的 Qt 套件製作。用於發行的發行套件在較舊的 Arch Linux 容器中製作(5.1)。應用程式本身的建置與開發也可以在其他發行版上進行。
目錄
1. 前提條件
| 項目 | 需求 |
|---|---|
| 作業系統 | x86_64 的 Linux。製作發行套件(AppImage 與 ZIP)需要 Arch Linux(用於發行時為 Docker 容器中的 Arch Linux) |
| 編譯器 | 支援 C++17 的 GCC 9 以上,或 Clang 10 以上 |
| CMake | 3.16 以上(建議使用 Ninja) |
| Qt | 6.7 以上(Widgets、Charts、Network、Concurrent、Multimedia、Sql、LinguistTools)。製作發行套件還需要 SVG 外掛程式 |
| Python | Python 3(發行用指令碼) |
| Docker | 在容器中製作用於發行的發行套件時 |
| 其他 | Git、curl、file、FUSE 2(執行 AppImage 格式的工具)、ImageMagick(縮小超過 512px 的圖示) |
製作發行套件時需要連上網路,因為第一次會下載 linuxdeploy 和 appimagetool。
關於 glibc: AppImage 只能在 glibc 與建置環境相同或更新的系統上執行。在最新的 Arch Linux 上建置時,需要 glibc 2.43 以上,無法在 Ubuntu 24.04(glibc 2.39)等系統上啟動。因此用於發行的發行套件在固定為 2024 年 7 月 15 日 Arch Linux(glibc 2.39、Qt 6.7.2)的容器中建置(5.1)。該 AppImage 需要 glibc 2.38 以上和 GCC 14 以上的 libstdc++,可在 Ubuntu 24.04 以上、Debian 13、Fedora 40 以上等系統上執行(Fedora 39 的 libstdc++ 來自 GCC 13,無法執行)。
關於隨附的 OpenSSL 和 libcurl: 容器中的其他套件維持當時的版本,但隨附的 OpenSSL、libcurl 以及 libcurl 使用的網路程式庫(nghttp2、nghttp3、ngtcp2、libssh2)會替換為新版本(2026 年 10 月時為 OpenSSL 3.6.5、curl 8.23.0。見 5.1)。當時的 OpenSSL 3.3.1、curl 8.8.0 缺少之後的修正(如 CVE-2024-6119)。OpenSSL 無法改用系統內建的版本:隨附的 libcurl(Qt Network 載入的 libproxy 用它取得代理伺服器自動設定(PAC))需要 OpenSSL 3.5 以上的函式,在 OpenSSL 3.0 的 Ubuntu 24.04 上應用程式將無法啟動。AppRun 透過
OPENSSL_CONF讓隨附的 OpenSSL 讀取隨附的設定(usr/share/ShogiBoardQ/openssl.cnf)。系統的設定是為發行版的 OpenSSL 撰寫的,上游 OpenSSL 無法讀取 Fedora 的設定(加密原則),曾導致網路對局無法使用 TLS。
2. 建立開發環境
2.1 Arch Linux 與 Docker(製作發行套件時)
用於發行的發行套件在容器中建置,因此本機只需要 Docker、Git 和 Python 3(Qt 等建置所需的軟體在容器中)。請將使用者加入 docker 群組並重新登入。
sudo usermod -aG docker $USER
docker 群組的使用者可以透過 docker 進行相當於 root 的操作。
直接在 Arch Linux 上建置與開發時,安裝建置工具和 Arch 的 Qt 套件。fcitx5-qt 用於將日文輸入(fcitx5)的輸入法外掛程式放進 AppImage;未安裝時不會隨附該外掛程式。
sudo pacman -S --needed base-devel cmake ninja git curl file python fuse2 imagemagick \
qt6-base qt6-charts qt6-multimedia qt6-svg qt6-tools fcitx5-qt
2.2 其他發行版(僅建置應用程式)
在 Ubuntu、Debian 或 Fedora 上也可以建置與開發應用程式。需要 Qt 6.7 以上,若發行版提供的 Qt 較舊,請使用 Qt Online Installer 安裝 Qt。
Ubuntu / Debian:
sudo apt install build-essential cmake ninja-build git \
qt6-base-dev qt6-charts-dev qt6-multimedia-dev qt6-tools-dev qt6-tools-dev-tools \
qt6-l10n-tools libqt6sql6-sqlite libgl1-mesa-dev
Fedora:
sudo dnf install gcc-c++ cmake ninja-build git \
qt6-qtbase-devel qt6-qtcharts-devel qt6-qtmultimedia-devel qt6-qttools-devel \
qt6-linguist mesa-libGL-devel
使用 Qt Online Installer 安裝的 Qt 時,在設定 CMake 時指定其位置(範例為 Qt 6.11.2)。
cmake -B build -S . -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="$HOME/Qt/6.11.2/gcc_64"
2.3 確認安裝
cmake --version
g++ --version
qmake6 --version
3. 取得原始碼並建置
取得儲存庫時請一併取得 Hayanagi 子模組。缺少子模組時,建置所需的檔案會不完整。
git clone --recurse-submodules https://github.com/hnakada123/ShogiBoardQ.git
cd ShogiBoardQ
對於已取得的儲存庫,執行 git submodule update --init --recursive 取得所記錄版本的 Hayanagi。接著以 Release 方式建置並啟動。
cmake -B build -S . -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/ShogiBoardQ
執行測試:
cmake -B build -S . -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON
cmake --build build
ctest --test-dir build --output-on-failure
只建置而不製作發行套件時,也可以使用 ./scripts/build-linux.sh --skip-appimage。
4. 準備 Qt 的授權文件
AppImage 中收錄從同版本 Qt 原始碼中擷取的授權文件,以及原始碼來源的紀錄。請在製作發行套件之前準備一次,更新 Qt 後重新準備。一般建置不需要。
Qt 的版本取決於建置環境。用於發行的容器(5.1)使用 Qt 6.7.2,因此取得並驗證 Qt 6.7.2 的原始碼(qt-everywhere),將文件擷取到 build-container/qt-licenses。SHA-256 請用官方下載網站上與原始碼位於同一位置的 .sha256 檔案確認。
curl -fsSL https://download.qt.io/archive/qt/6.7/6.7.2/single/qt-everywhere-src-6.7.2.tar.xz.sha256
python3 scripts/qt_licenses.py fetch --version 6.7.2 \
--sha256 0aaea247db870193c260e8453ae692ca12abc1bd841faa1a6e6c99459968ca8a \
--output build-container/qt-sources
python3 scripts/qt_licenses.py prepare --version 6.7.2 \
--archive build-container/qt-sources/qt-everywhere-src-6.7.2.tar.xz \
--sha256 0aaea247db870193c260e8453ae692ca12abc1bd841faa1a6e6c99459968ca8a \
--source-url https://download.qt.io/archive/qt/6.7/6.7.2/single/qt-everywhere-src-6.7.2.tar.xz \
--provenance 'Arch Linux packages from the Arch Linux Archive snapshot 2024-07-15: qt6-base 6.7.2-1; qt6-charts, qt6-multimedia, qt6-svg 6.7.2-1; qt6-wayland 6.7.2-2. Upstream Qt source plus Arch PKGBUILDs and patches.' \
--output build-container/qt-licenses
在 --provenance 中寫明所用 Qt 的來源(包括 Arch 套件的版本,以及適用 Arch 的修補程式和建置步驟)。該內容會記錄在 QT-SOURCE.json 中,並顯示在「版本資訊」的「取得原始碼」裡。直接在 Arch Linux 上建置時,請在 build/qt-licenses 中準備與 pacman -Q qt6-base 所示版本相同的文件。
prepare不會覆寫既有的輸出目錄。重新準備時請指定新的輸出目錄。- 預設位置為建置目錄(容器為
build-container,直接建置為build)下的qt-licenses。使用會刪除建置目錄的--clean時,請在其外部產生文件,並透過環境變數SHOGIBOARDQ_QT_LICENSE_DIR指定。 - 不要將取得的 Qt 原始碼和文件單獨附加到發行中。方針詳情請參閱 Qt 文件與發行附件方針(日文)。
5. 製作 AppImage 與 ZIP
5.1 執行指令碼
用於發行的發行套件在較舊的 Arch Linux(2024 年 7 月 15 日的 Arch Linux Archive;glibc 2.39、Qt 6.7.2)容器中製作。
製作用於發行的發行套件時,請先把版本號改為發行當天的日期並提交(第 6 節)。
./scripts/build-linux-container.sh
- 第一次執行時會建立建置環境映像(
scripts/linux-container/Dockerfile,約 3GB)。從 Arch Linux Archive 下載較慢,需要數十分鐘。 - 在容器中以自己的使用者執行
scripts/build-linux.sh。建置目錄與平時的build分開,使用build-container,輸出放在儲存庫根目錄。 - 為當時的套件簽章的金鑰中,有些後來已過期。映像中以官方金鑰圈驗證簽章,但不要求金鑰目前受信任。
- 隨附的 OpenSSL、libcurl 以及 libcurl 使用的網路程式庫(nghttp2、nghttp3、ngtcp2、libssh2)因當時的版本缺少後來的修正,會替換為新版本。目前的 Arch 套件先以 SHA-256(
scripts/linux-container/packages.sha256)和簽章驗證後再安裝;目前套件會用到新版 glibc 函式的 curl,則在映像中以同一版本的 Arch PKGBUILD 重新建置。 - 升級版本時,在本機下載新的套件及其
.sig,以pacman-key --verify驗證簽章,然後改寫packages.sha256。curl 則在 Dockerfile 的CURL_PKGVER、CURL_PKGBUILD_SHA256中寫入 Arch 標籤處 PKGBUILD 的 SHA-256(標籤的簽章以curl-signing-key.asc中的金鑰驗證)。請先確認新套件需要的 glibc 版本(objdump -T中GLIBC_的最大值)不超過 2.38,超過的套件在映像中重新建置。修改scripts/linux-container/後,build-linux-container.sh會重新建立映像。
也可以直接在 Arch Linux 上製作。這樣製作的 AppImage 需要本機的 glibc 版本以上(2026 年 10 月時為 2.43)。
./scripts/build-linux.sh
兩個指令碼都可以使用以下選項:
| 選項 | 說明 |
|---|---|
--skip-appimage | 只建置,不製作 AppImage 與 ZIP |
--clean | 刪除建置目錄後再建置 |
--help | 顯示說明 |
| 環境變數 | 說明 |
|---|---|
SHOGIBOARDQ_BUILD_DIR | 建置目錄(預設為 build;容器中為 build-container) |
SHOGIBOARDQ_QT_LICENSE_DIR | 已準備的 Qt 文件的位置(預設為建置目錄下的 qt-licenses) |
APPIMAGE_EXTRACT_AND_RUN=1 | 在無法使用 FUSE 的環境中,解壓縮並執行 AppImage 格式的工具(容器中一律指定) |
DOCKER | 僅用於容器。docker 指令(例如 sudo docker) |
SHOGIBOARDQ_ARCH_SNAPSHOT | 僅用於容器。Arch Linux Archive 的日期(預設為 2024/07/15) |
build-linux.sh 依序執行以下處理(在容器中,於容器內執行同樣的處理):
- 檢查所需工具(cmake、python3;建議使用 ninja)
- 設定 CMake 並以 Release 方式建置(ShogiBoardQ 與 Hayanagi)
- 檢查執行檔、翻譯檔,以及 3〜13 手詰的題集(每種手數各 1 個檔案)
- 下載 linuxdeploy、其 Qt 外掛程式和 appimagetool(僅第一次;儲存在建置目錄中)。執行前與
build-linux.sh中記錄的 SHA-256 核對。它們都是上游會替換的 continuous 版本,被替換後核對不一致就會停止;此時先確認上游發行的 digest 和變更,再更新這些值 - 建立 AppDir 並產生 AppImage(執行所需的檔案,以及 Qt 與隨附程式庫的授權文件)
- 製作包含 AppImage、題集和 Hayanagi 的 ZIP
輸出為儲存庫根目錄下的 ShogiBoardQ-linux-x86_64.AppImage 和 ShogiBoardQ-linux.zip。工作目錄為建置目錄下的 AppDir 和 ShogiBoardQ-linux/。
5.2 AppImage 的內容
AppImage 中只收錄啟動與執行應用程式所需的檔案以及授權文件。
ShogiBoardQ-linux-x86_64.AppImage
└── (解壓縮後)
├── AppRun ← 只使用隨附的 Qt 和隨附的 OpenSSL 設定啟動
├── shogiboardq.desktop
├── shogiboardq.png
└── usr/
├── bin/
│ ├── ShogiBoardQ ← 執行檔
│ ├── qt.conf ← Qt 外掛程式的位置
│ └── ShogiBoardQ_{ja_JP,en,zh_CN,zh_TW}.qm ← 應用程式翻譯(4 種語言)
├── lib/ ← Qt 及其相依程式庫
├── plugins/
│ ├── platforms/libqxcb.so ← X11
│ ├── imageformats/libqsvg.so, libqjpeg.so, libqico.so
│ ├── iconengines/libqsvgicon.so
│ ├── platforminputcontexts/ ← 日文輸入(compose、fcitx5、ibus)
│ ├── platformthemes/libqxdgdesktopportal.so
│ ├── sqldrivers/libqsqlite.so ← 詰棋作答紀錄與分析快取
│ └── tls/libqopensslbackend.so ← 網路對局的 TLS 連線(OpenSSL)
└── share/
├── applications/, icons/
├── ShogiBoardQ/openssl.cnf ← 隨附的 OpenSSL 讀取的設定(為空,不讀取系統的設定)
└── licenses/ShogiBoardQ/
├── NOTICE*.md, SOURCE_CODE*.md, GPL-3.0.txt, LGPL-3.0.txt
├── QT-NOTICES.md, qt/ ← 隨附的 Qt 模組的文件
├── QT-SOURCE.json, BUILD.json ← Qt 的來源與建置時版本
└── THIRD-PARTY-NOTICES.md, third-party/ ← Qt 以外隨附程式庫的文件
- 不收錄題集、一般對局用的 Hayanagi、說明文件和題集的驗證紀錄(
validation_*.json)。應用程式不會從 AppImage 內部讀取它們,使用者也無法在其中選擇檔案,因此只作為 ZIP 中 AppImage 之外的檔案發行。練習詰棋用的 Hayanagi 已內建於應用程式中。 - 刪除 linuxdeploy 放入的 Qt 標準翻譯(
usr/translations/)。標準對話方塊的日文與中文翻譯已內建於執行檔,應用程式的翻譯從usr/bin/讀取。 - 不收錄用不到的外掛程式:OpenGL 整合(
xcbglintegrations)和 GIF 圖片。沒有使用 OpenGL 的介面元件。 tls外掛程式只收錄 OpenSSL 後端(libqopensslbackend.so),用於 CSA 網路對局的「TLS(加密)」連線。libssl 和 libcrypto 作為其相依程式庫一併收錄。應用程式不進行 HTTPS 等通訊。- Qt 的授權文件只收錄隨附的 Qt 模組(qtbase、qtcharts、qtmultimedia、qtsvg、qttranslations、qtwayland)及其參照的文件(
scripts/qt_licenses.py)。不收錄 WebEngine 等未發行模組的文件。 - 對於 Qt 以外的隨附程式庫(glib、PulseAudio、OpenSSL、fcitx5-qt 等約 50 個套件),
scripts/bundled_licenses.py透過 pacman 查找所屬套件,將授權原文放入third-party/,並在THIRD-PARTY-NOTICES.md中列出版本、授權和原始碼取得位置。兩者分別顯示在「版本資訊」的「Qt 中的第三方授權」和「隨附程式庫的授權」中。
5.3 ZIP 的內容
ZIP 中放入以下檔案。解壓縮 ZIP 後即可選擇題集和 Hayanagi。
| 來源檔案 | 在 ZIP 中的位置 |
|---|---|
ShogiBoardQ-linux-x86_64.AppImage | ShogiBoardQ-linux/ |
resources/platform/README-linux.md | ShogiBoardQ-linux/README.md |
LICENSE | ShogiBoardQ-linux/LICENSE |
build/Hayanagi/hayanagi | ShogiBoardQ-linux/Hayanagi/hayanagi |
build/Hayanagi/book/hayanagi_book.db | ShogiBoardQ-linux/Hayanagi/book/hayanagi_book.db |
Hayanagi/README.md | ShogiBoardQ-linux/Hayanagi/README.md |
data/tsumeshogi/tsume_{3,5,7,9,11,13}ply_*.txt, data/tsumeshogi/README.md | ShogiBoardQ-linux/data/tsumeshogi/ |
ShogiBoardQ-linux.zip
└── ShogiBoardQ-linux/
├── ShogiBoardQ-linux-x86_64.AppImage
├── README.md
├── LICENSE
├── Hayanagi/
│ ├── hayanagi
│ ├── book/hayanagi_book.db ← Hayanagi 的定跡
│ └── README.md
└── data/tsumeshogi/
├── tsume_{3,5,7,9,11,13}ply_1000_20261001.txt ← 6 個檔案(各 1,000 題)
└── README.md
- 題集原樣複製。其雜湊值與應用程式內建的稽核紀錄一致,因此讀取時可以沿用已驗證的手數和手順。
data/tsumeshogi/中每種手數只放 1 個題集檔案(儲存庫只追蹤目前的 20261001 版)。同一手數有多個檔案時,指令碼會報錯並停止。- Hayanagi 經
strip後放入。定跡檔案hayanagi_book.db由建置複製到build/Hayanagi/book/,放入Hayanagi/book/;Hayanagi 從執行檔旁邊的book/讀取定跡。ZIP 中 AppImage 之外不放docs/、validation_*.json和licenses/,授權文件位於 AppImage 內。
使用者依以下方式啟動。在練習詰棋的「開啟題集…」中選擇 data/tsumeshogi/ 中的題集;登錄一般對局用的引擎時選擇 Hayanagi/hayanagi。
unzip ShogiBoardQ-linux.zip
cd ShogiBoardQ-linux
chmod +x ShogiBoardQ-linux-x86_64.AppImage Hayanagi/hayanagi
./ShogiBoardQ-linux-x86_64.AppImage
5.4 執行確認
# 啟動
./ShogiBoardQ-linux-x86_64.AppImage
# 解壓縮並確認內容(不含 Hayanagi 和 Qt 標準翻譯)
./ShogiBoardQ-linux-x86_64.AppImage --appimage-extract
ls squashfs-root/usr/bin/ squashfs-root/usr/plugins/*/
ls squashfs-root/usr/share/licenses/ShogiBoardQ/THIRD-PARTY-NOTICES.md
test ! -e squashfs-root/usr/bin/hayanagi && test ! -e squashfs-root/usr/translations && echo OK
# 所需的 glibc 版本
find squashfs-root/usr -type f \( -name '*.so*' -o -name ShogiBoardQ \) -exec objdump -T {} + 2>/dev/null \
| grep -o 'GLIBC_[0-9.]*' | sort -uV | tail -1
# ZIP 中的 Hayanagi 能作為 USI 引擎回應
unzip -o -q ShogiBoardQ-linux.zip -d /tmp/zipcheck
printf 'usi\nisready\nquit\n' | /tmp/zipcheck/ShogiBoardQ-linux/Hayanagi/hayanagi
# ZIP 由預期的 12 個檔案組成且沒有損毀
python3 -m zipfile -l ShogiBoardQ-linux.zip
python3 -m zipfile -t ShogiBoardQ-linux.zip
在容器中建置時,所需的 glibc 版本應為 GLIBC_2.38 以下。AppImage 使用系統中的 OpenGL(libEGL、libOpenGL)、fontconfig、HarfBuzz 和 wayland-client(一般桌面環境中已安裝)。
請在
LD_LIBRARY_PATH不包含 Qt 的 lib 目錄的環境中確認,否則會使用系統中的程式庫,無法發現遺漏的檔案。如有可能,也請在 Ubuntu 24.04 等其他環境中確認日文、英文、中文的切換、SVG 棋子、棋子音效、詰棋紀錄的儲存,以及「版本資訊」中的授權清單。
6. 在 GitHub Releases 上發行
版本號只在發行當天改為當天的日期。製作發行套件之前,修改 CMakeLists.txt 中的 APP_VERSION 並提交,再從該提交製作發行套件。同一天第二次以後的發行,像 2026.10.07.1 這樣加上第四個數字。標籤(不加 v)和發行名稱使用這個版本號。詳情請參閱版本號與發行的規則(日文)。
Linux 只附加 ShogiBoardQ-linux.zip,檔名不隨版本改變。
git tag -a 2026.10.07 -m "ShogiBoardQ 2026.10.07"
git push origin main 2026.10.07
gh release create 2026.10.07 --title "ShogiBoardQ 2026.10.07" \
--notes-file RELEASE_NOTES.md ShogiBoardQ-linux.zip
如果已經先發行了其他作業系統的發行套件,則新增到既有的發行中:
gh release upload 2026.10.07 ShogiBoardQ-linux.zip
- 以檔名指定要附加的檔案。不要上傳整個工作目錄或
build/中的檔案。 - 不要單獨附加 Qt 原始碼、
QT-SOURCE.json、檢查碼或 SBOM 等。授權文件和原始碼的取得方式位於 AppImage 內。 - 發行後請確認附件清單。GitHub 自動顯示的 Source code 連結與手動附加的檔案是分開的。
在發行說明中寫明 Linux 版的啟動方式和執行條件(所需的 glibc 版本等)。
### 在 Linux 上啟動
1. 下載並解壓縮 ShogiBoardQ-linux.zip
2. chmod +x ShogiBoardQ-linux-x86_64.AppImage Hayanagi/hayanagi
3. ./ShogiBoardQ-linux-x86_64.AppImage
執行條件:x86_64 的 Linux,glibc 2.38 以上、GCC 14 以上的 libstdc++(Ubuntu 24.04 以上、Debian 13、Fedora 40 以上等)
沒有 FUSE 時,可加上 --appimage-extract-and-run 啟動。
儲存庫中的 release.yml 會在推送以
v開頭的標籤或手動執行時建置三種作業系統,但其 Linux 工作在 Ubuntu 上執行。在隨附程式庫授權文件的收集支援 Ubuntu 之前,該工作無法製作 Linux 發行套件,因此目前以手動方式附加在 Arch Linux 容器中製作的 ZIP。
7. 疑難排解
找不到 Qt
Could not find a package configuration file provided by "Qt6"
確認已安裝 Qt 6.7 以上和所需模組。使用 Qt Online Installer 的 Qt 時,以 -DCMAKE_PREFIX_PATH 指定。更換 Qt 或 CMake 產生器後,請在新的 build 目錄中重新開始。
缺少 Hayanagi 的原始碼
在儲存庫根目錄執行 git submodule update --init --recursive。
因存在多個題集而停止
==> ERROR: 5手詰の問題集が複数あります: data/tsumeshogi/tsume_5ply_1000_20260926.txt data/tsumeshogi/tsume_5ply_1000_20261001.txt
data/tsumeshogi/ 中殘留了舊版題集(訊息表示同一手數找到了多個題集)。請刪除不用的版本,使每種手數只剩 1 個檔案。
Qt 文件的驗證失敗
Qt license preparation failed: Qt version mismatch: build=6.7.2, source=6.11.2
Qt license preparation failed: Qt notices are missing. See docs/dev/qt-licensing.md; set SHOGIBOARDQ_QT_LICENSE_DIR to prepared matching notices.
請準備與建置所用 Qt 同版本的文件(第 4 節):容器中為 Qt 6.7.2,直接在 Arch Linux 上建置時為 pacman -Q qt6-base 所示的版本。不要忽略失敗而繼續發行。
收集隨附程式庫的文件時停止
Bundled library notices failed: Bundled library notices need pacman (Arch Linux); other distributions are not supported yet
Bundled library notices failed: Cannot find the system file of lib/libQt6Core.so.6
Bundled library notices failed: No license text for bundled package fcitx5-qt (GPL)
- 請在 Arch Linux 上使用 Arch 的 Qt 套件製作發行套件。若 AppImage 中含有不屬於 pacman 套件的程式庫(例如透過 Qt Online Installer 安裝的 Qt),就無法確定其所屬套件,指令碼會停止。
No license text for …表示有套件找不到授權原文。較舊的套件庫中,授權欄位可能不是 SPDX 運算式,請在scripts/bundled_licenses.py的LICENSE_OVERRIDES中加入上游的寫法。套件中沒有的文件(例如附有實際著作權聲明的原文)放在scripts/license-texts/<套件名稱>/中。
無法使用 docker
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
將使用者加入 docker 群組並重新登入(sudo usermod -aG docker $USER),或指定環境變數 DOCKER="sudo docker"。
linuxdeploy 無法啟動
dlopen(): error loading libfuse.so.2
安裝 fuse2,或以 APPIMAGE_EXTRACT_AND_RUN=1 ./scripts/build-linux.sh 執行。
AppImage 無法啟動(FUSE)
AppImages require FUSE to run.
安裝 FUSE 2,或加上 --appimage-extract-and-run 啟動。
./ShogiBoardQ-linux-x86_64.AppImage --appimage-extract-and-run
glibc 版本不足
version `GLIBC_2.38' not found
執行系統的 glibc 比建置環境舊。用於發行的發行套件請在容器中建置(5.1)。仍然不足時,請在 glibc 較新的發行版上使用(參閱前提條件中關於 glibc 的說明)。
找不到系統程式庫
error while loading shared libraries: libOpenGL.so.0: cannot open shared object file: No such file or directory
系統中缺少 AppImage 不隨附的程式庫(OpenGL、fontconfig、HarfBuzz、wayland-client)。Ubuntu / Debian 的範例:
sudo apt install libegl1 libopengl0 libfontconfig1 libharfbuzz0b libwayland-client0
無法載入 xcb 平台外掛程式
qt.qpa.plugin: Could not load the Qt platform plugin "xcb"
缺少 X11 相關的程式庫。以下依序為 Ubuntu / Debian、Fedora、Arch Linux 的範例:
sudo apt install libxcb-cursor0 libxcb-xinerama0
sudo dnf install xcb-util-cursor xcb-util-wm xcb-util-keysyms
sudo pacman -S xcb-util-cursor xcb-util-wm xcb-util-keysyms
無法輸入日文
AppImage 只隨附 X11 平台外掛程式,因此在 Wayland 桌面上也會透過 XWayland 執行。未設定環境變數 QT_IM_MODULE 時,不會選用日文輸入法外掛程式。使用 fcitx5 時請加上 QT_IM_MODULE=fcitx,使用 IBus 時請加上 QT_IM_MODULE=ibus 啟動。
QT_IM_MODULE=fcitx ./ShogiBoardQ-linux-x86_64.AppImage
無法載入翻譯
確認 .qm 檔案位於執行檔所在的 usr/bin/ 中。
./ShogiBoardQ-linux-x86_64.AppImage --appimage-extract
ls squashfs-root/usr/bin/*.qm