This service is available only in Japanese-language.

Yoctoビルド生成物が同一であることを証明する方法について

local.layer, bblayers.conf等の設定は同一で、kernelやbootもソースを共通で
これらをビルドするSDKはyoctoビルド時に生成されたものを使用していますが
複数のPCでビルドしたときにビルドして出てくるイメージ(core-image-minimal***)を
比較すると少し異なっています。

おそらくタイムスタンプのみで異なっているのかと思いますが、
これらの環境が同一であることをを証明する基準に関して相談させてください。

複数のPCについて認識している差分は以下の通りです。

- HostOSは、Core数が異なるWindows(VirtualBox)、Linuxマシン、
- OSはUbuntu20.04(VirtualBox/wsl2)と22.04(Linuxのみ)
- Downloadsは共通にしている。
- kernel/u-bootをビルドする際のコンパイラのバージョンは共通にしている。

これらから出る生成物に関して、同じものだと証明するにあたり
同じライセンスが入っている、ある所定のrootfsの構成が共通、他、
差分を確認するべきポイントについて、教示いただきたくお願いします。

本件回答します。お時間をいただきすみません。

結論から申しますと、生成物を比較して機械的に同一性を保証することは難しいと考えます。

例えば、manifestファイルを比較し同一だったとしても、
ルートFSにインストールされているパッケージが同じであること以外は保証できません。
ROOTFS_POSTPROCESS_COMMANDで後からルートFSに変更を加えることが可能であるため、
インストールされたパッケージが同じでもルートFSが同じかどうかはわからないためです。

アーカイブなどのバイナリの比較ではご存知の通りタイムスタンプなどの情報が入るため、
機械的に同一性を保証することが難しいです。

ルートFSをそれぞれマウントしてツリー内のファイルをすべて比較するなどしてルートFSが同一だと認められた場合でも、
それ以外の、カーネルやブートローダに関しても別途確認する必要があります。

逆説的に、同じバージョンのビルドシステムで全く同じリビジョンのレイヤを使用して同じレシピをビルドする場合、
原則として全く同じ構成のOSが生成されます。
この原則が崩れる場合、そのビルドシステムは存在意義をなさなくなります。
そのため、同一性を保証するためには入力ファイルが完全に一致しているか?を確認するのが良いかと存じます。

ビルドディレクトリ配下の「tmp/log/cooker/<マシン名>/console-latest.log」の最初の方に以下のようなログが出力されています。

===========================================================
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION = "2.8.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "ubuntu-20.04"
TARGET_SYS = "aarch64-poky-linux"
MACHINE = "qemuarm64"
DISTRO = "poky"
DISTRO_VERSION = "5.0.2"
TUNE_FEATURES = "aarch64 crc cortexa57"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp = "scarthgap:6879650b927c96a2464224cdc2bed8245511cbf1"
===========================================================

まず、ここが完全に一致していること。
次にlocal.confの内容が一致していること。
site.confなどその他のファイルが存在する場合それらが一致していること。

このあたりをご確認いただけると入力データが同一であることが確認できるかと存じます。