はじめに
オープンソースでは要求に応じて、ソースコードを開示する必要がある。 Yocto ProjectではBitBakeで作成されたOSイメージに含まれるすべてのOSSライセンスのパッケージについて ソースコードをアーカイブする機能としてアーカイバを提供している。
存在は知っていたがきちんと調べたことがなかったので調査する。今回は5.0(scarthgap)を使用。
使用方法
local.confに下記を追加する。
INHERIT += "archiver" ARCHIVER_MODE[src] = "original"
DEPLOY_DIR_SRC(build/tmp/deploy/sources)にファイルが展開される。
ARCHIVER_MODE
アーカイバ機能の基本動作はARCIVER_MODE変数のsrc
変数フラグにより変わる。
ARCHIVER_MODE[src]
ARCHIVER_MODE[src]には以下の値が設定可能となっている。
値 | 機能 | 備考 |
---|---|---|
original | オリジナルのソースコード | |
patched | パッチ適用済みのソースコード | デフォルト |
configured | configure実行済みのコースコード | |
mirror | ミラーデータ |
original
do_unpackした状態のソースコードとパッチファイルが保存される。
systemdの例は以下のようになる。
00-create-volatile.conf 0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch 0003-timedated-Respond-on-org.freedesktop.timedate1.SetNT.patch 0008-implment-systemd-sysv-install-for-OE.patch 99-default.preset init series systemd-1_255.21-r0.tar.xz systemd-pager.sh touchscreen.rules
patched
do_patch実行後のソースコードの状態がtar.xz形式で保存される。 systemdの例では「systemd-1_255.21-r0-patched.tar.xz」となる。
configured
do_configure実行後のソースコードの状態がtar.xz形式で保存される。 systemdの例では「systemd-1_255.21-r0-configured.tar.xz」となる。
mirror
ミラーディレクトリ作成用のアーカイブが作成される。
BB_GENERATE_MIRROR_TARBALLS = "1"
が必要となるので注意が必要。
ARCHIVER_MODE[diff]
ARCHIVER_MODE[diff]に"1"を設定すると、do_unpack直後のソースとdo_patch後のソースのすべての差分が1つのパッチファイルとして保存される。 systemdの場合は「systemd-1_255.21-r0-diff.gz」となる。
ARCHIVER_MODE[diff-exclude]
この時に下記のように設定すると、パッチファイルを作成する際に除外するファイルを設定することができる。
ARCHIVER_MODE[diff-exclude] ?= ".pc autom4te.cache patches"
ARCHIVER_MODE[dumpdata]
ARCHIVER_MODE[dumpdata]に"1"を設定すると、bitbake -e
で出力されるような環境変数のダンプデータのアーカイブが保存される。
systemdの場合は「systemd-1_255.21-r0-showdata.dump」となる。
# # $ABIEXTENSION # [no history recorded] # # "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '${ABIEXTENSION_64}', '${ABIEXTENSION_32}', d)}" ABIEXTENSION="" # # $ABIEXTENSION:class-crosssdk # [no history recorded] # # "" ABIEXTENSION:class-crosssdk="" # # $ABIEXTENSION:class-nativesdk # [no history recorded] # # ""
ARCHIVER_MODE[recipe]
ARCHIVER_MODE[recipe]を"1"に設定すると、レシピ(.bb,.bbappend)や参照される.incがtar.xz形式で保存される。 systemdの場合は「systemd-1_255.21-r0-recipe.tar.xz」となる。
ARCHIVER_MODE[srpm]
ARCHIVER_MODE[srpm]を"1"に設定すると、ソースパッケージ(.src.rpm)が保存される。 systemdの場合は「systemd-255.21-r0.src.rpm」となる。
PACKAGE_CLASSESが"package_rpm"以外の場合はエラーとなる。
ARCHIVER_MODE[mirror]
ARCHIVER_MODE[mirror]を設定することで、ミラーデータ保存時のディレクトリ構造を指定できる。
設定できる値は下記の通り。
- split(default)
- combined
ARCHIVER_MODE[mirror] = "split"
単一のミラーディレクトリを作成するには、手動での修正が必要になる場合があるが、 ソースの重複の確認など、より柔軟に対応することができる。
ARCHIVER_MODE[mirror] = "combined"
すべてのソースが単一のディレクトリに保存される。 このためミラーディレクトリとしてそのまま使用することができる。 ただし、重複するソースがあった場合には無視される。
ミラーディレクトリを作るためのlocal.confの設定例を以下に示す。
INHERIT += "archiver" ARCHIVER_MODE[src] = "mirror" ARCHIVER_MODE[mirror] = "combined" BB_GENERATE_MIRROR_TARBALLS = "1"
${DEPLOY_DIR_SRC}/mirror
がミラーディレクトリとして使用可能となる。
ARCHIVER_MODE[compression]
アーカイブの圧縮形式を指定することができる。 以下の値が指定可能となっている。
- xz(デフォルト)
- gz
- bz2
まとめ
今回はアーカイバの機能を調査した。
以下のような形式でソースコードのアーカイブが作成可能であることがわかった。
付加機能としてミラーディレクトリ作成のためのアーカイブも作成可能。
また、オプションで以下のものもソースコードのアーカイブと同時に作成できる。
かなり多機能であることがわかった。