Skip to content

feat: wrynose integration - #674

Open
mlilien wants to merge 58 commits into
omnect:mainfrom
mlilien:wrynose_integration
Open

feat: wrynose integration#674
mlilien wants to merge 58 commits into
omnect:mainfrom
mlilien:wrynose_integration

Conversation

@mlilien

@mlilien mlilien commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

No description provided.

mlilien added 30 commits July 14, 2026 09:05
Move every kas layer pin from scarthgap (5.0.18) to wrynose (6.0):
- oe.yaml: bitbake 2.18, openembedded-core wrynose @ yocto-6.0.1, OE_VERSION 6.0.1
- omnect-os.yaml: meta-openembedded, meta-security, meta-swupdate, meta-virtualization
- x86_64: meta-yocto-bsp, meta-secure-core, meta-perl
- phytec: meta-phytec, meta-freescale, meta-imx (wrynose-6.18.20-2.0.0), meta-arm
- rpi: meta-raspberrypi pinned to master (no wrynose release branch upstream yet)

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
- layer.conf: LAYERSERIES_COMPAT_omnect = "wrynose"
- omnect-os-distro.conf: migrate the obsoleted *_BACKFILL_CONSIDERED to
  *_OPTED_OUT and opt out the full DISTRO_FEATURES_DEFAULTS set. wrynose
  force-appends DISTRO_FEATURES_DEFAULTS (minus *_OPTED_OUT) regardless of
  the absolute DISTRO_FEATURES assignment, so opting out keeps the headless
  feature set as lean as it was on scarthgap (bluetooth/wifi/3g stay
  MACHINE_FEATURES-gated).

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
In wrynose do_unpack places SRC_URI sources under ${UNPACKDIR} and git
checks out to ${UNPACKDIR}/${BP} (BB_GIT_DEFAULT_DESTSUFFIX).
- drop redundant S = "${WORKDIR}/git" (default S is now correct)
- point file:// source reads and libeis-utils git paths at ${UNPACKDIR}
- radio-firmware: S = "${UNPACKDIR}"
- add spaces around '=' assignments (CVE_PRODUCT, RUSTFLAGS); 6.0 warns on FOO="bar"

Cargo crate-path rework (omnect-device-service, iotedge, aziot-edged,
aziot-identityd) is deferred; it depends on the wrynose cargo class layout.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
wrynose ships a current rust carrying the target-spec fixes the local 1.93
override provided, so remove the override:
- delete recipes-devtools/rust/{rust,cargo,libstd-rs,rust-llvm}_1.93.0.bb,
  rust-source.inc, rust-snapshots.inc
- delete kas/patches/oe_rust-target-config.patch
- drop RUSTVERSION = "1.93%" pin from omnect-os-rust.conf

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
The *_layerdir.patch files (which inject LAYERDIR_<collection>) failed to
apply on wrynose because the upstream layer.conf tails shifted. Regenerate
each against its pinned wrynose commit so they apply cleanly:
- meta-virtualization, meta-arm, meta-imx, meta-efi-secure-boot, meta-phytec,
  meta-freescale, meta-raspberrypi, oe (LAYERDIR_core)
- meta-imx/meta-efi-secure-boot: drop the now-obsolete LAYERSERIES_COMPAT edit
  (their wrynose branches already declare wrynose)

Split oe.patch: oe.yaml now applies only oe_layerdir.patch (LAYERDIR_core).
The omnect bootimg-efi.py customization is deferred to a layer-local WIC
plugin (x86/GRUB phase); kept in oe_bootimg_efi_wic.patch for reference.

Drop meta-openembedded.patch: both hunks are obsolete on wrynose (the
networkmanager girepository do_configure:prepend is gone in 1.56.0; the nspr
perl/tests block is gone in 4.38.2).

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Yocto 5.1 removed VOLATILE_LOG_DIR. /var/log is now made non-volatile by
removing files/fs-perms-volatile-log.txt from FILESYSTEM_PERMS_TABLES, which
base-files reads to decide whether /var/log symlinks into /var/volatile.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
wrynose's meta-imx-sdk (fsl-sdk-release) now declares
LAYERDEPENDS = "freescale-distro fsl-bsp-release perl-layer", pulling in two
layers omnect doesn't use. The headless image masks every meta-imx-sdk recipe
anyway (graphics/multimedia), and meta-imx-bsp only depends on freescale-layer,
so drop meta-imx-sdk and its now-obsolete BBMASK block.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Yocto 6.0 WKS_SEARCH_PATH looks in <BBPATH>/files/wic; the OE-core sanity
checker now errors on .wks/.wks.in left in a bare wic/ dir. Relocate them;
WKS_FILE/include references are by name and resolve via the search path.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Yocto 5.3+ warns on assignments without surrounding whitespace
(LIC_FILES_CHKSUM, BBCLASSEXTEND, IMAGE_LINK_NAME, SYSTEMD_SERVICE override).

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
meta-phytec's wrynose branch bumped the imx8mm u-boot from
u-boot-phytec-imx_2024.04-2.2.0-phy23 to -phy25 (the recipe whose
COMPATIBLE_MACHINE still lists phygate-tauri-l-imx8mm-2; the newer 2025.04/
2026.01 recipes are imx8mp/electra/lyra only). omnect_bootloader_versioning
checksums OMNECT_BOOTLOADER_RECIPE_PATH, so it must name the existing file.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
wrynose meta-phytec renamed the ATF bbappend from imx-atf_2.10.bbappend to the
version-independent imx-atf_%.bbappend, so the hardcoded path no longer globbed
and omnect_bootloader_versioning fatally couldn't handle the checksum_file.
Use imx-atf_*.bbappend (matching the imx-atf_*.bb entry just below) so it
survives future ATF bumps.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
The wrynose phytec bootloader (u-boot 2024.04-2.2.0-phy25, imx-atf 2.14) differs
from the scarthgap one, so OMNECT_BOOTLOADER_CHECKSUM_EXPECTED is updated to the
newly-computed baseline. This is a new, non-rollback-compatible bootloader, so
no OMNECT_BOOTLOADER_CHECKSUM_COMPATIBLE entry is added.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Dropping meta-imx-sdk left meta-phytec's mcore-demos bbappend (imx-m33-demos)
without a base recipe; 6.0 removed BB_DANGLINGAPPENDS_WARNONLY so it's a hard
error. Mask the mcore-demos dir - the Cortex-M demos aren't wanted on a headless
device (cf. the imx-m4-demos removal above).

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Yocto promoted patch-status to a fatal ERROR_QA. Our local recipe patches don't
carry Upstream-Status headers; move the check to WARN_QA so the build doesn't
fail, without annotating every patch.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
wrynose's coreutils-dev RRECOMMENDS gawk-dev, but gawk is GPL-3.0-or-later &
AGPL-3.0-or-later and excluded via INCOMPATIBLE_LICENSE. Keep it out of the
image with BAD_RECOMMENDATIONS rather than whitelist a (notably AGPL) license
for a package we don't ship.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
dropbear 2025.89 relocated sources under src/ and already carries the exact
(!exists || S_ISREG(stb.st_mode)) ftruncate guard upstream (src/scp.c), so our
Fix-inappropriate-fifo-truncate.patch no longer applies and is redundant. The
dropbear bbappend existed only to carry it; remove the whole recipe dir (scp is
still built via BINCOMMANDS).

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
BAD_RECOMMENDATIONS only filters at do_rootfs install time, but the gawk-dev
miss fails earlier in bitbake's build-dependency graph (gawk is skipped for
incompatible license GPL-3.0/AGPL-3.0). Remove it from coreutils-dev's
RRECOMMENDS in metadata so it's never pulled into the graph.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
…ynose

do_configure/do_install copied file:// SRC_URI sources from ${WORKDIR}, but
wrynose unpacks them under ${UNPACKDIR}. Repoint the source reads:
- phytec u-boot bbappend: omnect_env_phycore_imx8mm.h, phycore_imx8mm.env
- omnect_uboot_configure_env.bbclass: omnect_env.h, omnect_env.env
- bootloader-versioned u-boot/grub: version-script template + grub script
- grub-env / bootloader-env: grubenv, bootloader_env_*.sh
- rpi u-boot bbappend: omnect_env_rpi.h
Generated outputs (uboot-env.bin, boot-menu.inc, the version .sh) stay on
${WORKDIR}. The x86 grub-efi_%.bbappend is deferred to the x86 phase (its
grub-efi.cfg/efi-secure-boot.inc come from base recipes needing verification).

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
6.0 warns on the missing space after '=' in SERIAL_CONSOLES ="...". A repo-wide
scan confirms this was the last such bitbake-metadata assignment.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
u-boot-phytec-imx_%.bbappend is one of OMNECT_BOOTLOADER_CHECKSUM_FILES, so the
UNPACKDIR source-read fix (74adb1d) changed the computed bootloader checksum.
Update the expected baseline to match.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
wrynose's cargo classes moved CARGO_HOME to ${UNPACKDIR}/cargo_home, renamed the
config to config.toml, unpack destsuffix crates under ${UNPACKDIR}, and now
auto-emit [patch] redirects from SRC_URI name=/destsuffix=. Adapt the omnect
vendoring:
- drop S = "${WORKDIR}/git" (default S now correct; do_unpack errored on it)
- EXTRA_OECARGO_PATHS / patchdir crate paths ${WORKDIR}->${UNPACKDIR}
- omnect_rust_aziot-identityd_deps.bbclass: rewrite the workspace-member path
  fixups against ${UNPACKDIR}/cargo_home/config.toml
- keep the cargo build output on ${WORKDIR}/build (B=${WORKDIR}/build),
  and binaries still install from ${B}/target

Build-verify: the omnect EXTRA_OECARGO_PATHS may now overlap oe-core's auto
[patch]; refine against the first do_compile if cargo reports duplicate/missing
path entries.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
wrynose meta-imx imx-atf_2.14 controls the debug build through
PACKAGECONFIG[debug]="DEBUG=1,DEBUG=0" and derives its deploy folder from
PACKAGECONFIG; the old ATF_DEBUG var is no longer read, so dev builds defaulted
to release/ while our do_deploy:append looked in debug/. Enable the debug
PACKAGECONFIG for dev images (OMNECT_RELEASE_IMAGE=0); OUTPUT_FOLDER stays
aligned for the append.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
meta-phytec pins U-Boot 2024.04, whose bundled dtc/pylibfdt calls the 2-arg
SWIG_Python_AppendOutput; wrynose's SWIG 4.3 made it 3-arg, so scripts/dtc/
pylibfdt fails to compile. do_configure:prepend rewrites the typemaps to the
version-agnostic SWIG_AppendOutput macro (the upstream dtc 1.7.2 fix). oe-core
sidesteps this with U-Boot 2026.01/dtc 1.7.2.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
The pylibfdt SWIG-4.3 fix (c672d61) edited u-boot-phytec-imx_%.bbappend, a
checksummed bootloader input, so the computed checksum changed again. Update
the expected baseline.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
wrynose oe-core removed the separate rust-llvm recipe (rust now provisions LLVM
itself) and upstreamed clang into oe-core. omnect's bindgen libclang setup -
building clang into rust-llvm-native (-DLLVM_ENABLE_PROJECTS=clang) and pointing
LLVM_CONFIG_PATH at .../llvm-rust/bin - is therefore dead, so bindgen panicked
'Unable to find libclang'. Depend on clang-native and set
LIBCLANG_PATH=${STAGING_LIBDIR_NATIVE} instead (aziot-identityd +
omnect_rust_azure-iot-sdk_deps); drop the obsolete rust-llvm-native override.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
aziot recipes' cargo builds (aziot-identityd, aziot-edged, iot-hub-device-update)
need PKG_CONFIG_PATH/PKG_CONFIG_SYSROOT_DIR pointing at the target sysroot to
resolve system libs like tss2-tctildr (tcti-sys crate). wrynose's cargo classes
only export PKG_CONFIG_ALLOW_CROSS, so pkg-config searched host paths and missed
the staged tss2-tctildr.pc. inherit pkgconfig in the shared aziot class supplies
those exports.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
With libclang now from host clang-native, bindgen parsed the tss2 wrapper.h
without the target headers and emitted opaque structs (only _address), so
tss-minimal failed (TPM2B_PUBLIC etc. 'has no field'). Add
--sysroot=${STAGING_DIR_TARGET} to BINDGEN_EXTRA_CLANG_ARGS (aziot-identityd +
omnect_rust_azure-iot-sdk_deps) so clang finds the real tss2 type definitions.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
The Makefile-driven keys bindgen has no cargo TARGET, so host clang defaulted
to x86_64: it rejected the aarch64 -mcpu/-mbranch-protection from TUNE_CCARGS and
misparsed the target glibc headers (bits/timesize-32.h not found). Set
--target=${TARGET_SYS} (and keep --sysroot) and drop TUNE_CCARGS, which doesn't
affect bindgen output. Cargo-driven bindgens still get their own --target; the
extra one is harmless.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
…n wrynose

The 1.5.6 crate set pinned clang-sys 1.6.1 / bindgen 0.69.4, which can't walk
oe-core clang's libclang AST: every tss2 TPM2 struct (tpm/tss-minimal/types-sys)
bindgen'd to a field-less opaque `_address` blob, so tss-minimal failed to compile
(E0560/E0609 on TPM2B_PUBLIC and friends). clang -fsyntax-only parsed the same
wrapper.h cleanly and both the 0.60.1 and 0.69.4 bindgens produced identical opaque
output, confirming the break is in bindgen/clang-sys, not the recipe's
--target/--sysroot args. iot-identity-service main pins clang-sys 1.8.1 /
bindgen 0.72.1, which parse the headers correctly, and keeps the same
tss-minimal/types-sys/esys-sys build model.

- bump SRCREV to main (1a7a6e70); regenerate the cargo-bitbake crate SRC_URI from
  main's Cargo.lock (320 crates.io crates, plus sd-notify added by send_sd_notify)
- rebase send_sd_notify.patch onto main's workspace-style dependency list
- drop fix_linker_and_linter_findings.patch and the `-D warnings` RUSTFLAG: that
  patch existed only to silence lints that warnings-as-errors turned fatal on the
  old tree; enforcing -D warnings on upstream code is not our concern and the patch
  is unmaintainable across versions

Re-pin to a release tag once one ships carrying these crate versions.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
… 2024

iot-identity-service main (now pinned for aziot-identityd) is Rust edition 2024.
cbindgen 0.24.3 bundles syn 1.x, which cannot parse it: the Makefile cbindgen step
that regenerates aziot-keys.h failed with Error("expected path"). 0.29.2 (syn 2.x)
is the version aziot's ci/install-build-deps.sh pins alongside bindgen 0.72.1.

SRCREV -> v0.29.2 (76f41c0); crate SRC_URI + sha256sums regenerated from cbindgen's
Cargo.lock (72 crates.io deps); LICENSE md5 unchanged.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
mlilien added 12 commits July 20, 2026 07:26
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
U-Boot renamed the redundant-environment Kconfig symbol
SYS_REDUNDAND_ENVIRONMENT -> ENV_REDUNDANT. The rpi bump to 2026.01 thus
silently dropped the old symbol from redundant-env.cfg during oldconfig,
leaving CONFIG_ENV_REDUNDANT off and CONFIG_ENV_OFFSET_REDUND unset, so
U-Boot was built with a non-redundant env (CRC32 + data). The Linux side
stays redundant (OMNECT_PART_REDUNDANT_UBOOT_ENV=1 -> two-line
fw_env.config and mkenvimage -r), whose format inserts a flags byte after
the CRC. The mismatched formats made U-Boot's CRC check fail and fall
back to its compiled-in default env, so fw_setenv writes from the
swupdate handler (e.g. omnect_validate_update_part) never reached U-Boot:
the A/B update-validation flow never engaged and
base_test.sh::test_aziot_identityd_precondition failed on rpi4.

List both symbol names so the fragment works across u-boot versions: rpi
2026.01 honors ENV_REDUNDANT, phytec 2024.04 still honors
SYS_REDUNDAND_ENVIRONMENT; oldconfig drops whichever the recipe's u-boot
does not define. Verified via 'bitbake -c configure -f u-boot':
CONFIG_ENV_REDUNDANT=y and CONFIG_ENV_OFFSET_REDUND=0x120000 now stick.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
flash_mode_setup_network() looped forever on 'ifconfig ${if_name} up'
because the busybox initramfs has no ifconfig applet (net-tools), so the
interface never came up and the flashing host could never reach the DUT
(genericx86-64/arrakis flash-mode-2 'Waiting for eth0 ...' hang). Use
'ip link set ... up', matching the 'ip addr show' already used just below.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
On 32-bit ARM (dehndetect) the gnueabi target triple defaults clang to
soft-float, so bindgen resolved the wrong glibc ABI stubs header
(gnu/stubs-soft.h, absent in a hard-float sysroot) and azure-iot-sdk-sys
/ aziot-identityd failed to generate bindings. Append TUNE_CCARGS
(carrying -mfloat-abi=hard/-mfpu) to BINDGEN_EXTRA_CLANG_ARGS for arm
targets; aarch64/x86 are left untouched.

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Brings in main's 6 commits since omnect#665 (security sanity skip, coredump
Storage=none, iot-hub-device-update 1.4.0, image-wide RELRO hardening,
adu SIGSEGV fix, wifi-commissioning 0.2.1).

Conflict resolution in iot-hub-device-update (1.2.6.bb -> 1.4.0.bb rename):
- keep main's version bump to 1.4.0
- re-apply wrynose framework adaptations: UNPACKDIR (not WORKDIR) and the
  dropped S = "${WORKDIR}/git"
- keep the fix-diagnostics-devicename-header-guard.patch (GCC 15 -Wheader-guard)
- follow main in dropping the "rm adu-swupdate.sh" step (1.4.0 no longer
  installs it)

Auto-merged conf/distro/include/omnect-os-distro.conf, kas/distro/omnect-os.yaml
and systemd_%.bbappend (disjoint hunks; verified).

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
@mlilien
mlilien marked this pull request as draft July 23, 2026 15:51
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
@mlilien
mlilien force-pushed the wrynose_integration branch from 53a9415 to fdb3908 Compare July 24, 2026 06:21
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
@@ -1,2 +1,2 @@
CONFIG_DISPLAY_CPUINFO=y
# CONFIG_DISPLAY_CPUINFO is not set

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on purpose, rpi hangs when activating it

Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
@mlilien
mlilien marked this pull request as ready for review July 24, 2026 08:13
@mlilien
mlilien requested a review from HarryWaschkeit July 24, 2026 08:13
@HarryWaschkeit
HarryWaschkeit requested a review from Copilot July 24, 2026 08:39
@mlilien
mlilien requested review from JanZachmann and removed request for Copilot July 24, 2026 08:43

@JanZachmann JanZachmann left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review focus: idiomatic yocto/bitbake, comment/language rules, scarthgap->wrynose (5.0.18 -> 6.0.2) migration completeness, inconsistencies.

Overall: the migration is thorough and internally consistent. Kas pins verified against upstream (oe-core/bitbake peel exactly from tag yocto-6.0.2, no layer left on an old branch); every deleted workaround maps to an upstream wrynose fix or the dropped rust 1.93 backport; WORKDIR->UNPACKDIR is complete (no ${WORKDIR} refs left); all component SRCREVs match their claimed tags. Two blockers, both inline: the fork URL in omnect-device-service and the missing || return 1 in fs-mount.

Should still be changed in this PR (lines outside the diff, so no inline comment possible):

  • README.md:102,108 — still says "compatible with ... scarthgap" and "versioned 5.0.x.y". This PR bumps OE_VERSION to 6.0.2, so these lines need updating to wrynose / 6.0.x.y.
  • conf/machine/include/phytec-imx8mm.inc:62-72 — this PR drops meta-imx-sdk from kas, which turns the meta-imx/meta-imx-sdk/... BBMASK entries into no-ops (BBMASK on paths outside BBLAYERS does nothing). The stale entries can go.
  • recipes-devtools/toml-cli/toml-cli-0.2.3.inc:1 and cargo-cyclonedx-0.5.7.inc:1 — "not compatible with scarthgap per se" should say wrynose or drop the release name.

Noticed while reviewing, but the code is already on main (follow-up material, not this PR):

  • initrdscripts resize-data — three real issues: (1) lines 30-36: if a boot is interrupted between parted resizepart and resize2fs, the next boot sees no free sectors, sets the flag, and the filesystem stays small forever — run resize2fs (idempotent) in that branch too; (2) line 56: [ $? -gt 1 ] treats e2fsck exit 2 ("errors corrected, reboot needed") as fatal — real failures start at 4, use -ge 4; (3) line 42: sgdisk -e is the only command in the block without || return 1.
  • systemd_%.bbappend:65 — the coredump Storage=none sed silently no-ops if the conf template format drifts; suggest the grep -q ... || bbfatal guard this repo already uses in wifi-commissioning-service.inc.
  • omnect-os-distro.conf:31-32 — bitbake 2.18 supports addpylib; a lib/omnect/device_cap() helper could call bb.parse.mark_dependency() and parse the JSON once instead of on every DISTRO_FEATURES expansion.
  • doc/mac_lsm.md:25-26 — says the userspace install is gated on the apparmor DISTRO_FEATURE, but OMNECT_MAC_USERSPACE in omnect-os-image.bb is unconditional. Also line 6: "out of the box" -> "by default"; README.md:501: "levers" -> "settings".
  • omnect-wifi-commissioning-start.sh:30 — True/TRUE/CRLF values of WCS_DISABLE_BLE silently keep BLE enabled; log the unmatched value.
  • omnect-os-update-image.bb:58 — the grubenv skip has no why-comment.
  • files/wic/omnect-os.rpi.wks.inc:5 — bare include while the .wks.in files use ${LAYERDIR_omnect}/...; works, but the asymmetry invites a wrong copy later.

Cross-repo note: the omnect-os CI whitelists are organized per release (dunfell/kirkstone/scarthgap) — a wrynose/ set will be needed there.

SRC_URI += "git://github.com/omnect/omnect-device-service.git;protocol=https;nobranch=1;branch=main"
SRCREV = "4d6be836f1b47d55e7479eae28d251b6a64348f2"
# SRC_URI += "crate://crates.io/omnect-device-service/0.44.1"
SRC_URI += "git://github.com/mlilien/omnect-device-service.git;protocol=https;nobranch=1;branch=main"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical: SRC_URI points to the personal fork. SRCREV 2a83cef is exactly the omnect/omnect-device-service 0.44.1 tag commit, so only the URL needs to go back to github.com/omnect/omnect-device-service.git.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i keep that one as a reminder

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

# Mounting our own tmpfs on ${ROOTFS_DIR}/run here would be shadowed by that
# move (losing anything written to it), so we only re-apply our hardened
# options to the framework's /run instead.
run_cmd mount -o remount,mode=0755,nodev,nosuid,strictatime /run

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical: the old mount line had || return 1; the remount does not. If the remount fails, boot continues with /run missing nodev,nosuid,strictatime. If /run was never mounted at all, everything written there later (e.g. omnect-os-initramfs.json) vanishes at switch_root without any error. Please restore || return 1.

install -m 0644 -D ${WORKDIR}/${MACHINE}.json ${D}${sysconfdir}/omnect/device_caps.json
install -m 0644 -D ${UNPACKDIR}/${MACHINE}.json ${D}${sysconfdir}/omnect/device_caps.json
}
FILES_${PN} += "${sysconfdir}/omnect/device_caps.json"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FILES_${PN} is the pre-kirkstone override syntax — this line is ignored on wrynose. It works anyway because oe-core base-files packages /, but it should be FILES:${PN} += (or be deleted).

DISTRO_FEATURES:append = " efi-secure-boot modsign"

# We verify the grub config with SELoader (PKCS7 .p7b), matching OMNECT_GRUB_EFI_SB_FILES
# and the LockDown/SELoader artifacts below. wrynose's meta-secure-core (commit 6d83fbf)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commit hash and scarthgap-vs-wrynose history in a code comment. Keep only the mechanism, e.g.: "meta-secure-core defaults to grub's built-in GPG .sig check; we verify the grub config with SELoader (PKCS7 .p7b) instead, so pin both switches."

@@ -1,7 +1,10 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"

# file-only recipe: sources land in ${UNPACKDIR}, not the default ${UNPACKDIR}/${BP}.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"not the default ${UNPACKDIR}/${BP}" describes what it is not. "file-only recipe: sources are unpacked directly into ${UNPACKDIR}." is enough. Same comment in 7 more recipes (bootloader-env, grub-env, omnect-os-initramfs-scripts, omnect-base-files, omnect-first-boot, omnect-wifi-commissioning, tpm-udev).

@@ -1,19 +1,22 @@
diff --git a/arch/arm/mach-bcm283x/Makefile b/arch/arm/mach-bcm283x/Makefile

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leftovers: cmd/rstinfo.c keeps an unused extern int print_cpuinfo(void);, and the init.c hunk prints inside print_cpuinfo(), which is compiled out by the cfg fragment (# CONFIG_DISPLAY_CPUINFO is not set). Both can go.

# this is based on the handling in openembedded-core/meta/recipes-bsp/u-boot/u-boot.inc
# openembedded-core's u-boot.inc now builds into O=${B}/${config}-${type},
# so the initial env lives in that -${type}-suffixed dir, not ${config}/.
# UBOOT_MACHINE/UBOOT_CONFIG only ever hold a single config here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since only the first word of each variable is wanted, the nested loops with break 2 can be:

set -- ${UBOOT_MACHINE}; config=$1
set -- ${UBOOT_CONFIG}; type=$1

@@ -1,6 +1,17 @@
# wrynose dropped the custom rust-llvm (which carried clang); bindgen now gets

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Misattribution: the custom rust-llvm was our own recipe (deleted in this PR), not something the wrynose release dropped. Suggest: "the custom rust-llvm (which carried clang) was dropped with the wrynose upgrade; bindgen now gets libclang from oe-core's clang-native."

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rm comment

UEFI_SELOADER = "1"
GRUB_SIGN_VERIFY = "0"

# for patched wic plugin bootimg-efi.py:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment drift: the patched plugin now lives in the standalone wic recipe (src/wic/plugins/source/bootimg_efi.py), patched via recipes-support/wic/wic_%.bbappend.

INSANE_SKIP:${PN}:pn-gobject-introspection = "file-rdeps"
PACKAGECONFIG:remove:pn-apparmor = "python"

# disable glib-2.0 dependency to shared-mime-info

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pn-apparmor line sits in the glib block; the other apparmor tweaks (perl removal, PERLCONFIGTARGET) are ~20 lines up — move it next to them.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the meta-omnect Yocto layer and its build setup to the wrynose / OE 6.0.x baseline, updating recipes, kas pins, and integration patches to match upstream structural and QA changes (notably around ${UNPACKDIR} and stricter QA defaults).

Changes:

  • Rebase/pin kas configuration and layer compatibility to wrynose / OE 6.0.2 (including multiple layerdir patches).
  • Update many recipes and bbclasses to use ${UNPACKDIR}-based paths and adjust build tooling assumptions (Rust/cargo, bindgen/libclang, etc.).
  • Add/adjust boot & image integration pieces (wic secure-boot ESP population patch, initramfs /run handling, U-Boot reset-info, partition sizing).

Reviewed changes

Copilot reviewed 110 out of 117 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
wic/omnect-os.rpi4.wks.in Remove legacy RPi4 wks location (moved under files/wic/).
recipes-support/wic/wic/populate-esp-from-omnect-secure-boot-artifacts.patch Patch wic bootimg-efi plugin to populate ESP from omnect signed secure-boot artifacts.
recipes-support/wic/wic_%.bbappend Apply the secure-boot ESP population patch via the standalone wic recipe.
recipes-omnect/wifi-commissioning-service/wifi-commissioning-service.inc Adjust ${S} and dependency/pkgconfig handling for wrynose unpack/QAs.
recipes-omnect/tpm-udev/tpm-udev.bb Switch file-only recipe install paths from ${WORKDIR} to ${UNPACKDIR}.
recipes-omnect/omnect-wifi-commissioning/omnect-wifi-commissioning.bb Switch file-only recipe install paths to ${UNPACKDIR}.
recipes-omnect/omnect-first-boot/omnect-first-boot.bb Switch file-only recipe install paths to ${UNPACKDIR}.
recipes-omnect/omnect-device-service/omnect-device-service.inc Fix ${S} and cargo path overrides for wrynose unpack layout; adjust template installs.
recipes-omnect/omnect-device-service/omnect-device-service_0.44.1.bb Update device-service source/lock/crate list and related versions.
recipes-omnect/omnect-base-files/omnect-base-files.bb Switch file-only recipe install paths to ${UNPACKDIR}.
recipes-omnect/initrdscripts/omnect-os-initramfs/omnect-device-service-setup Write runtime metadata into framework /run (not ${ROOTFS_DIR}/run).
recipes-omnect/initrdscripts/omnect-os-initramfs/fs-mount Align /run handling with initramfs-framework (remount vs own tmpfs).
recipes-omnect/initrdscripts/omnect-os-initramfs/common-sh Replace ifconfig with ip link set in initramfs networking.
recipes-omnect/initrdscripts/omnect-os-initramfs-scripts.bb Switch file-only recipe install paths to ${UNPACKDIR}.
recipes-omnect/images/omnect-os-initramfs.bb Set IMAGE_OVERHEAD_FACTOR = "1" for initramfs sizing logic.
recipes-omnect/images/omnect-os-image.bb Minor variable formatting fix.
recipes-omnect/grub-env/grub-env.bb Switch file-only recipe install paths to ${UNPACKDIR}.
recipes-omnect/bootloader_env/bootloader-env.bb Switch file-only recipe install paths to ${UNPACKDIR}.
recipes-mac/AppArmor/apparmor_%.bbappend Work around AppArmor do_install perl-path assumptions when perl PACKAGECONFIG is disabled.
recipes-kernel/linux/files/wireguard.cfg Adjust kernel config fragment content for wireguard dependencies.
recipes-kernel/linux/files/crc32c-intel_module.cfg Remove crc32c-intel module fragment.
recipes-devtools/toml-cli/toml-cli.inc Add ${S} override for cargo-bitbake generated layout under wrynose.
recipes-devtools/rust/rust-source.inc Remove in-layer Rust source include.
recipes-devtools/rust/rust-snapshots.inc Remove in-layer Rust snapshot include.
recipes-devtools/rust/rust-llvm_1.93.0.bb Remove in-layer Rust LLVM recipe.
recipes-devtools/rust/rust_1.93.0.bb Remove in-layer Rust recipe.
recipes-devtools/rust/libstd-rs_1.93.0.bb Remove in-layer libstd recipe.
recipes-devtools/rust/cargo_1.93.0.bb Remove in-layer cargo recipe.
recipes-devtools/msft-gsl/msft-gsl_2.0.0.bb Drop explicit ${S} override (rely on new unpack defaults).
recipes-devtools/cbindgen/cbindgen.inc Formatting-only change for BBCLASSEXTEND.
recipes-devtools/cbindgen/cbindgen-0.29.2.inc Add missing per-crate sha256 sums for cbindgen 0.29.2.
recipes-devtools/cbindgen/cbindgen-0.24.3.inc Remove older cbindgen sha256sum include.
recipes-devtools/cbindgen/cbindgen_0.29.2.bb Add updated cbindgen recipe for Rust 2024 parsing support.
recipes-devtools/cbindgen/cbindgen_0.24.3.bb Remove older cbindgen recipe.
recipes-devtools/bindgen/bindgen.inc Formatting-only change for BBCLASSEXTEND.
recipes-devtools/bindgen/bindgen-0.72.1.inc Add missing per-crate sha256 sums for bindgen 0.72.1.
recipes-devtools/bindgen/bindgen-0.60.1.inc Remove older bindgen sha256sum include.
recipes-devtools/bindgen/bindgen_0.72.1.bb Add updated bindgen recipe for Rust 2024 unsafe extern output.
recipes-devtools/bindgen/bindgen_0.60.1.bb Remove older bindgen recipe.
recipes-devtools/cargo-cyclonedx/cargo-cyclonedx.inc Add ${S} override for wrynose unpack layout.
recipes-core/systemd/systemd_%.bbappend Switch installed file paths to ${UNPACKDIR}.
recipes-core/dropbear/dropbear/Fix-inappropriate-fifo-truncate.patch Remove dropbear patch (likely upstreamed or no longer needed).
recipes-core/dropbear/dropbear_%.bbappend Remove dropbear bbappend that applied the patch and suppressed QA.
recipes-core/base-files/base-files_%.bbappend Switch installed file paths to ${UNPACKDIR}.
recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend Switch installed file paths to ${UNPACKDIR}.
recipes-connectivity/networkmanager/networkmanager_%.bbappend Switch installed file paths to ${UNPACKDIR}.
recipes-bsp/u-boot/u-boot/omnect_env.patch Refresh patch hunk line offsets for newer U-Boot baseline.
recipes-bsp/u-boot/u-boot/omnect_env.env Add rstinfo invocation in update flow.
recipes-bsp/u-boot/u-boot-scr.bb Minor formatting fix for LIC_FILES_CHKSUM.
recipes-bsp/grub/grub-efi_%.bbappend Switch paths used by sed/grub-script-check/install to ${UNPACKDIR}.
recipes-bsp/bootloader-versioned/bootloader-versioned.u-boot.inc Switch template source path to ${UNPACKDIR}.
recipes-bsp/bootloader-versioned/bootloader-versioned.grub.inc Switch script install path to ${UNPACKDIR}; update note about wic patch.
recipes-bsp/bootloader-versioned/bootloader-versioned.bb Add ${S} override and minor formatting cleanup.
recipes-azure-iot/libeis-utils/libeis-utils_0.7.0.bb Move patchdir/S/CMake paths from ${WORKDIR}/git to ${UNPACKDIR}/${BP}.
recipes-azure-iot/iot-hub-device-update/iot-hub-device-update/omnect_1.4.0.patch Add fixes (header guard, XOPEN macro removal) into omnect patchset.
recipes-azure-iot/iot-hub-device-update/iot-hub-device-update_1.4.0.bb Drop explicit ${S} override and switch installed file paths to ${UNPACKDIR}.
recipes-azure-iot/azure-iot-sdk-c/azure-iot-sdk-c_1.14.0.bb Policy workaround for cmake 4.x; cleanup variable formatting and ${S} override removal.
recipes-azure-iot/azure-identityd/aziot-identityd/send_sd_notify.patch Refresh patch to match updated upstream Cargo workspace/layout.
recipes-azure-iot/azure-identityd/aziot-identityd/fix_linker_and_linter_findings.patch Remove now-unneeded patch.
recipes-azure-iot/azure-identityd/aziot-identityd.inc Add clang-native + bindgen env wiring; adjust Rust flags export and regeneration behavior; switch install paths to ${UNPACKDIR}.
kas/patches/oe.patch Remove monolithic OE patch (split into smaller targeted patches).
kas/patches/oe_rust-target-config.patch Remove OE rust-target-config patch (was part of monolithic patch).
kas/patches/oe_layerdir.patch Keep minimal OE layerdir patch for wrynose.
kas/patches/oe_bootimg_efi_wic.patch Remove old OE wic bootimg-efi patch (replaced by wic recipe patch).
kas/patches/meta-virtualization_layerdir.patch Update meta-virtualization layerdir patch for wrynose.
kas/patches/meta-raspberrypi_layerdir.patch Update meta-raspberrypi layerdir patch for wrynose.
kas/patches/meta-phytec_layerdir.patch Update meta-phytec layerdir patch for wrynose.
kas/patches/meta-openembedded.patch Remove meta-openembedded patch bundle (no longer applied).
kas/patches/meta-openembedded_nspr_do_not_install_perl_to_image.patch Remove redundant nspr patch (no longer applied).
kas/patches/meta-openembedded_networkmanager.patch Remove networkmanager patch (no longer applied).
kas/patches/meta-imx_layerdir.patch Update meta-imx layerdir patch for wrynose.
kas/patches/meta-freescale_layerdir.patch Update meta-freescale layerdir patch for wrynose.
kas/patches/meta-efi-secure-boot_layerdir.patch Update meta-efi-secure-boot compatibility and layerdir export.
kas/patches/meta-arm_layerdir.patch Update meta-arm layerdir patch for wrynose.
kas/machine/x86_64/genericx86-64.yaml Update external layer branches/commits to wrynose pins.
kas/machine/rpi/rpi.yaml Update meta-raspberrypi branch/commit to wrynose pins.
kas/machine/phytec/phytec.yaml Update phytec/freescale/imx/meta-arm pins to wrynose branches/commits.
kas/distro/omnect-os.yaml Update external layer pins to wrynose; remove meta-openembedded patch injection.
kas/distro/oe.yaml Update bitbake/OE-core pins to yocto-6.0.2 and adjust patch applied.
files/wic/omnect-os.rpi4.wks.in Add RPi4 wks that includes the layer-absolute wks include.
files/wic/omnect-os.rpi.wks.inc Add RPi partitioning include (env + boot + common).
files/wic/omnect-os.phytec.wks.in Update include to layer-absolute path.
files/wic/omnect-os.grub.wks.in Update include to layer-absolute path.
files/wic/omnect-os.common.wks.inc Add common A/B root partitions and data partitions include.
dynamic-layers/virtualization/recipes-containers/docker/docker-moby_git.bbappend Switch installed daemon.json path to ${UNPACKDIR}.
dynamic-layers/virtualization/recipes-azure-iot/iotedge/iotedge/iotedge/fix_docker_engine_api_version.patch Bump Docker Engine API version used by iotedge to v1.44.
dynamic-layers/virtualization/recipes-azure-iot/iotedge/iotedge/iotedge.inc ${S} + cargo path override fixes; add Docker API version patch; path updates.
dynamic-layers/virtualization/recipes-azure-iot/iotedge/aziot-edged/aziot-edged.inc ${S} + cargo path override fixes; path updates.
dynamic-layers/raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend Drop one RPi bluetooth patch from SRC_URI.
dynamic-layers/raspberrypi/recipes-bsp/u-boot/u-boot/redundant-env.cfg Update U-Boot env redundancy Kconfig symbol name.
dynamic-layers/raspberrypi/recipes-bsp/u-boot/u-boot/omnect_env_rpi.patch Refresh patch offsets and include omnect env in rpi.env.
dynamic-layers/raspberrypi/recipes-bsp/u-boot/u-boot/enable-reset-info-cmd-fragment.cfg Enable rstinfo command and disable cpuinfo print.
dynamic-layers/raspberrypi/recipes-bsp/u-boot/u-boot/cap-bootmapsz-cma.patch Add BCM2711 memory relocation ceiling cap for CMA compatibility.
dynamic-layers/raspberrypi/recipes-bsp/u-boot/u-boot/add-reset-info.patch Add rstinfo command and reset-cause helper to U-Boot.
dynamic-layers/raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend Update RPi U-Boot SRC_URI set and copy env header from ${UNPACKDIR}.
dynamic-layers/phytec/recipes-kernel/lwb-radio-firmware/radio-firmware.inc Switch ${S} from ${WORKDIR} to ${UNPACKDIR}.
dynamic-layers/phytec/recipes-bsp/u-boot/u-boot-phytec-imx_%.bbappend Add SWIG/setuptools/binman workarounds; deploy raw u-boot.bin; switch to ${UNPACKDIR} sources.
dynamic-layers/phytec/recipes-bsp/bootloader-versioned/bootloader-versioned.bbappend Broaden imx-atf bbappend glob to avoid dangling version pin.
dynamic-layers/freescale-layer/recipes-bsp/imx-atf/imx-atf_%.bbappend Replace debug flag logic with PACKAGECONFIG-based debug selection.
conf/machine/raspberrypi4-64.extra.conf Increase non-release rootfs partition size.
conf/machine/phygate-tauri-l-imx8mm-2.extra.conf Increase non-release rootfs partition size.
conf/machine/include/rpi.inc Update bootloader recipe path + expected checksum for newer U-Boot.
conf/machine/include/phytec-imx8mm.inc Update serial consoles formatting, BBMASK entries, bootloader recipe path, and checksum expectations.
conf/machine/genericx86-64.extra.conf Partition sizing tweaks, secure-boot SELoader pinning, bootloader recipe version bump, and artifact list alignment.
conf/layer.conf Update layer compatibility to wrynose and minor formatting.
conf/distro/include/omnect-os-swupdate.conf Minor formatting fix.
conf/distro/include/omnect-os-rust.conf Remove rust-llvm/clang override and in-layer rust version pin.
conf/distro/include/omnect-os-required.conf Bump required OpenSSL version.
conf/distro/include/omnect-os-fixes.conf Downgrade certain QA checks and adjust recommendations for license policy compatibility.
conf/distro/include/omnect-os-distro.conf Switch to *_OPTED_OUT patterns, add wicenv, and adjust gobject-introspection packaging/QA behavior.
classes/omnect_uboot_configure_env.bbclass Use ${UNPACKDIR} for env templates and adjust initial env path for new build dir layout.
classes/omnect_rust_azure-iot-sdk_deps.bbclass Switch bindgen to clang-native + sysroot/target args, handle ARM hard-float.
classes/omnect_rust_aziot-identityd_deps.bbclass Switch cargo path rewriting to ${UNPACKDIR}-based layout + config file name changes.
classes/disable_volatile_log_dir.bbclass Change approach for persistent /var/log behavior via perms tables.
classes/aziot.bbclass Add pkgconfig inheritance for aziot recipes.
Comments suppressed due to low confidence (1)

recipes-omnect/omnect-device-service/omnect-device-service_0.44.1.bb:11

  • This switches the source to a personal fork (github.com/mlilien/...). That’s a supply-chain/traceability risk for a core device component, and it makes long-term maintenance harder unless there’s a documented reason (e.g., a temporary patch pending upstream). Consider switching back to the official omnect/omnect-device-service repo (or crates.io) and updating SRCREV accordingly.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

# Mounting our own tmpfs on ${ROOTFS_DIR}/run here would be shadowed by that
# move (losing anything written to it), so we only re-apply our hardened
# options to the framework's /run instead.
run_cmd mount -o remount,mode=0755,nodev,nosuid,strictatime /run
+#include <env.h>
+#include <command.h>
+
+extern int print_cpuinfo(void);
Signed-off-by: Marcel Lilienthal <134974+mlilien@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants