summaryrefslogtreecommitdiffstats
path: root/target/squashfs
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 /target/squashfs
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.
Diffstat (limited to 'target/squashfs')
-rw-r--r--target/squashfs/squashfs.patch36
-rw-r--r--target/squashfs/squashfsroot.mk20
2 files changed, 16 insertions, 40 deletions
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