From afcdf8a01a2d54edb7a217f8c7c1e74e1fb8758b Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Fri, 24 Jun 2005 05:02:00 +0000 Subject: 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. --- package/fakeroot/fakeroot.mk | 2 -- target/makedevs/makedevs.mk | 6 +++++- target/squashfs/squashfs.patch | 36 ------------------------------------ target/squashfs/squashfsroot.mk | 20 ++++++++++++++++---- 4 files changed, 21 insertions(+), 43 deletions(-) delete mode 100644 target/squashfs/squashfs.patch diff --git a/package/fakeroot/fakeroot.mk b/package/fakeroot/fakeroot.mk index e3b8d7343..3ab83dffa 100644 --- a/package/fakeroot/fakeroot.mk +++ b/package/fakeroot/fakeroot.mk @@ -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 diff --git a/target/makedevs/makedevs.mk b/target/makedevs/makedevs.mk index f8675db2f..cfc19d0ec 100644 --- a/target/makedevs/makedevs.mk +++ b/target/makedevs/makedevs.mk @@ -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: diff --git a/target/squashfs/squashfs.patch b/target/squashfs/squashfs.patch deleted file mode 100644 index ea75a7f18..000000000 --- a/target/squashfs/squashfs.patch +++ /dev/null @@ -1,36 +0,0 @@ -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: diff --git a/target/squashfs/squashfsroot.mk b/target/squashfs/squashfsroot.mk index 300e07091..50aaf58fe 100644 --- a/target/squashfs/squashfsroot.mk +++ b/target/squashfs/squashfsroot.mk @@ -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 -- cgit v1.2.3