はじめに
bitbake-layersコマンドの便利なサブコマンドを見つけた(認識した)。
レイヤ間の依存関係
bitbakeで取り扱うレイヤではlayer.conf
に下記のようにLAYERDEPENDS
を記述することで、依存関係を定義することができる。
LAYERDEPENDS_gnome-layer = "core openembedded-layer networking-layer"
しかし、bitbake-layers add-layer
をする場合、依存関係の順番を間違えると面倒なことになる。
$ bitbake-layers add-layer ../poky/meta-openembedded/meta-gnome
一見問題なく追加できるが、次回以降bitbake-layersのコマンドを実行すると下記のようにエラーが発生する。
$ bitbake-layers show-layers NOTE: Starting bitbake server... Traceback (most recent call last): File "/home/mickey/work/yocto/x86-dunfell/layers/poky/bitbake/bin/bitbake-layers", line 95, in <module> ret = main() File "/home/mickey/work/yocto/x86-dunfell/layers/poky/bitbake/bin/bitbake-layers", line 63, in main tinfoil.prepare(True) File "/home/mickey/work/yocto/x86-dunfell/layers/poky/bitbake/lib/bb/tinfoil.py", line 414, in prepare self.run_command('parseConfiguration') File "/home/mickey/work/yocto/x86-dunfell/layers/poky/bitbake/lib/bb/tinfoil.py", line 470, in run_command raise TinfoilCommandFailed(result[1]) bb.tinfoil.TinfoilCommandFailed: Traceback (most recent call last): File "/home/mickey/work/yocto/x86-dunfell/layers/poky/bitbake/lib/bb/command.py", line 74, in runCommand result = command_method(self, commandline) File "/home/mickey/work/yocto/x86-dunfell/layers/poky/bitbake/lib/bb/command.py", line 275, in parseConfiguration command.cooker.parseConfiguration() File "/home/mickey/work/yocto/x86-dunfell/layers/poky/bitbake/lib/bb/cooker.py", line 433, in parseConfiguration self.handleCollections(self.data.getVar("BBFILE_COLLECTIONS")) File "/home/mickey/work/yocto/x86-dunfell/layers/poky/bitbake/lib/bb/cooker.py", line 1225, in handleCollections raise CollectionError("Errors during parsing layer configuration") bb.cooker.CollectionError: Errors during parsing layer configuration
これはmeta-gnomeが依存しているレイヤがないため発生するのだが、この状態になるとテキストエディタなどでbblayers.conf
を修正する必要がある。
meta-gnomeに記載されている依存関係は下記。
- core
- openembedded-layer
- networking-layer
しかしここで厄介なのが、networking-layerがmeta-pythonに依存しているためそちらも記述しなければならない。 このようなネストした依存関係がある場合には、1つずつ追加していくのが面倒となってくる。
bitbake-layers layerindex-fetch
レイヤ間の依存関係をプログラム的にチェックできるのであれば、追加する前にエラーにするか、自動的に追加するなどしてほしいと思っていた。
しかし、layerindex-fetch
サブコマンドを使用すると自動的に依存関係を解決して、必要であればレイヤのダウンロードまでおこなってくれる。
$ bitbake-layers layerindex-fetch meta-gnome NOTE: Starting bitbake server... Loading https://layers.openembedded.org/layerindex/api/;branch=dunfell... Layer Git repository (branch) Subdirectory ============================================================================================================================= local:HEAD:openembedded-core git://git.yoctoproject.org/poky.git (dunfell) meta required by: meta-gnome meta-networking meta-python meta-oe layers.openembedded.org:dunfell:meta-oe git://git.openembedded.org/meta-openembedded (dunfell) meta-oe required by: meta-python meta-networking meta-gnome layers.openembedded.org:dunfell:meta-python git://git.openembedded.org/meta-openembedded (dunfell) meta-python required by: meta-networking layers.openembedded.org:dunfell:meta-networking git://git.openembedded.org/meta-openembedded (dunfell) meta-networking required by: meta-gnome layers.openembedded.org:dunfell:meta-gnome git://git.openembedded.org/meta-openembedded (dunfell) meta-gnome Cloning into '/home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded'... remote: Counting objects: 148262, done. remote: Compressing objects: 100% (49118/49118), done. remote: Total 148262 (delta 92673), reused 147741 (delta 92348) Receiving objects: 100% (148262/148262), 39.27 MiB | 3.67 MiB/s, done. Resolving deltas: 100% (92673/92673), done. Adding layer "meta-oe" (/home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded/meta-oe) to conf/bblayers.conf Adding layer "meta-python" (/home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded/meta-python) to conf/bblayers.conf Adding layer "meta-networking" (/home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded/meta-networking) to conf/bblayers.conf Adding layer "meta-gnome" (/home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded/meta-gnome) to conf/bblayers.conf
レイヤの設定状況を確認する。
$ bitbake-layers show-layers NOTE: Starting bitbake server... layer path priority ========================================================================== meta /home/mickey/work/yocto/x86-dunfell/layers/poky/meta 5 meta-poky /home/mickey/work/yocto/x86-dunfell/layers/poky/meta-poky 5 meta-yocto-bsp /home/mickey/work/yocto/x86-dunfell/layers/poky/meta-yocto-bsp 5 meta-oe /home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded/meta-oe 6 meta-python /home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded/meta-python 7 meta-networking /home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded/meta-networking 5 meta-gnome /home/mickey/work/yocto/x86-dunfell/layers/poky/meta-openembedded/meta-gnome 7
meta-gnomeが依存する全てのレイヤが追加されている。
自動的にダウンロードできるレイヤについて
レイヤのダウロードにはhttps://layers.openembedded.org/layerindex/api/
というWeb APIを使用している。
そのため、OpenEmbedded Layer Indexに登録されているもののみが対象となっていると推測される。
既存の設定について
layerindex-fetch
では既に追加してあるレイヤに関しては削除されないため、ローカルで開発中のレイヤなどがBBLAYERS
に既にある場合でも問題なく使用することができる。
ブランチ
下記のようにすることで、ダウンロードする際に使用するブランチを指定することができる。
$ bitbake-layers layerindex-fetch meta-gnome -b dunfell
ブランチを指定しない場合は、現在チェックアウトしているpoky
のブランチがデフォルトとなる。
例えば、pokyがgatesgarthである時にブランチを指定せずにlayerindex-fetchを実行するとgatesgarthブランチが選択される。
また、レイヤ側がmasterブランチしか持っていない場合などに、pokyがdunfellだった場合ではデフォルト指定ではエラーになる。
$ bitbake-layers layerindex-fetch meta-efi-secure-boot NOTE: Starting bitbake server... Loading https://layers.openembedded.org/layerindex/api/;branch=dunfell... ERROR: Layer "meta-efi-secure-boot" not found in layer index
そのような場合にはブランチを明示する必要がある。
$ bitbake-layers layerindex-fetch meta-efi-secure-boot -b master
まとめ
bitbake-layers layerindex-fetch
は便利。