Commit ee66f552 authored by Eric Andersen's avatar Eric Andersen
Browse files

rework fakeroot handling to avoid races during parallel make causing several

fakeroot instances stomping eachother's temp files.
parent f333602f
Loading
Loading
Loading
Loading
+15 −12
Original line number Diff line number Diff line
@@ -58,30 +58,33 @@ ifeq ($(strip $(BR2_sparc)),y)
CRAMFS_ENDIANNESS=-b
endif

cramfsroot: host-fakeroot makedevs $(STAGING_DIR)/fakeroot.env cramfs
CRAMFS_TARGET=$(IMAGE).cramfs

cramfsroot: host-fakeroot makedevs cramfs
	#-@find $(TARGET_DIR)/lib -type f -name \*.so\* | xargs $(STRIP) --strip-unneeded 2>/dev/null || true;
	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
	@rm -rf $(TARGET_DIR)/usr/man
	@rm -rf $(TARGET_DIR)/usr/info
	-/sbin/ldconfig -r $(TARGET_DIR) 2>/dev/null
	# Use fakeroot to pretend all target binaries are owned by root
	rm -f $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET)
	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET)
	-$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		-i $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) -- \
		chown -R root:root $(TARGET_DIR)
	# Use fakeroot to pretend to create all needed device nodes
	$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		$(STAGING_DIR)/bin/makedevs \
		-d $(TARGET_DEVICE_TABLE) \
		$(TARGET_DIR)
		-i $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) -- \
		$(STAGING_DIR)/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)
	# Use fakeroot so mkcramfs believes the previous fakery
	$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		-i $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET) -- \
	    $(CRAMFS_DIR)/mkcramfs -q $(CRAMFS_ENDIANNESS) \
		$(TARGET_DIR) $(IMAGE).cramfs
		$(TARGET_DIR) $(CRAMFS_TARGET)
	-@rm -f $(STAGING_DIR)/_fakeroot.$(CRAMFS_TARGET)

cramfsroot-source: cramfs-source

+15 −14
Original line number Diff line number Diff line
@@ -65,24 +65,24 @@ else
EXT2_TARGET := $(EXT2_BASE)
endif

$(EXT2_BASE): host-fakeroot makedevs $(STAGING_DIR)/fakeroot.env genext2fs
$(EXT2_BASE): host-fakeroot makedevs genext2fs
	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
	@rm -rf $(TARGET_DIR)/usr/man
	@rm -rf $(TARGET_DIR)/usr/share/man
	@rm -rf $(TARGET_DIR)/usr/info
	-/sbin/ldconfig -r $(TARGET_DIR) 2>/dev/null
	# Use fakeroot to pretend all target binaries are owned by root
	rm -f $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET)
	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET)
	-$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		-i $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) -- \
		chown -R root:root $(TARGET_DIR)
	# Use fakeroot to pretend to create all needed device nodes
	$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		$(STAGING_DIR)/bin/makedevs \
		-d $(TARGET_DEVICE_TABLE) \
		$(TARGET_DIR)
		-i $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) -- \
		$(STAGING_DIR)/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)
	# Use fakeroot so genext2fs believes the previous fakery
ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)),0)
	GENEXT2_REALSIZE=`LANG=C du -l -s -c -k $(TARGET_DIR) | grep total | sed -e "s/total//"`; \
@@ -92,8 +92,8 @@ ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)),0)
	GENEXT2_INODES=`expr $$GENEXT2_ADDTOINODESIZE + 400`; \
	set -x; \
	$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		-i $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) -- \
	    $(GENEXT2_DIR)/genext2fs \
		-b $$GENEXT2_SIZE \
		-i $$GENEXT2_INODES \
@@ -101,13 +101,14 @@ ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT2_BLOCKS)),0)
		$(EXT2_OPTS) $(EXT2_BASE)
else
	$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		-i $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET) -- \
	    $(GENEXT2_DIR)/genext2fs \
		-d $(TARGET_DIR) \
		$(EXT2_OPTS) \
		$(EXT2_BASE)
endif
	-@rm -f $(STAGING_DIR)/_fakeroot.$(EXT2_TARGET)

$(EXT2_BASE).gz: $(EXT2_BASE)
	@gzip --best -fv $(EXT2_BASE)
+14 −6
Original line number Diff line number Diff line
@@ -52,22 +52,30 @@ ifeq ($(strip $(BR2_TARGET_ROOTFS_ISO9660_SQUASH)),y)
ISO9660_OPTS+=-U
endif

$(ISO9660_TARGET): host-fakeroot $(STAGING_DIR)/fakeroot.env $(EXT2_TARGET) grub mkisofs
$(ISO9660_TARGET): host-fakeroot $(EXT2_TARGET) grub mkisofs
	mkdir -p $(ISO9660_TARGET_DIR)
	mkdir -p $(ISO9660_TARGET_DIR)/boot/grub
	cp $(GRUB_DIR)/stage2/stage2_eltorito $(ISO9660_TARGET_DIR)/boot/grub/
	cp $(ISO9660_BOOT_MENU) $(ISO9660_TARGET_DIR)/boot/grub/menu.lst
	cp $(LINUX_KERNEL) $(ISO9660_TARGET_DIR)/kernel
	cp $(EXT2_TARGET) $(ISO9660_TARGET_DIR)/initrd
	# Use fakeroot to pretend all target binaries are owned by root
	rm -f $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET)
	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET)
	-$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		-i $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET) -- \
		chown -R root:root $(ISO9660_TARGET_DIR)
	-$(MKISOFS_TARGET) \
		-R \
		-b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table \
	# Use fakeroot so mkisofs believes the previous fakery
	$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET) -- \
	    $(MKISOFS_TARGET) \
		-R -b boot/grub/stage2_eltorito -no-emul-boot \
		-boot-load-size 4 -boot-info-table \
		-o $(ISO9660_TARGET) \
		$(ISO9660_TARGET_DIR)
	-@rm -f $(STAGING_DIR)/_fakeroot.$(ISO9660_TARGET)

iso9660root: $(ISO9660_TARGET)
	echo $(ISO9660_TARGET)
+13 −14
Original line number Diff line number Diff line
@@ -38,32 +38,31 @@ JFFS2_TARGET := $(subst ",,$(BR2_TARGET_ROOTFS_JFFS2_OUTPUT))
# value of MKFS_JFFS2 to either the previously installed copy or the one
# just built.
#
$(JFFS2_TARGET): host-fakeroot makedevs $(STAGING_DIR)/fakeroot.env mtd-host
$(JFFS2_TARGET): host-fakeroot makedevs mtd-host
	-@find $(TARGET_DIR) -type f -perm +111 | xargs $(STRIP) 2>/dev/null || true;
	@rm -rf $(TARGET_DIR)/usr/man
	@rm -rf $(TARGET_DIR)/usr/share/man
	@rm -rf $(TARGET_DIR)/usr/info
	-/sbin/ldconfig -r $(TARGET_DIR) 2>/dev/null
	# Use fakeroot to pretend all target binaries are owned by root
	rm -f $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET)
	cat $(STAGING_DIR)/.fakeroot* > $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET)
	-$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		-i $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) -- \
		chown -R root:root $(TARGET_DIR)
	# Use fakeroot to pretend to create all needed device nodes
	$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		$(STAGING_DIR)/bin/makedevs \
		-d $(TARGET_DEVICE_TABLE) \
		$(TARGET_DIR)
		-i $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) -- \
		$(STAGING_DIR)/bin/makedevs -d $(TARGET_DEVICE_TABLE) $(TARGET_DIR)
	# Use fakeroot so mkfs.jffs2 believes the previous fakery
	$(STAGING_DIR)/usr/bin/fakeroot \
		-i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		$(MKFS_JFFS2) \
			$(JFFS2_OPTS) \
			-d $(BUILD_DIR)/root \
			-o $(JFFS2_TARGET)
		-i $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) \
		-s $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET) -- \
	    $(MKFS_JFFS2) $(JFFS2_OPTS) \
			-d $(BUILD_DIR)/root -o $(JFFS2_TARGET)
	-@rm -f $(STAGING_DIR)/_fakeroot.$(JFFS2_TARGET)
	@ls -l $(JFFS2_TARGET)

JFFS2_COPYTO := $(strip $(subst ",,$(BR2_TARGET_ROOTFS_JFFS2_COPYTO)))
+1 −5
Original line number Diff line number Diff line
@@ -13,17 +13,13 @@ $(MAKEDEVS_DIR)/makedevs.c: target/makedevs/makedevs.c
	cp target/makedevs/makedevs.c $(MAKEDEVS_DIR)

$(MAKEDEVS_DIR)/makedevs: $(MAKEDEVS_DIR)/makedevs.c
	$(HOSTCC) -Wall -Werror -O2 $(MAKEDEVS_DIR)/makedevs.c -o $(MAKEDEVS_DIR)/makedevs
	gcc -Wall -Werror -O2 $(MAKEDEVS_DIR)/makedevs.c -o $(MAKEDEVS_DIR)/makedevs
	touch -c $(MAKEDEVS_DIR)/makedevs

$(STAGING_DIR)/bin/makedevs: $(MAKEDEVS_DIR)/makedevs
	$(INSTALL) -m 755 $(MAKEDEVS_DIR)/makedevs $(STAGING_DIR)/bin/makedevs
	touch -c $(STAGING_DIR)/bin/makedevs

$(STAGING_DIR)/fakeroot.env:
	cat $(STAGING_DIR)/.fakeroot.* > $(STAGING_DIR)/fakeroot.env
	touch -c $(STAGING_DIR)/fakeroot.env

makedevs: $(STAGING_DIR)/bin/makedevs

makedevs-source:
Loading