From b2474654cf5d8796a9a9aa0c3990a674a84f1fee Mon Sep 17 00:00:00 2001 From: Christopher Spinrath <christopher.spinrath@rwth-aachen.de> Date: Tue, 1 Sep 2015 21:55:21 +0200 Subject: [PATCH] ensure partition _unmounted_ for all targets accessing the image file --- Makefile | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index b2f25ac..2eedf15 100644 --- a/Makefile +++ b/Makefile @@ -79,6 +79,17 @@ $(strip $1): image_mount_if )$(strip $1)__ignore_mount endef +#On the other hand, targets operating on the actual image file +#require that the partition is unmounted. So here we go with an +#"inverse" of ensure_mount: +define ensure_unmount = +$(eval +.PHONY : $(strip $1) $(strip $1)__ignore_mount +$(strip $1): image_umount_if + $(MAKE) $(strip $1)__ignore_mount +)$(strip $1)__ignore_mount +endef + RSYNC=rsync -a LZMA_FLAGS=-T 0 @@ -361,7 +372,7 @@ initrd_pack : $(ARCH_DIR)$(INITRD_TARGET) $(call gentargets,$(INITRD_TARGET)) : $(call archdir,%)$(STATE_DIR)/initrd_remastered cd "$(call archdir,$*)$(INITRD)" && find | cpio -H newc -o | lzma $(LZMA_FLAGS) -z > "$(call archdir,$*)$(INITRD_TARGET)" -clean_really_all: iso_clean_both rootfs_clean_both rootfs_common_clean initrd_clean_both image_clean +$(call ensure_unmount,clean_really_all): iso_clean_both rootfs_clean_both rootfs_common_clean initrd_clean_both image_clean $(call ensure_mount,image_git) $(IMAGE_DIR)/.git: |$(WORKSPACE) test ! -e "$(IMAGE_DIR)/.git" @@ -416,7 +427,7 @@ $(call ensure_mount,image_content): image_git_pull $(IMAGE_DIR)/.remastered $(IM @echo @echo "Image content is ready: $(IMAGE_DIR)" -image_skel_file: $(IMAGE_PART_FILE) +$(call ensure_unmount,image_skel_file): $(IMAGE_PART_FILE) $(IMAGE_PART_FILE): truncate -s "$(IMAGE_PART_SIZE)" "$@" mkfs.vfat -n "$(IMAGE_PART_LABEL)" "$@" @@ -460,7 +471,7 @@ $(IMAGE_DIR)$(GRUB_INSTALL_DIR)/.lipgrub: $(GRUB_ASSEMBLE_DIR)/grub.x86_64-efi $ $(RSYNC) --no-p --no-g --no-o "$(GRUB_ASSEMBLE_DIR)/grub.i386-efi" "$(IMAGE_DIR)/efi/boot/bootia32.efi" touch "$(IMAGE_DIR)$(GRUB_INSTALL_DIR)/.lipgrub" -image_assemble: $(IMAGE_FILE) +$(call ensure_unmount,image_assemble): $(IMAGE_FILE) $(IMAGE_FILE): $(IMAGE_PART_FILE) $(GRUB_ASSEMBLE_DIR)/mbr.img cp "$(GRUB_ASSEMBLE_DIR)/mbr.img" "$@" ddrescue --output-position=2048s --sparse "$(IMAGE_PART_FILE)" "$@" @@ -471,10 +482,10 @@ $(IMAGE_FILE): $(IMAGE_PART_FILE) $(GRUB_ASSEMBLE_DIR)/mbr.img @echo @echo "Image is ready: $@" -image_deploy: $(IMAGE_FILE) $(IMAGE_FILE).sha1sum -image_deploy_vmdk: $(IMAGE_FILE:.img=.vmdk) $(IMAGE_FILE:.img=.vmdk).sha1sum +$(call ensure_unmount,image_deploy): $(IMAGE_FILE) $(IMAGE_FILE).sha1sum +$(call ensure_unmount,image_deploy_vmdk): $(IMAGE_FILE:.img=.vmdk) $(IMAGE_FILE:.img=.vmdk).sha1sum -image_clean: +$(call ensure_unmount,image_clean): $(RM) "$(IMAGE_PART_FILE)" $(RM) -r "$(GRUB_ASSEMBLE_DIR)" @@ -612,7 +623,6 @@ help: @echo "\$$ make WORKSPACE=/media/drivewithspace config #configure lipck" @echo "# make image #main remaster process (requires several cups of coffee)" @echo "# make repo #build offline repo" - @echo "# make image_umount #umount the image partition" @echo "\$$ #copy mbr+partition to final destination" @echo "\$$ make IMAGE_FILE=/somewhere/myfinalimage.img image_deploy" @echo "\$$ #(optionally) create a vmdk version. Note that IMAGE_FILE is still the raw .img file here!" -- GitLab