0.38.0
New commands
avocado kernel image
Standalone kernel image build, mirroring the existing avocado rootfs and avocado initramfs commands. All three now accept --out <path> to export the generated image to the host filesystem:
avocado kernel image --out ./build/kernel.img
avocado rootfs build --out ./build/rootfs.kab
avocado initramfs build --out ./build/initramfs.kab
avocado connect devices reclaim
Run the admin-approved device reclaim workflow from the terminal, alongside the existing SPA surface:
avocado connect devices reclaim list [--status pending|approved|completed|denied|expired|all]
avocado connect devices reclaim approve <id> [-y]
avocado connect devices reclaim deny <id> [--reason "..."] [-y]
avocado connect devices reclaim delete <id> [-y]
list prints full UUIDs in the ID column for clean copy-paste. Approve and deny are paired (two outcomes of a single decision); delete is the recovery path for a typo'd deny. Errors from the API (auth, org-scope, expired tokens, etc.) are mapped to actionable terminal messages.
New features
{{ avocado.runtime }} interpolation and runtime-scoped target_board
A new {{ avocado.runtime }} template surfaces the resolved runtime name. Resolution precedence: env AVOCADO_RUNTIME > default_runtime > sole-runtime fallback.
RuntimeConfig also gains a target_board field, so target-board resolution now follows env > resolved runtime's target_board > top-level default_target_board — mirroring how runtimes already scope target:
runtimes:
rev3:
target_board: imx8mp-evk-rev3
rev1:
target_board: imx8mp-evk-rev1
sdk-compile entries in runtime.packages
Runtimes can now embed sdk.compile entries the same way extensions already can:
runtimes:
dev:
packages:
avocado-runtime: '*'
uboot:
compile: uboot
install: uboot-install.sh
Each entry runs the named sdk.compile section and then an install script with $AVOCADO_RUNTIME_BUILD_DIR and $AVOCADO_BUILD_DIR set, so artifacts (e.g. a custom u-boot bundle) land in the runtime build directory and override upstream-installed ones. Install skips these entries instead of resolving them via DNF.
Off-kernel package exclusion across every install path
Multi-kernel feeds emit unqualified Provides: kernel-module-X alongside qualified kernel-module-X-${KERNEL_VERSION} names. Transitive RDEPENDS / RRECOMMENDS chains could resolve those unqualified names against an off-kernel candidate, dragging the wrong kernel-base shell and a mix of off-kernel modules into a sysroot pinned to a different kver.
All four target-side DNF transactions — rootfs install, runtime install, extension install, and SDK target-sysroot install — are now guarded with the same --exclude='kernel-*${other_kver}*' and --exclude='nv-kernel-module-*${other_kver}*' flags for every kver in the feed that is not the pinned one. The kernel-family auto-suffix that previously rewrote bare names CLI-side (kernel-module-X → kernel-module-X-${KERNEL_VERSION}) has been dropped in favor of this DNF-side filtering. Users can list kernel-module-X: '*' directly; DNF resolves it against the pinned kernel via the modular RPM or kernel-base Provides.
size and mini_hash fields on AMF image entries
The runtime assembly manifest gains size and mini_hash fields per image entry, useful for downstream OTA tooling that needs fast pre-flight inspection without rehydrating the full image.
Breaking changes
- The AMF
metasection has been renamed tokos. Tooling that reads or writes the manifest directly will need to update its key references.