summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMing Liu <liu.ming50@gmail.com>2021-06-19 13:01:15 +0200
committerMing Liu <liu.ming50@gmail.com>2021-06-19 14:59:43 +0200
commitbc8f39fd0dc420feb467ab52acdfde068a36f54f (patch)
tree131c3dcc6a39423aa6d086698a9f10d81ba2e920
parent05e0075ffe155c6177ac5402e8b05ec5e7cb556d (diff)
downloadmeta-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.bbclass19
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
20TAR_IMAGE_ROOTFS_task-image-ostree = "${OSTREE_ROOTFS}" 20TAR_IMAGE_ROOTFS_task-image-ostree = "${OSTREE_ROOTFS}"
21 21
22python 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}
34prepare_ostree_rootfs[fakeroot] = "1"
35
36do_image_ostree[dirs] = "${OSTREE_ROOTFS}" 22do_image_ostree[dirs] = "${OSTREE_ROOTFS}"
37do_image_ostree[prefuncs] += "prepare_ostree_rootfs" 23do_image_ostree[cleandirs] = "${OSTREE_ROOTFS}"
38do_image_ostree[depends] = "coreutils-native:do_populate_sysroot virtual/kernel:do_deploy ${INITRAMFS_IMAGE}:do_image_complete" 24do_image_ostree[depends] = "coreutils-native:do_populate_sysroot virtual/kernel:do_deploy ${INITRAMFS_IMAGE}:do_image_complete"
39IMAGE_CMD_ostree () { 25IMAGE_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}