e745c0b92d
When using BR2_ROOTFS_DEVICE_TABLE to change ownership of /etc, like so: /etc r -1 root wheel - - - - - makedevs fails due to trying to chown() a dangling symlink: makedevs: chown failed for /src/myLinux/output/build/buildroot-fs/ext2/target/etc/mtab: No such file or directory makedevs: line 25: recursive failed for /src/myLinux/output/build/buildroot-fs/ext2/target/etc: No such file or directory make[2]: *** [fs/ext2/ext2.mk:63: /src/myLinux/output/images/rootfs.ext2] Error 1 make[1]: *** [Makefile:84: _all] Error 2 make[1]: Leaving directory '/src/myLinux/buildroot' This patch changes chown() to lchown() in two cases in makedevs.c when the argument can be a symlink, dangling or not. In case the recursive operation includes a chmod() as well, explicitly exclude symlinks that are dangling, because chmod() always operates on the link target. Signed-off-by: Joachim Wiberg <troglobit@gmail.com> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr> |
||
---|---|---|
.. | ||
makedevs.c | ||
makedevs.mk | ||
README |
When building a target filesystem, it is desirable to not have to become root and then run 'mknod' a thousand times. Using a device table you can create device nodes and directories "on the fly". You can do all sorts of interesting things with a device table file. For example, if you want to adjust the permissions on a particular file you can just add an entry like: /sbin/foobar f 2755 0 0 - - - - - and (assuming the file /sbin/foobar exists) it will be made setuid root (regardless of what its permissions are on the host filesystem. Furthermore, you can use a single table entry to create a many device minors. For example, if I wanted to create /dev/hda and /dev/hda[0-15] I could just use the following two table entries: /dev/hda b 640 0 0 3 0 0 0 - /dev/hda b 640 0 0 3 1 1 1 15 Device table entries take the form of: <name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count> where name is the file name, type can be one of: f: A regular file d: Directory c: Character special device file b: Block special device file p: Fifo (named pipe) uid is the user id for the target file, gid is the group id for the target file. The rest of the entries (major, minor, etc) apply only to device special files.