Nous venons de publier une nouvelle version de Yocto Cooker (1.6.0) sur PyPi.
Pendant longtemps, Cooker partait du principe que le menu utilisait le repository Poky. Or, ce dépôt n’est plus utilisé pour les branches ultérieures à novembre 2025 (Whinlatter, Wrynose et la future Blacksail).
Il faut désormais s’appuyer sur plusieurs dépôts pour faire un build.
bitbake, le moteur de Yocto Project et ses outils associés sont chargés explicitement depuis un dépôt du projet Open Embedded.meta/, le layer central de la plupart des builds est inclus dans le repository OpenEmbedded-Core.meta-poky/, le layer qui fournit la distropokyest très utile pour les phases initiales d’un projet, même si on le surcharge assez rapidement. Il est livré dans le repository Meta-Yocto.
Pendant un moment, Yocto Cooker adoptait le nouveau comportement avec des dépôts séparés si une ligne spécifique ("base-distribution": "NoPoky") était présente.
Cette ligne n’est plus nécessaire, Cooker analyse les repositories indiqués dans le menu pour adapter son fonctionnement. Bien entendu, le choix explicite de la base-distribution reste disponible pour les cas particuliers.
Pour montrer les deux possibilités, j’ai préparé deux menus pour une machine Qemu Arm. Ils sont disponibles dans les menus d’exemple de Cooker.
- Celui basé sur la version Scarthgap 5.0.20 utilise le dépôt Poky ;
- Celui utilisant Wrynose 6.0.3 récupère séparément BitBake et OpenEmbedded-Core.
Installation de Yocto Cooker
L’installation se fait avec Python 3.11 ou plus récent. Créons un environnement Python virtuel dédié :
[~]$ python3 -m venv cooker-env
[~]$ . cooker-env/bin/activate
Le plus simple reste l’emploi du module Python pip depuis le serveur Pypi.
(cooker-env)[~]$ python3 -m pip install --upgrade yocto-cooker
Collecting yocto-cooker
Downloading yocto_cooker-1.6.0-py3-none-any.whl.metadata (17 kB)
[...]
Successfully installed attrs-26.1.0 jsonschema-4.26.0 jsonschema-specifications-2025.9.1 pyjson5-2.0.1 referencing-0.37.0 rpds-py-2026.6.3 typing-extensions-4.16.0 urllib3-2.8.0 yocto-cooker-1.6.0
(cooker-env) [~]$ cooker --version
# 1.6.0
Builds avec et sans Poky
Récupération des sources de Yocto Cooker
Les exemples de menus ne sont pas inclus dans le paquet pour pip. Ils sont disponibles dans le dépôt GitHub de Yocto Cooker, au tag 1.6.0.
(cooker-env) [~]$ git clone https://github.com/cpb-/yocto-cooker
Cloning into 'yocto-cooker'...
remote: Enumerating objects: 1157, done.
remote: Counting objects: 100% (310/310), done.
remote: Compressing objects: 100% (129/129), done.
remote: Total 1157 (delta 235), reused 197 (delta 178), pack-reused 847 (from 2)
Receiving objects: 100% (1157/1157), 9.99 MiB | 30.64 MiB/s, done.
Resolving deltas: 100% (638/638), done.
(cooker-env) [~]$ cd yocto-cooker/
(cooker-env) [yocto-cooker]$ git checkout 1.6.0
Note: switching to '1.6.0'.
[...]
(cooker-env) $ cd ..
(cooker-env) [~]$ ls yocto-cooker/sample-menus/
beagle-bone-black-scarthgap.json multiple-inheritances-test.json platform-specific-menu.json qemu-sample-menu-wrynose.json raspberrypi5-sample-menu-wrynose.json
beagle-bone-black-wrynose.json platform-general-menu.json qemu-sample-menu-scarthgap.json raspberrypi5-sample-menu-scarthgap.json riscv-menu-extrauser.json
Build pour Scarthgap
Commençons par une image produite avec la version la plus récente de la branche Scarthgap.
Nous voyons que le menu utilise le repository de Poky comme « starter pack » contenant tout ce qui lui faut pour compiler une image. J’ai ajouté dans la section local.conf une ligne "IMAGE_FEATURES += 'empty-root-password'" pour pouvoir me connecter avec l’identité root sans saisirde mot de passe.
{
"notes" : [
"This is a simple menu for Qemu ARM emulation. ",
"Please refer to the README file for instruction on how to ",
"build the image."
],
"sources" : [
{
"url": "https://git.yoctoproject.org/poky",
"branch": "scarthgap",
"rev": "yocto-5.0.20"
}
],
"layers" : [
"poky/meta",
"poky/meta-poky",
"poky/meta-yocto-bsp"
],
"builds" : {
"qemuarm": {
"target" : "core-image-base",
"local.conf": [
"MACHINE = 'qemuarm' "
]
}
}
}
Le build prend un temps certain. De l’ordre d’une heure et demi sur un PC moyen.
(cooker-env) [~]$ cooker cook yocto-cooker/sample-menus/qemu-sample-menu-scarthgap.json
# Update layers in project directory
# Downloading source from https://git.yoctoproject.org/poky
# Updating source /home/training/layers/poky...
# Generating dirs for all build-configurations
# Building qemuarm (core-image-base)
[...]
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 5346 tasks of which 0 didn't need to be rerun and all succeeded.
Pour tester notre image, on demande à Cooker de nous initialiser un environnement de shell nécessaire au démarrage de Qemu. Nous en ressortirons ensuite.
(cooker-env) [~]$ cooker shell qemuarm
[...]
Nous pouvons lancer runqemu avec l’option nographic pour conserver la console dans notre terminal :
build-qemuarm]$ runqemu nographic
runqemu - INFO - Running bitbake -e ...
[...]
runqemu - INFO - Host uptime: 375765.62
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 6.6.147-yocto-standard (oe-user@oe-host) (arm-poky-linux-gnueabi-gcc (GCC) 13.4.0, GNU ld (GNU Binutils) 2.42.0.20240723) #1 SMP PREEMPT Fri Jul 31 18:20:18 UTC 2026
[ 0.000000] CPU: ARMv7 Processor [414fc0f0] revision 0 (ARMv7), cr=30c5387d
[ 0.000000] CPU: div instructions available: patching division code
[...]
INIT: Entering runlevel: 5
Configuring network interfaces... ip: RTNETLINK answers: File exists
Starting system message bus: dbus.
Starting rpcbind daemon...done.
Starting bluetooth: bluetoothd.
Starting syslogd/klogd: done
* Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon
...done.
Poky (Yocto Project Reference Distro) 5.0.20 qemuarm /dev/ttyAMA0
qemuarm login: root
WARNING: Poky is a reference Yocto Project distribution that should be used for
testing and development purposes only. It is recommended that you create your
own distribution for production use.
root@qemuarm:~# uname -a
Linux qemuarm 6.6.147-yocto-standard #1 SMP PREEMPT Fri Jul 31 18:20:18 UTC 2026 armv7l GNU/Linux
root@qemuarm:~# (CTRL-A X)
QEMU: Terminated
runqemu - INFO - Cleaning up
runqemu - INFO - Host uptime: 376026.78
[build-qemuarm]$ exit
exit
(cooker-env) [~]$
Build pour Wrynose
Le menu pour la branche Wrynose de Yocto ne charge plus le repository Poky, mais les trois indiqués plus haut. On s’appuie toujours néanmoins sur la distro poky pour débuter.
{
"notes" : [
"This is a simple menu for Qemu ARM emulation. ",
"Please refer to the README file for instruction on how to ",
"build the image."
],
"sources" : [
{
"url": "https://git.openembedded.org/bitbake",
"rev": "yocto-6.0.3"
},
{
"url": "https://git.openembedded.org/openembedded-core",
"branch": "wrynose",
"rev": "yocto-6.0.3"
},
{
"url": "https://git.yoctoproject.org/meta-yocto",
"branch": "wrynose",
"rev": "yocto-6.0.3"
}
],
"layers" : [
"openembedded-core/meta",
"meta-yocto/meta-poky"
],
"builds" : {
"qemuarm": {
"target" : "core-image-base",
"local.conf": [
"MACHINE = 'qemuarm' ",
"DISTRO = 'poky' ",
"IMAGE_FEATURES += 'empty-root-password' "
]
}
}
}
Dès le début du build on remarque que cette fois plusieurs repositories sont téléchargés :
(cooker-env) [~]$ cooker cook yocto-cooker/sample-menus/qemu-sample-menu-wrynose.json
# Update layers in project directory
# Downloading source from https://git.openembedded.org/bitbake
# Updating source /home/training/layers/bitbake...
# Downloading source from https://git.openembedded.org/openembedded-core
# Updating source /home/training/layers/openembedded-core...
# Downloading source from https://git.yoctoproject.org/meta-yocto
# Updating source /home/training/layers/meta-yocto...
# Generating dirs for all build-configurations
# Building qemuarm (core-image-base)
[...]
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 5873 tasks of which 0 didn't need to be rerun and all succeeded.
(cooker-env) [~]$
Depuis la version Wrynose de Yocto Project, il est nécessaire d’ajouter l’option snapshot de Qemu, car le root filesystem est compressé et Qemu ne peut pas réécrire dedans.
(cooker-env) [~]$ cooker shell qemuarm
[...]
[~/builds/build-qemuarm]$ runqemu nographic snapshot
runqemu - INFO - Running bitbake -e ...
[...]
INIT: Entering runlevel: 5
Configuring network interfaces... ip: RTNETLINK answers: File exists
Starting system message bus: dbus.
Starting rpcbind daemon...done.
Starting bluetooth: bluetoothd.
Starting syslogd/klogd: done
* Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon
...done.
Poky (Yocto Project Reference Distro) 6.0.3 qemuarm /dev/ttyAMA0
Type 'root' to login with superuser privileges (no password will be asked).
qemuarm login: root
WARNING: Poky is a reference Yocto Project distribution that should be used for
testing and development purposes only. It is recommended that you create your
own distribution for production use.
root@qemuarm:~# uname -a
Linux qemuarm 6.18.39-yocto-standard #1 SMP PREEMPT Wed Jul 22 16:47:54 UTC 2026 armv7l GNU/Linux
root@qemuarm:~#
root@qemuarm:~# (CTRL-A X)
QEMU: Terminated
runqemu - INFO - Cleaning up
runqemu - INFO - Host uptime: 373936.20
runqemu - INFO - Removing /home/training/builds/build-qemuarm/tmp/deploy/images/qemuarm/core-image-base-qemuarm.rootfs-20261002121851.ext4
training@tr02:~/builds/build-qemuarm$ exit
exit
(cooker-env) [~]$
Autres ajouts de Yocto 1.6.0
Cette version apporte des corrections pour des cas particuliers, le saut sur une branche absente locallement par exemple.
Yocto 1.6.0 ajoute également l’option --immutable aux opérations cooker init et cooker cook.
Elle conserve une copie des menus utilisés, afin qu’une modification ultérieure des fichiers d’origine ne change pas la configuration au milieu d’une séquence de construction.
Conclusion
Cette version permet de passer sans actions particulières des branches antérieures de Yocto Project (comme Scarthgap, encore maintenue deux ans) aux branches actuelles comme Wrynose.
N’hésitez pas à me contacter si vous avez des questions, des retours, ou l’envie de contribuer au projet.
