yocto: レシピ、ディストロ、local.conf の違い
yocto では様々なファイルでビルドの設定をします。
しかし、どのファイルに何の設定を書くべきか悩みます。例えば IMAGE_INSTALL
をどこに書くべきか、初学者にはちんぷんかんぷんです(ですよね?)。
そこで各設定の役割をまとめてみました。
Image Recipe
インストールするパッケージの指定や、パーティションの構成などを定義します。
例:
$ cat meta-mylayer/recipes-myapp/images/myapp-image.bb
require recipes-core/images/core-image-minimal.bb
DESCRIPTION = "sample image"
inherit myapp-wic
IMAGE_INSTALL:append = " vim"
ここではcore-image-minimal をベースに、パーティション構成 myapp-wic と、vim のインストールを指定しています。
このファイルは bitbake myapp-image
のように指定して使用します。
wic ファイルの作成方法は手前を参照してください:
App Recipe
単にレシピといったらこちらを指すようですが、Image Recipe と紛らわしいので、私は App Recipe と呼んでいます。ChatGPT もそのように発しています。正しいのかよく分かりません。
このファイルでは、何かのアプリケーションのビルドやインストール方法などを定義します。
例:
SUMMARY = "Some APP"
DESCRIPTION = "Some APP"
LICENSE = "CLOSED"
# 依存するパッケージを定義
RDEPENDS:${PN} += " \
vim \
"
SRC_URI = "file://app"
S = "${WORKDIR}"
do_install () {
install -d ${D}${sysconfdir}/myapp
install -m 0755 version ${D}${sysconfdir}/myapp/version
}
Distro
システム全体のルールやポリシーを書きます。
- パッケージャーに何を使うのか
PACKAGE_CLASSES = "package_rpm"
- どの機能を有効にするのか
DISTRO_FEATURES:append = " systemd ipv6 wifi"
- SysVInit → systemd への切り替え
VIRTUAL-RUNTIME_init_manager = "systemd"
などです。
例えば meta-mylayer/conf/distro/mydistro.conf
といったファイルに
よくある勘違いとして、IMAGE_INSTALL
はここでは定義しません。書くことはでき、エラーにもならないのですが、動作に反映されませんでした(小一時間溶かしました...)。Linux のディストリビューションとは異なる概念?のようです。
なお、DISTRO は local.conf で定義します。イメージレシピでは定義 しません。
DISTRO はビルド全体の方針を決定する変数です。イメージレシピで DISTRO を定義してしまうと、複数のイメージが異なる DISTRO を要求した場合に矛盾が発生してしまいます。
例: meta-mylayer/conf/distro/mydistro.conf
DISTRO = "mydistro"
DISTRO_NAME = "Custom Distro"
DISTRO_VERSION = "1.0"
DISTRO_CODENAME = "mydistro"
require conf/distro/poky.conf
DISTRO_FEATURES:append = " wifi"
EXTRA_IMAGE_FEATURES += "package-management"
PACKAGE_CLASSES = "package_rpm"
LICENSE_FLAGS_ACCEPTED = "synaptics-killswitch"
local.conf
基本的になんでも書けます。ただし、開発等で一時的に設定を変更して試す場合などに限ります。
よく練られた Distro やイメージレシピを使った場合、本番用の local.conf は以下の2つのみになります
DISTRO = "mydistro"
MACHINE = "genericx86-64"
あるいはビルド並列数などの定義もここで定義します。
Discussion