Use fakeroot and makedevs to fake mksquashfs into building properly setup file
authorEric Andersen <andersen@codepoet.org>
Fri, 24 Jun 2005 05:02:00 +0000 (05:02 -0000)
committerEric Andersen <andersen@codepoet.org>
Fri, 24 Jun 2005 05:02:00 +0000 (05:02 -0000)
permissions and device nodes into the target rootfs without needing to be root.

package/fakeroot/fakeroot.mk
target/makedevs/makedevs.mk
target/squashfs/squashfs.patch [deleted file]
target/squashfs/squashfsroot.mk

index e3b8d7343173ace772ec4bd2a82b5f2b5223ff81..3ab83dffaff1a247c65e1cc8f3f583ba7c54986c 100644 (file)
@@ -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
 
index f8675db2f7cd266136b8a60b1a74d7738f5a010b..cfc19d0ec55a75ebce1fc565979f8899616f8b4b 100644 (file)
@@ -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 (file)
index ea75a7f..0000000
+++ /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:
index 300e07091d56ebb579dc3965c5a24948eebb3bcf..50aaf58fedd2454c232b726d7d2e7275523b6e14 100644 (file)
@@ -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