summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2005-06-24 05:02:00 +0000
committerEric Andersen <andersen@codepoet.org>2005-06-24 05:02:00 +0000
commitafcdf8a01a2d54edb7a217f8c7c1e74e1fb8758b (patch)
tree5ca20b55bb4894ed6d91282e96eeaf2d77982b7f
parente83529ad36233a604b165de9c31d56137651302b (diff)
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.
-rw-r--r--package/fakeroot/fakeroot.mk2
-rw-r--r--target/makedevs/makedevs.mk6
-rw-r--r--target/squashfs/squashfs.patch36
-rw-r--r--target/squashfs/squashfsroot.mk20
4 files changed, 21 insertions, 43 deletions
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