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

Use fakeroot and makedevs to fake mksquashfs into building properly setup file

permissions and device nodes into the target rootfs without needing to be root.
parent e83529ad
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -40,8 +40,6 @@ $(FAKEROOT_DIR1)/faked: $(FAKEROOT_DIR1)/.configured

$(STAGING_DIR)/usr/bin/fakeroot: $(FAKEROOT_DIR1)/faked
	$(MAKE) DESTDIR=$(STAGING_DIR) -C $(FAKEROOT_DIR1) install
	#-mv $(TARGET_DIR)/usr/bin/$(ARCH)-linux-faked $(TARGET_DIR)/usr/bin/faked
	#-mv $(TARGET_DIR)/usr/bin/$(ARCH)-linux-fakeroot $(TARGET_DIR)/usr/bin/fakeroot

host-fakeroot: uclibc $(STAGING_DIR)/usr/bin/fakeroot

+5 −1
Original line number Diff line number Diff line
@@ -15,7 +15,11 @@ $(MAKEDEVS_DIR)/makedevs: $(MAKEDEVS_DIR)
	gcc -Wall -O2 makedevs.c -o makedevs
	touch -c $(MAKEDEVS_DIR)/makedevs

makedevs: $(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

makedevs: $(STAGING_DIR)/bin/makedevs

makedevs-source:

target/squashfs/squashfs.patch

deleted100644 → 0
+0 −36
Original line number Diff line number Diff line
This is a stupid little patch adding an option to change all uid/gid to
root/root in the generated filesystem.  We really need to teach mksquashfs
about device tables though...

--- squashfs1.3r3/squashfs-tools/mksquashfs.c-dist	2004-03-29 20:35:37.000000000 -0600
+++ squashfs1.3r3/squashfs-tools/mksquashfs.c	2004-03-29 22:28:51.000000000 -0600
@@ -136,6 +136,8 @@
 	stotal_bytes, stotal_inode_bytes, stotal_directory_bytes, sinode_count, sfile_count, ssym_count, sdev_count, sdir_count, sdup_files;
 int restore = 0;
 
+unsigned int root_owned = 0;
+
 /*flag whether destination file is a block device */
 int block_device = 0;
 
@@ -421,6 +423,11 @@
 		return SQUASHFS_INVALID;
 	}
 
+	if (root_owned) {
+		buf.st_uid = 0;
+		buf.st_gid = 0;
+	}
+
 	base->mode = SQUASHFS_MODE(buf.st_mode);
 	base->uid = get_uid(&file_type, (squashfs_uid) buf.st_uid);
 	base->inode_type = file_type;
@@ -1268,6 +1275,8 @@
 			root_name = argv[i];
 		} else if(strcmp(argv[i], "-version") == 0) {
 			VERSION();
+		} else if (strcmp(argv[i], "-root-owned") == 0) {
+			root_owned = TRUE;
 		} else {
 			ERROR("%s: invalid option\n\n", argv[0]);
 printOptions:
+16 −4
Original line number Diff line number Diff line
@@ -34,13 +34,25 @@ squashfs-dirclean:
#
#############################################################

squashfsroot: squashfs
	#-@find $(TARGET_DIR)/lib -type f -name \*.so\* | xargs $(STRIP) --strip-unneeded 2>/dev/null || true;
squashfsroot: squashfs host-fakeroot makedevs
	rm -f $(STAGING_DIR)/fakeroot.env
	touch $(STAGING_DIR)/fakeroot.env
	# Use fakeroot to pretend all target binaries are owned by root
	$(STAGING_DIR)/usr/bin/fakeroot -i $(STAGING_DIR)/fakeroot.env \
		-s $(STAGING_DIR)/fakeroot.env -- \
		find $(TARGET_DIR) | xargs chown -R root:root
	# 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 -r $(TARGET_DIR) \
		target/default/device_table.txt
	-@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
	#$(SQUASHFS_DIR)/squashfs-tools/mksquashfs -q -D target/default/device_table.txt $(TARGET_DIR) $(IMAGE)
	$(SQUASHFS_DIR)/squashfs-tools/mksquashfs $(TARGET_DIR) $(IMAGE).squashfs -noappend -root-owned
	# Use fakeroot to fake out mksquashfs per the previous fakery
	$(STAGING_DIR)/usr/bin/fakeroot -i $(STAGING_DIR)/fakeroot.env -- \
		$(SQUASHFS_DIR)/squashfs-tools/mksquashfs $(TARGET_DIR) \
		$(IMAGE).squashfs -noappend

squashfsroot-source: squashfs-source