From 67248e369aac29a94797f2f6bb52ee162f6ca378 Mon Sep 17 00:00:00 2001 From: Paul Barker Date: Mon, 11 Jan 2021 17:25:18 +0000 Subject: Improve workaround for do_image_wic race condition This change ensures that no other do_image_* task can be running and reading the rootfs directory at the same time as do_image_wic is modifying the /etc/fstab file in the rootfs directory. It can be removed when the more efficient but more complex fix is accepted and backported upstream in poky. Further details are given in the new image_types_wic_workaround.bbclass file. This allows us to remove the previous workaround of running wic with the `--no-fstab-update` argument and so the fstab file in wic images will now include all partitions. Bug-AGL: SPEC-3621 Signed-off-by: Paul Barker Change-Id: Ibdbed7164c8684f50e917b5c877508d8c968d73b Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/25884 Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account Reviewed-by: Jan-Simon Moeller --- .../classes/image_types_wic_workaround.bbclass | 32 ++++++++++++++++++++++ meta-agl-core/conf/distro/poky-agl.conf | 4 +-- 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 meta-agl-core/classes/image_types_wic_workaround.bbclass diff --git a/meta-agl-core/classes/image_types_wic_workaround.bbclass b/meta-agl-core/classes/image_types_wic_workaround.bbclass new file mode 100644 index 000000000..a6ea0580f --- /dev/null +++ b/meta-agl-core/classes/image_types_wic_workaround.bbclass @@ -0,0 +1,32 @@ +# This is a workaround for the race condition between do_image_wic and other +# do_image_* tasks. It ensures that no other do_image_* task can be running and +# reading the rootfs directory at the same time as do_image_wic is modifying +# the /etc/fstab file in the rootfs directory. +# +# A much better fix has been submitted upstream [1], but we can't carry those +# modifications to `scripts/lib/wic` from poky easily in meta-agl. So instead +# we have this workaround until the upstream fix is accepted and backported. +# +# Serializing the image functions as done here impacts build speed but it's +# better to be slow and correct than to be fast and wrong. +# +# [1]: https://lists.openembedded.org/g/openembedded-core/topic/patch_5_6_wic_copy_rootfs/79592787, +# https://lists.openembedded.org/g/openembedded-core/topic/patch_6_6_wic_optimise/79592788 +# and related patches. +# +# Bug-AGL: SPEC-3621 + +def get_workaround_wic_typedeps(d): + if d.getVar('USING_WIC'): + fstypes = d.getVar('IMAGE_FSTYPES').split() + basetypes = set() + for fs in fstypes: + # Add the basetype to our set of basetypes in use + t = fs.split('.')[0] + if t != "wic": + basetypes.add(t) + return ' '.join(basetypes) + else: + return '' + +IMAGE_TYPEDEP_wic += "${@get_workaround_wic_typedeps(d)}" diff --git a/meta-agl-core/conf/distro/poky-agl.conf b/meta-agl-core/conf/distro/poky-agl.conf index 6d25af90f..f2b622190 100644 --- a/meta-agl-core/conf/distro/poky-agl.conf +++ b/meta-agl-core/conf/distro/poky-agl.conf @@ -203,6 +203,4 @@ BBMASK += "meta-security/recipes-kernel/linux/linux-%_5.%.bbappend" # do_image_tar and do_image_ext4 can run in parallel # This needs to be fixed upstream: # See https://bugzilla.yoctoproject.org/show_bug.cgi?id=13994 -# For convenience restricted to ext4 and tar image types. -AGL_FORBID_FSTAB_UPDATE ?= "${@bb.utils.contains_any('IMAGE_FSTYPES', 'ext4 ext4.xz tar tar.gz tar.bz2 tar.xz', '--no-fstab-update', '', d)}" -WIC_CREATE_EXTRA_ARGS_append = " ${AGL_FORBID_FSTAB_UPDATE}" +INHERIT += "image_types_wic_workaround" -- cgit 1.2.3-korg