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の実配布・依存/告知/対応ソース整理が引き続き必要。