2022 年 05 月 23 日 Yocto Project よもやま話
2022 年 4 月 27 日、Yocto Project として 2 番目の LTS となる Yocto Project 4.0 Kirkstone リリースのアナウンスがありました。 当初は、バージョン 3.5 として開発が行われていましたが、過去のバージョンで動作していたメタデータがそのままでは動かなくなるほどの大きな変更が行われたこともあり、Yocto Project のバージョンは 4.0 に、 bitbake のブランチもバージョン 2.0 に変更されてのリリースとなっています。
BB_SIGNATURE_HANDLER = "OEEquivHash" BB_HASHSERVE = "auto" BB_HASHSERVE_UPSTREAM = "typhoon.yocto.io:8687" SSTATE_MIRRORS ?= "file://.* https://sstate.yoctoproject.org/4.0/PATH;downloadfilename=PATH"
本セクションでは、Yocto4.0 で変更となった点に関して、直前の Yocto3.4 からの変更点と、ひとつ前の LTS である Yocto3.1LTS 以降の変更点に分けて紹介します。
使用することが推奨されない単語を含んだ変数名の変更
Yocto 3.4 まで使われていた以下の変数名が、変更および廃止となっています。
変更前 | 変更後 |
---|---|
BB_ENV_WHITELIST |
|
BB_ENV_EXTRAWHITE |
|
BB_HASHBASE_WHITELIST |
|
BB_HASHCONFIG_WHITELIST |
|
BB_HASHTASK_WHITELIST |
BB_TASKHASH_IGNORE_TASKS |
BB_SETSCENE_ENFORCE_WHITELIST |
BB_SETSCENE_ENFORCE_IGNORE_TASKS |
CVE_CHECK_PN_WHITELIST |
|
CVE_CHECK_WHITELIST |
|
ICECC_USER_CLASS_BL |
|
ICECC_SYSTEM_CLASS_BL |
|
ICECC_USER_PACKAGE_WL |
|
ICECC_USER_PACKAGE_BL |
|
ICECC_SYSTEM_PACKAGE_BL |
|
LICENSE_FLAGS_WHITELIST |
|
MULTI_PROVIDER_WHITELIST |
|
PNBLACKLIST |
|
SDK_LOCAL_CONF_BLACKLIST |
|
SDK_LOCAL_CONF_WHITELIST |
|
SDK_INHERIT_BLACKLIST |
|
SSTATE_DUPWHITELIST |
SSTATE_ALLOW_OVERLAP_FILES |
SYSROOT_DIRS_BLACKLIST |
|
UNKNOWN_CONFIGURE_WHITELIST |
|
BB_STAMP_WHITELIST |
廃止 |
BB_STAMP_POLICY |
廃止 |
INHERIT_BLACKLIST |
廃止 |
TUNEABI_WHITELIST |
廃止 |
上記変数を使用していた既存のレシピやコンフィグレーションファイルの変換用に、scripts/contrib/convert-variable-renames.pyスクリプトが poky に同梱されます。
SRC_URI で指定する git:// gitsm:// におけるブランチ名の指定
git リポジトリにおける将来のデフォルトブランチ名が不明確なため、SRC_URI で指定する git:// 及び gitsm:// エントリで記述された全ての URI でブランチ名の指定が必要になりました。
既存のレシピでブランチ未指定の場合に、branch=master を付加する変換スクリプト
scripts/contrib/convert-srcuri.py が、poky に同梱されます。
GitHub アクセス時のプロトコルの変更
https://github.blog/2021-09-01-improving-git-protocol-security-github/ にあるよう、GitHub にアクセスする際には、https のプロトコルを使用するように変更する必要があります。do_fetch から呼び出されるスクリプトの中で、GitHub にアクセスする際の protocol を https に置き換える回避策が実装されていますが、前項で紹介したスクリプトを通すことで書き換え可能となっています。
タスク内でのネットワークアクセスの原則禁止
ネットワークアクセスを無効にする機能が有効化された kernel が提供されている CentOS8 や Debian といった最新のディストリビューションに合わせて、do_fetch を除いたタスクでは、ネットワークアクセスが無効となりました。
タスク内でネットワークアクセスが必要な場合は、レシピ内で以下の記述をおこない、明示的にネットワークアクセスを有効にします。
do_mytask[network] = "1"
レシピ解析中の変数の変更の無効化
TOPDIR 変数及び current working dir 変数は、レシピ解析中に変更されなくなりました。書き換えに依存していたレシピは動作しなくなります。
append / prepend / remove と組み合わせる演算子を限定
上記演算子と組み合わせる演算子は、"=" と ":=" のみとなります。
allarch パッケージグループの依存処理の変更
allarch パッケージグループのレシピは、debian.bbclass のように PKG 変数を用いて名前を変更するパッケージへの依存はできなくなります。
LICENSE 定義は SPDX 識別子を使用
従来の記述を変換するスクリプト scripts/contrib/convert-spdx-licenses.py が、poky に同梱されます。
Crate Fetcher のサポート
Rust Package 向けに、SRC_URI で指定するスキームに "crate://" が追加されました。
distutils*.bbclass のレイヤー移動
distutils*.bbclasses は、meta-openembedded/meta-python レイヤーに移動となりました。この移動により、classes 及び DISTUTILS 変数に関するドキュメントないの記述は削除されました。
bbclass の削除
blacklist.bbclass は削除され、提供されていた機能は base.bbclass に SkipRecipe() 関数として実装されています。
従来 BLACKLIST 変数に設定していた記述は、以下の例のように変更する必要があります。
Python パッケージの構築方法の変更
Python パッケージの構築は wheels が使用されるようになり、以下の新しいパッケージングクラスが追加されています。
python-flit_core, setuptools_python-build_meta ,python_poetry_core.
image-prelink.bbclass の削除
既に多くの未可決のバグが残っており、ロードアドレスのランダム化や PIE 実行可能ファイルを無効にしないと動作しない prelink について glibc_2.36 から削除となることが判明したため、サポートを続ける利点がないとの判断から削除されています。
OverlayFS をサポートするクラスの追加
read-only filesystems に対する上書きファイルシステムを提供する OverlayFS の導入を容易にする新規のクラス overlayfs 及び overlayfs-etc が提供されています。
file:// 内での "*" "?" の使用不可
SRC_URI で file:// 内で指定するパスでのワイルドカード(* 及び ?) の使用は、ファイルチェックサムを適切にサポートできておらず、ソースファイルの変更時のタスクチェックサムが変化しませんでした。変更したファイルが以降のビルドに確実に組み込まれていなかったため、ワイルドカードのサポートを削除することになりました。
SPDX の命名規則に準拠するため meta/files/common-licenses 以下のファイル名の変更が行われています。
従来のファイル名 | 新しいファイル名 |
---|---|
AGPL-3.0 | AGPL-3.0-only |
GPL-1.0 | GPL-1.0-only |
GPL-2.0 | GPL-2.0-only |
GPL-3.0 | GPL-3.0-only |
LGPL-2.0 | LGPL-2.0-only | LGPL-2.1 | LGPL-2.1-only |
LGPL-3.0 | LGPL-3.0-only |
このリリースから、上書き参照を行う演算子で指定する文字は、"_" から ":" に変更になっています。
以下、qemux86 での変更例となります。
バージョン 3.4 より前
SRC_URI_append = " file://somefile" SRC_URI_append_qemux86 = " file://somefile2" SRC_URI_remove_qemux86-64 = " file://somefile3" SRC_URI_prepend_qemuarm = "file://somefile4 " FILES_${PN}-ptest = "${bindir}/xyz" IMAGE_CMD_tar = "tar" BASE_LIB_tune-cortexa76 = "lib" SRCREV_pn-bash = "abc" BB_TASK_NICE_LEVEL_task-testimage = '0'
バージョン 3.4 以降
SRC_URI:append = " file://somefile" SRC_URI:append:qemux86 = " file://somefile2" SRC_URI:remove:qemux86-64 = " file://somefile3" SRC_URI:prepend:qemuarm = "file://somefile4 " FILES:${PN}-ptest = "${bindir}/xyz" IMAGE_CMD:tar = "tar" BASE_LIB:tune-cortexa76 = "lib" SRCREV:pn-bash = "abc" BB_TASK_NICE_LEVEL:task-testimage = '0'
従来の書式で作成されたレイヤー内のメタデータを変換するスクリプト <oe-core>/scripts/contrib/convert-overrides.py が提供されており、
<oe-core>/scripts/contrib/convert-overrides.py <layerdir>上記のようにレイヤーディレクトリを指定して一括変換が可能です。ただし、完全な自動処理ではないため、スクリプトの注意事項を確認の上で実行して下さい。
lz4c,pzstd.zstd の各パッケージが開発ホスト上にインストールされていることが必要になりました。
本セクションでは、Yocto4.0 のサポート体制、スケージュールについて説明します。
Yocto4.0LTS (kirkstone) は、Yocto3.1 (Dunfell) と同様、Yocto Project から業務委託を受けている Steve Sakoman 氏がメンテナーとして、最短 2024 年 4 月まで LTS として保守を行います。
今後のリリース予定は以下のようになっています。
version | build | Release |
---|---|---|
4.0.1 | 2022/05/16 | 2022/05/27 |
4.0.2 | 2022/06/27 | 2022/07/08 |
4.0.3 | 2022/08/08 | 2022/08/19 |
4.0.4 | 2022/09/19 | 2022/09/30 |
4.0.5 | 2022/10/31 | 2022/11/11 |
ポイントリリースの 1 月後に次のバージョンの構築を行なうという定期的なリリースが予定されています。
本セクションでは、実際に Yocto4.0 で構築を行ない、過去バージョンとの相違や、キャッシュの利用による利点を紹介します。
最近はあまりデモで使われなくなった core-image-sato ですが、今も提供されています。
core-image-sato に含まれる adwaita-icon-theme は、41.0 にバージョンが上がり、依存する librsvg は rust-llvm を使って構築を行う 2.52.7 にバージョンが上がっています。
同一のマシンにて、3.1 / 3.3 / 4.0 で core-image-sato の build を 行った際の構築時間、CPU 使用率は以下となります。
バージョン | 3.1.16 | 3.3.6 | 4.0.1 |
---|---|---|---|
構築時間 | 5326.96 秒 | 5675.20 秒 | 9828.61 秒 |
CPU 使用率 | 83.7% | 85.3% | 86.7% |
CPU Core i7-9750H 2.60GHz x 12 スレッド
メモリ 32GB
※本ブログを執筆している 2022/05/16 現在 、branch kirkstone は既に Yocto4.0.1 となっていまして、こちらのバージョンで計測しています。
本リリースより公開された Yocto Project の autobuilder の SSTATE_CACHE を使用する設定を行った結果です。
SSTATE_CACHE | デフォルト | 外部指定 |
---|---|---|
構築時間 | 9828.61 秒 | 968.89 秒 |
CPU 使用率 | 86.7% | 5.0% |
conf/local.conf に以下の指定を追加しています。
BB_SIGNATURE_HANDLER = "OEEquivHash" BB_HASHSERVE = "auto" BB_HASHSERVE_UPSTREAM = "typhoon.yocto.io:8687" SSTATE_MIRRORS ?= "file://.* https://sstate.yoctoproject.org/4.0.1/PATH;downloadfilename=PATH"
CPU の使用率が非常に低くなり、殆どの時間は SSTATE_CACHE サーバーに保存されたデータのダウンロードにかかっています。
本セクションでは、従来のバージョンで使用していたレイヤーを Yocto4.0 で使う上での注意点を紹介します。
Yocto 3.4 から提供された移行ガイドを確認します。
Yocto4.0 への移行ガイドをはじめとして、3.4 向け
3.3 より前のバージョンは、リリースマニュアルを参考にします。
3.3 向け 3.2 向け 3.1 向け
上記を参考にして解決しない場合は、弊社で運用する YoctoBBQ にご登録の上でお問い合わせください。
2024 年 09 月 02 日 Vigiles サポート
2024 年 03 月 01 日 Vigiles サポート
2023 年 08 月 28 日 Vigiles サポート
2024 年 03 月 26 日 Yocto Project よもやま話
2023 年 07 月 25 日 Yocto Project よもやま話
2023 年 06 月 20 日 Yocto Project よもやま話
2024 年 01 月 10 日 Linux 技術ネタ
2023 年 12 月 12 日 Linux 技術ネタ
2023 年 03 月 31 日 Linux 技術ネタ
2024 年 07 月 26 日 イベントレポート
2024 年 07 月 09 日 イベントレポート
2024 年 06 月 03 日 イベントレポート
2023 年 05 月 30 日 リクルート
2022 年 12 月 27 日 リクルート
2022 年 09 月 27 日 リクルート
2024 年 11 月 29 日 信州リネオ便り
2024 年 09 月 25 日 信州リネオ便り
2024 年 08 月 20 日 信州リネオ便り
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 13 日 マーケティング統括部
2019 年 04 月 25 日 マーケティング統括部
2018 年 12 月 18 日 マーケティング統括部