summaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorEric Andersen2005-06-24 07:02:00 +0200
committerEric Andersen2005-06-24 07:02:00 +0200
commitafcdf8a01a2d54edb7a217f8c7c1e74e1fb8758b (patch)
tree5ca20b55bb4894ed6d91282e96eeaf2d77982b7f /target
parentmksquashfs is always rebuilt before generating rootfs image. The attached (diff)
downloadbuildroot-afcdf8a01a2d54edb7a217f8c7c1e74e1fb8758b.tar.gz
buildroot-afcdf8a01a2d54edb7a217f8c7c1e74e1fb8758b.tar.xz
buildroot-afcdf8a01a2d54edb7a217f8c7c1e74e1fb8758b.zip
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')
-rw-r--r--target/makedevs/makedevs.mk6
-rw-r--r--target/squashfs/squashfs.patch36
-rw-r--r--target/squashfs/squashfsroot.mk20
3 files changed, 21 insertions, 41 deletions
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