Skip to content

Commit

Permalink
image_types_ostree.bbclass: drop prepare_ostree_rootfs prefunc
Browse files Browse the repository at this point in the history
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 db09905:
[ 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 <[email protected]>
  • Loading branch information
liuming50 committed Jun 19, 2021
1 parent 05e0075 commit bc8f39f
Showing 1 changed file with 4 additions and 15 deletions.
19 changes: 4 additions & 15 deletions classes/image_types_ostree.bbclass
Original file line number Diff line number Diff line change
Expand Up @@ -19,24 +19,13 @@ CONVERSIONTYPES_append = " tar"

TAR_IMAGE_ROOTFS_task-image-ostree = "${OSTREE_ROOTFS}"

python prepare_ostree_rootfs() {
import oe.path
import shutil

ostree_rootfs = d.getVar("OSTREE_ROOTFS")
if os.path.lexists(ostree_rootfs):
bb.utils.remove(ostree_rootfs, True)

# Copy required as we change permissions on some files.
image_rootfs = d.getVar("IMAGE_ROOTFS")
oe.path.copyhardlinktree(image_rootfs, ostree_rootfs)
}
prepare_ostree_rootfs[fakeroot] = "1"

do_image_ostree[dirs] = "${OSTREE_ROOTFS}"
do_image_ostree[prefuncs] += "prepare_ostree_rootfs"
do_image_ostree[cleandirs] = "${OSTREE_ROOTFS}"
do_image_ostree[depends] = "coreutils-native:do_populate_sysroot virtual/kernel:do_deploy ${INITRAMFS_IMAGE}:do_image_complete"
IMAGE_CMD_ostree () {
# Copy required as we change permissions on some files.
tar --xattrs --xattrs-include='*' -cf - -S -C ${IMAGE_ROOTFS} -p . | tar --xattrs --xattrs-include='*' -xf - -C ${OSTREE_ROOTFS}

for d in var/*; do
if [ "${d}" != "var/local" ]; then
rm -rf ${d}
Expand Down

0 comments on commit bc8f39f

Please sign in to comment.