最終更新:

genpack/genpack-progs パッケージ

概要

genpack/genpack-progs は、genpack イメージのビルドプロセスで使用されるサポートツール群をまとめたパッケージである。すべての genpack プロファイルで暗黙的に含まれ、イメージビルド時のファイル収集、依存関係解決、メタデータ生成、外部リソースのダウンロードなどを担う。

各ツールはかつて外部リポジトリ (genpack-progs) から取得していたが、現在は ebuild の files/ ディレクトリにインライン化されている。

インストールされるコマンド一覧

ビルドコアツール

イメージビルドの中核を担い、genpack 本体から直接呼び出されるツール群。

コマンド説明
list-pkg-filesPortage パッケージの依存関係を再帰的に解決し、イメージに含めるファイル一覧を生成する
exec-package-scripts-and-generate-metadataパッケージ固有のポストインストールスクリプトを実行し、/.genpack/ 以下にメタデータを生成する
execute-artifact-build-scriptsアーティファクト固有のビルドスクリプト (/build, /build.d/) を実行する
recursive-touchELF バイナリとスクリプトの依存関係を再帰的に解析し、atime を更新する。initramfs 用ファイルリストの出力にも使用
rebuild-kernel-modules-if-necessaryカーネルモジュールの再ビルドが必要な場合に emerge @module-rebuild を実行する

ダウンロードユーティリティ

ビルド中に外部リソースを取得するためのツール群。

コマンド説明
downloadURL からファイルをダウンロードし標準出力に出力する。/var/cache/download にキャッシュを保持
get-rpm-download-urlYUM/DNF リポジトリから RPM パッケージのダウンロード URL を解決する
get-github-download-urlGitHub リリースアセットのダウンロード URL を取得する

メンテナンスツール

ビルド環境の保守に使用するツール群。

コマンド説明
unmerge-masked-packagesマスクされたパッケージを検出・アンマージし、@world を再ビルドする
remove-binpkgPortage バイナリパッケージをアトム指定で削除する。デフォルトは dry-run
findelfディレクトリツリー内の ELF バイナリを検索する
with-mysql一時的な MySQL サーバーを起動してコマンドを実行し、終了後にシャットダウンする

ランタイム依存パッケージ

パッケージ説明
sys-apps/util-linux基本的なシステムユーティリティ
app-portage/gentoolkitPortage 管理ツール (equery 等)
dev-util/pkgdevGentoo パッケージ開発ツール
app-arch/zipZIP アーカイバ
dev-debug/straceシステムコールトレーサ
net-analyzer/tcpdumpネットワークパケットキャプチャ
app-editors/nanoテキストエディタ
app-editors/vimテキストエディタ
net-misc/netkit-telnetdTelnet デーモン
app-misc/figletASCII アートテキスト生成
sys-fs/squashfs-tools[lz4,lzma,lzo,xattr,zstd]SquashFS イメージの作成・展開
app-admin/eclean-kernel古いカーネルの自動削除

各コマンドの詳細

list-pkg-files

genpack イメージに含めるファイルを決定するコアツール。Portage の Python API を使用して @profile@genpack-runtime(およびオプションで @genpack-devel)パッケージセットの依存関係を再帰的に解決し、対象ファイルの一覧を出力する。

exec-package-scripts-and-generate-metadata

list-pkg-files が保存した依存関係データを読み込み、パッケージごとのポストインストールスクリプト (/usr/lib/genpack/package-scripts/<pkgname>/) を実行する。その後、/.genpack/ ディレクトリに以下のメタデータファイルを生成する:

execute-artifact-build-scripts

アーティファクトのルートにある /build スクリプトおよび /build.d/ ディレクトリ配下のスクリプトを実行する。

recursive-touch

ELF バイナリのヘッダ(マジックナンバー \x7fELF)を検査し、lddtree を使って共有ライブラリの依存関係を再帰的に解決する。スクリプトの場合はシバン行からインタプリタを検出する。

download

curl をバックエンドとして URL からファイルをダウンロードする。ダウンロード結果は /var/cache/download に URL の SHA1 ハッシュをキーとしてキャッシュされ、再ダウンロード時には HTTP の条件付きリクエスト (-z フラグ) で変更の有無を確認する。

get-rpm-download-url

YUM/DNF リポジトリの repomd.xml を解析して primary.xml メタデータを取得し、指定パッケージの最新版ダウンロード URL を返す。gzip、bz2、xz 圧縮に対応し、リポジトリメタデータのキャッシュ(デフォルト TTL: 1時間)を保持する。

get-github-download-url

GitHub API を使用して最新リリースのアセットを取得し、正規表現パターンに一致するアセットのダウンロード URL を返す。特殊キーワード @tarball(ソース tarball)と @zipball(ソース zip)にも対応する。

with-mysql

一時的な MySQL サーバーを起動し、指定されたコマンドを実行した後にシャットダウンするラッパーツール。初回起動時にはデータディレクトリの初期化とタイムゾーンデータのロードを行う。ネットワーク接続は無効化され、ローカルソケットのみで通信する。ビルド時のデータベースマイグレーション実行に使用される。

genpack-ignore eclass

genpack-progs の ebuild は genpack-ignore eclass を継承している。これにより、list-pkg-files がイメージに含めるファイルを収集する際にこのパッケージ自体はスキップされる。ビルドツールはビルド環境(lower レイヤー)で使用されるが、最終的なランタイムイメージ(upper レイヤー)には含まれない。

ソースリファレンス

更新履歴