# 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配布資料](https://doc.qt.io/qt-6/linux-deployment.html) toml++はシステムパッケージのヘッダーから実行ファイルへ組み込むため、 実行時だけのシステム依存とは区別する。MIT本文は同梱済みである。 実際の含有範囲とローカルビルド由来は[依存物の証跡台帳](DEPENDENCY-PROVENANCE.md)を参照する。 `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のビルド手順](../README.md#ビルドと起動)に従い、依存物と固定版PDFiumを準備する。 ```sh 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のソース対応記録](PDFIUM-SOURCE-CORRESPONDENCE.md)を参照する。 Linux packagerはさらに、QtWebEngineの実DataPack内13資源から得た7種類の完全な告知本文と 出典metadataを収録する。固定Qt版・Arch package版・DataPackのpath/hash・本文のsize/hashを 現在のsystem inventoryへ照合し、不明な版・variantや欠落・改変は新たなレビューまで拒否する。 本文とmetadataだけをコピーし、QtのruntimeとDataPackはsystem依存のままとする。 これは全Chromium告知の完成ではない。根拠と比較範囲は [資源内告知の抽出記録](../tests/results/source-correspondence/qt-embedded-notices/README.md)にある。 - `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が一致することも要求する。 ## 展開、起動、削除 ```sh 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`には毎回新しいディレクトリーを指定する。 ```sh 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と固定依存ソースの対応は[別の調査記録](../tests/results/source-correspondence/README.md)に 保存した。各依存の対応ソース一式・完全な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の実配布・依存/告知/対応ソース整理が引き続き必要。