Files
docview/docs/LINUX-DEVELOPMENT-PACKAGE.md
T
2026-09-21 13:41:40 +09:00

8.7 KiB

Linux開発版のローカルパッケージ

この手順は、現在の Arch Linux x86_64・Qt 6.11.2 環境向けの開発版を tar.gzにまとめる。公開・アップロード・署名は行わない。Ubuntu 24.04、Windows、 任意Linuxでの互換性やクリーンインストールの合格を意味しない。

形式と対象範囲

候補 この段階での判断
tar.gz + システム依存 ローカル開発版に採用。展開先を移して検証でき、元に戻す操作も明確。配布先のパッケージ管理やABIを変更しない
Ubuntu向けdeb 初期対象の製品版候補。Ubuntu上で依存解決・インストール/削除の検証が必要なため未採用
AppImage等のランタイム同梱方式 Qt/WebEngine/GPU・sandbox・ライセンス集合を含む別検証が必要。今回の開発版には採用しない

製品版の初期対象ごとの形式決定は未完了。Windowsの既存配置コードをこの判断で変更しない。

同梱するランタイムは本体、PDF/アーカイブワーカー、固定版の独立PDFium共有ライブラリ。 Qt、WebEngine helper/資源/翻訳/QML/plugin、libqpdf、libzip、libseccomp、 Fontconfig等はシステムから読み込む。Qt共有ライブラリとpluginの配置は別の依存条件である。 QtのLinux配布資料

toml++はシステムパッケージのヘッダーから実行ファイルへ組み込むため、 実行時だけのシステム依存とは区別する。MIT本文は同梱済みである。 実際の含有範囲とローカルビルド由来は依存物の証跡台帳を参照する。

third-party/dependency-manifest.jsonに実際のArchパッケージ版、共有ライブラリや Qt資源のハッシュ、実行ファイルが要求するGLIBC/GLIBCXX/CXXABIのsymbol versionを記録する。 Archのrolling-release ABIに依存し、単に同じCPUやQtのmajor版であれば動くという主張はしない。 X11/Wayland、IME、GPU driver、フォント、Landlock ABI 3以上とseccompが別途必要。 隔離できない環境ではワーカーを起動せず、sandboxを無効にして実行しない。

生成

Python 3.11以上、CMake、Archのpacmanデータベース、ldd、readelf、 /usr/lib/qt6/bin/qtpathsとビルド済み実行ファイルを必要とする。 自分でビルドした信頼できる実行ファイルだけを入力にする。 初回はREADMEのビルド手順に従い、依存物と固定版PDFiumを準備する。

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
python3 tools/package_linux_development.py --build-dir build --output build/package-local

Pythonが見つかったLinuxビルドにはlinux-development-package targetも登録する。 その既定出力先はbuild/linux-development-packageで、必要ならCMakeの DOCVIEW_LINUX_PACKAGE_OUTPUTで変更する。BUILD_TESTING時は軽量のlinux_package試験も登録する。

生成スクリプトは一時領域にcmake --installし、実依存を調査して告知を収集する。 既に存在する出力アーカイブは上書きしない。別の出力ディレクトリーを指定して再生成する。 既存の新規install treeを使う場合は--build-dirの代わりに--prefixを指定できる。 利用者の設定・履歴・文書や、system library/fontの実体はパッケージに含めない。 LinuxのinstallにはPDFium providerの15告知に加えて、固定ソースから補った libc++/libc++abiの2告知と出典metadataを含める。版・commit・ライブラリー・告知の ハッシュをconfigure時とpackage生成時に照合する。PDFiumを更新した場合は再調査が必要。 追加の根拠はPDFiumのソース対応記録を参照する。 Linux packagerはさらに、QtWebEngineの実DataPack内13資源から得た7種類の完全な告知本文と 出典metadataを収録する。固定Qt版・Arch package版・DataPackのpath/hash・本文のsize/hashを 現在のsystem inventoryへ照合し、不明な版・variantや欠落・改変は新たなレビューまで拒否する。 本文とmetadataだけをコピーし、QtのruntimeとDataPackはsystem依存のままとする。 これは全Chromium告知の完成ではない。根拠と比較範囲は 資源内告知の抽出記録にある。

  • docview-0.1.0-arch-x86_64-development.tar.gz: ローカル開発版。
  • 同名.json: アーカイブSHA-256、圧縮後サイズ、展開後ファイルサイズ合計、 ファイル数、本体/workerハッシュ、含めていないsystem runtime候補の合計サイズ。
  • アーカイブ内share/doc/docview/package-manifest.json: 全payloadの相対パス・mode・ サイズ・SHA-256。自己ハッシュは含めない。
  • 同third-party/: 依存版/出典/対応ソースの収集状況・NOTICE・収集したlicense本文。

順序、uid/gid、所有者名、mode、mtimeとgzip headerを固定する。 SOURCE_DATE_EPOCHは未指定時0。必要なら--epochで指定できる。 同じinstall内容・ホスト依存/告知・スクリプト・Python/zlib・epochから同じバイト列を得る。 コンパイラーや実行ファイル自体の再現可能ビルドを証明する手順ではない。 生成時に展開して全hashを確認し、その展開物から再圧縮したhashが一致することも要求する。

展開、起動、削除

mkdir -p /tmp/docview-local-check
tar -xzf build/package-local/docview-0.1.0-arch-x86_64-development.tar.gz -C /tmp/docview-local-check
/tmp/docview-local-check/docview-0.1.0-arch-x86_64-development/bin/docview /absolute/path/to/book.pdf

PDFiumの検索先はworkerからの相対RPATHを使う。LD_LIBRARY_PATHの追加は不要。 実行すると通常は利用者のXDG設定・履歴を使う。試験は次の専用スクリプトで行い、 一時XDG領域へ隔離する。 試験結果を区別するため、--outputには毎回新しいディレクトリーを指定する。

python3 tests/test_linux_package.py -v
xvfb-run -a -s '-screen 0 1100x760x24' \
  env QT_QPA_PLATFORM=xcb QT_QUICK_BACKEND=software QTWEBENGINE_CHROMIUM_FLAGS=--disable-gpu \
  python3 tests/smoke_linux_package.py \
  --archive build/package-local/docview-0.1.0-arch-x86_64-development.tar.gz \
  --output tests/results/linux-development-package/new-run

後者は全payloadを検証して空の一時ディレクトリーへ展開し、6条件の本番GUI smokeを実行する。 元のinstall pathと異なる位置からPDF/HTML/ZIP/EPUBを開く。Chromiumとworkerのsandboxは有効。 成功時も失敗時も一時展開先を回収する。同一開発機での検証なのでclean-OS試験ではない。 同じ出力先を再利用した場合も、開始時に前回のresults.jsonとpackage-smoke.jsonを除去する。 途中失敗では成功集計を残さず、古い画像だけでは当該実行の成功を示さない。

この配置はpackage managerやsystem directoryに登録しない。不要になった展開ディレクトリーを 削除すれば実行ファイルの配置を取り除ける。通常起動で保存した設定・履歴は別に残る。 原本文書を削除対象に含めない。

告知と未完了事項

DocView自身の公開ライセンスは未指定。第三者のlicense本文やpackage labelsを収録しても、 DocViewのライセンスを選択したことにはならない。主要4つのArch recipeとpatch、PDFium providerと固定依存ソースの対応は別の調査記録に 保存した。各依存の対応ソース一式・完全なbuild materialはパッケージに含めず、Qt WebEngineの build固有の全Chromium告知も未取得。今回の7本文は有限の部分告知集として記録し、 completeChromiumNotices = falseを維持する。manifestのsource.status = not-collectedは パッケージ側の完全なソース収集が未完了であることを表す。ソースURLだけを履行済みの証拠にしない。

今回計測する圧縮サイズはWebEngine込みの自己完結した配布サイズではない。 system runtime候補の合計は必要ディスク量の参考であり、共有・既存install・任意追加providerを 含むため、追加インストール容量や製品配布サイズと同一視しない。 G-DISTRIBUTION/T-S05の正式合格には、対象OSの実配布・依存/告知/対応ソース整理が引き続き必要。