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