diff options
author | Ming Liu <liu.ming50@gmail.com> | 2021-06-19 13:01:15 +0200 |
---|---|---|
committer | Ming Liu <liu.ming50@gmail.com> | 2021-06-19 14:59:43 +0200 |
commit | bc8f39fd0dc420feb467ab52acdfde068a36f54f (patch) | |
tree | 131c3dcc6a39423aa6d086698a9f10d81ba2e920 | |
parent | 05e0075ffe155c6177ac5402e8b05ec5e7cb556d (diff) | |
download | meta-updater-bc8f39fd0dc420feb467ab52acdfde068a36f54f.tar.gz |
image_types_ostree.bbclass: drop prepare_ostree_rootfs prefunc
The purpose of prepare_ostree_rootfs prefunc is to ensure
do_image_rootfs runs from a clean ${OSTREE_ROOTFS} and call
oe.path.copyhardlinktree from ${IMAGE_ROOTFS} to ${OSTREE_ROOTFS}.
We dont have to maintain a prefunc to achieve that, it could be easily
done in do_image_ostree itself.
But the major reason for this change is to avoid hard links from
${IMAGE_ROOTFS} to ${OSTREE_ROOTFS}, which might lead to a Pseudo
abortion in some cases, which was observed when IMA/EVM is enabled
in rootfs.
There was a commit aiming to fix the Pseudo abortion, commit db099053:
[ image_types_ostree.bbclass: add fakeroot varflag to prepare_ostree_rootfs ]
but it's incomplete per later tests, there is still the case some old
inodes being used in ${IMAGE_ROOTFS} when do_rootfs runs, which causes
'rm -rf ${IMAGE_ROOTFS}' fail on a Pseudo abortion error.
This fixes the Pseudo abortion completely.
Signed-off-by: Ming Liu <liu.ming50@gmail.com>
-rw-r--r-- | classes/image_types_ostree.bbclass | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/classes/image_types_ostree.bbclass b/classes/image_types_ostree.bbclass index 31a4491..68fb563 100644 --- a/classes/image_types_ostree.bbclass +++ b/classes/image_types_ostree.bbclass | |||
@@ -19,24 +19,13 @@ CONVERSIONTYPES_append = " tar" | |||
19 | 19 | ||
20 | TAR_IMAGE_ROOTFS_task-image-ostree = "${OSTREE_ROOTFS}" | 20 | TAR_IMAGE_ROOTFS_task-image-ostree = "${OSTREE_ROOTFS}" |
21 | 21 | ||
22 | python prepare_ostree_rootfs() { | ||
23 | import oe.path | ||
24 | import shutil | ||
25 | |||
26 | ostree_rootfs = d.getVar("OSTREE_ROOTFS") | ||
27 | if os.path.lexists(ostree_rootfs): | ||
28 | bb.utils.remove(ostree_rootfs, True) | ||
29 | |||
30 | # Copy required as we change permissions on some files. | ||
31 | image_rootfs = d.getVar("IMAGE_ROOTFS") | ||
32 | oe.path.copyhardlinktree(image_rootfs, ostree_rootfs) | ||
33 | } | ||
34 | prepare_ostree_rootfs[fakeroot] = "1" | ||
35 | |||
36 | do_image_ostree[dirs] = "${OSTREE_ROOTFS}" | 22 | do_image_ostree[dirs] = "${OSTREE_ROOTFS}" |
37 | do_image_ostree[prefuncs] += "prepare_ostree_rootfs" | 23 | do_image_ostree[cleandirs] = "${OSTREE_ROOTFS}" |
38 | do_image_ostree[depends] = "coreutils-native:do_populate_sysroot virtual/kernel:do_deploy ${INITRAMFS_IMAGE}:do_image_complete" | 24 | do_image_ostree[depends] = "coreutils-native:do_populate_sysroot virtual/kernel:do_deploy ${INITRAMFS_IMAGE}:do_image_complete" |
39 | IMAGE_CMD_ostree () { | 25 | IMAGE_CMD_ostree () { |
26 | # Copy required as we change permissions on some files. | ||
27 | tar --xattrs --xattrs-include='*' -cf - -S -C ${IMAGE_ROOTFS} -p . | tar --xattrs --xattrs-include='*' -xf - -C ${OSTREE_ROOTFS} | ||
28 | |||
40 | for d in var/*; do | 29 | for d in var/*; do |
41 | if [ "${d}" != "var/local" ]; then | 30 | if [ "${d}" != "var/local" ]; then |
42 | rm -rf ${d} | 31 | rm -rf ${d} |