Message ID | 20131015132102.GA20116@gmail.com |
---|---|
State | Rejected |
Headers | show |
Dear Andrew Ruder, On Tue, 15 Oct 2013 08:21:02 -0500, Andrew Ruder wrote: > This adds a BR2_ROOTFS_FAKE_ROOT_SCRIPT (similar to Should be FAKEROOT, not FAKE_ROOT (if we validate the whole proposal this patch is doing). > BR2_ROOTFS_POST_BUILD_SCRIPT and BR2_ROOTFS_POST_IMAGE_SCRIPT). This > script is called inside the fakeroot which allows the script to change > permissions, create device nodes, etc. > > Signed-off-by: Andrew Ruder <andrew.ruder@elecsyscorp.com> > --- > I am using this script as part of a configuration that creates a bunch > of directories that need to have specific ownership. I can create > the directories in a post-build script, but permissions needed to be > done in a fakeroot environment. Didn't see any other way to hook into > the fakeroot. Well, the conventional way would be to have those directories created by packages (and they can use the <pkg>_PERMISSIONS mechanism to get proper ownership or permissions). Or, if they really don't belong to any package, create them in the post build script, and have a device table assign the permission and ownership. Thomas
On Tue, Oct 15, 2013 at 04:19:41PM +0200, Thomas Petazzoni wrote: > Well, the conventional way would be to have those directories created > by packages (and they can use the <pkg>_PERMISSIONS mechanism to get > proper ownership or permissions). Or, if they really don't belong to > any package, create them in the post build script, and have a device > table assign the permission and ownership. I didn't realize the device table functionality could modify arbitrary file/directory ownerships but looking through the makedevs source code that DOES appear to be true. I guess let's just consider this thread as a question disguised as a poorly spelled patch. :) Cheers, Andy
Andrew, All, On 2013-10-18 15:23 -0500, Andrew Ruder spake thusly: > On Tue, Oct 15, 2013 at 04:19:41PM +0200, Thomas Petazzoni wrote: > > Well, the conventional way would be to have those directories created > > by packages (and they can use the <pkg>_PERMISSIONS mechanism to get > > proper ownership or permissions). Or, if they really don't belong to > > any package, create them in the post build script, and have a device > > table assign the permission and ownership. > > I didn't realize the device table functionality could modify arbitrary > file/directory ownerships but looking through the makedevs source code > that DOES appear to be true. Or you could have had a look at the manual: http://buildroot.net/downloads/manual/manual.html#makedev-syntax The first sentence in this section reads: The makedev syntax is used in several places in Buildroot to define changes to be made for permissions. [...] Regards, Yann E. MORIN.
On Fri, Oct 18, 2013 at 10:49:20PM +0200, Yann E. MORIN wrote: > Or you could have had a look at the manual: > http://buildroot.net/downloads/manual/manual.html#makedev-syntax > > The first sentence in this section reads: Yes, taken out of context it looks perfect, but put the whole sentence in there and it sounds like it is specifically for device node creation. > The makedev syntax is used in several places in Buildroot to define > changes to be made for permissions, or which device files to create > and how to create them, ***in order to avoid calls to mknod.*** Emphasis mine, of course. - Andy
Andrew, All, On 2013-10-18 16:35 -0500, Andrew Ruder spake thusly: > On Fri, Oct 18, 2013 at 10:49:20PM +0200, Yann E. MORIN wrote: > > Or you could have had a look at the manual: > > http://buildroot.net/downloads/manual/manual.html#makedev-syntax > > > > The first sentence in this section reads: > > Yes, taken out of context it looks perfect, but put the whole sentence > in there and it sounds like it is specifically for device node creation. > > > The makedev syntax is used in several places in Buildroot to define > > changes to be made for permissions, or which device files to create > > and how to create them, ***in order to avoid calls to mknod.*** > > Emphasis mine, of course. OK, maybe previous knowledge of the features makes me read the section in a way that makes it explicit for me. It might not look the same to others. Then, perhaps you could provide a better wording for this? ;-) Regards, Yann E. MORIN.
On 15/10/13 15:21, Andrew Ruder wrote: > This adds a BR2_ROOTFS_FAKE_ROOT_SCRIPT (similar to > BR2_ROOTFS_POST_BUILD_SCRIPT and BR2_ROOTFS_POST_IMAGE_SCRIPT). This > script is called inside the fakeroot which allows the script to change > permissions, create device nodes, etc. > > Signed-off-by: Andrew Ruder <andrew.ruder@elecsyscorp.com> > --- > I am using this script as part of a configuration that creates a bunch > of directories that need to have specific ownership. I can create > the directories in a post-build script, but permissions needed to be > done in a fakeroot environment. Didn't see any other way to hook into > the fakeroot. Hi Andrew, At the buildroot developer meeting we decided to drop this patch. For your particular use case, there is a better way to do it with <pkg>_PERMISSIONS or with the device table. We also discussed other use cases, like doing an rsync inside the fakeroot, but these use cases can just untar the tarball in a post-image script and work on that. And finally, having all these different POST_xxx steps makes things confusing. If you still see a reason to add this feature, don't hesitate to tell us. Regards, Arnout
diff --git a/fs/common.mk b/fs/common.mk index 4dab7ea..dfcc647 100644 --- a/fs/common.mk +++ b/fs/common.mk @@ -58,6 +58,8 @@ endif endif printf '$(subst $(sep),\n,$(PACKAGES_USERS))' > $(USERS_TABLE) $(TOPDIR)/support/scripts/mkusers $(USERS_TABLE) $(TARGET_DIR) >> $(FAKEROOT_SCRIPT) + $$(foreach s, $$(call qstrip,$$(BR2_ROOTFS_FAKE_ROOT_SCRIPT)), \ + echo $$(s) $$(TARGET_DIR) $$(call qstrip,$$(BR2_ROOTFS_POST_SCRIPT_ARGS)) "|| exit" >> $$(FAKEROOT_SCRIPT)$$(sep)) echo "$$(ROOTFS_$(2)_CMD)" >> $$(FAKEROOT_SCRIPT) chmod a+x $$(FAKEROOT_SCRIPT) $$(HOST_DIR)/usr/bin/fakeroot -- $$(FAKEROOT_SCRIPT) diff --git a/system/Config.in b/system/Config.in index 4c80087..ef9c689 100644 --- a/system/Config.in +++ b/system/Config.in @@ -312,9 +312,23 @@ config BR2_ROOTFS_POST_IMAGE_SCRIPT first argument. The script is executed from the main Buildroot source directory as the current directory. +config BR2_ROOTFS_FAKE_ROOT_SCRIPT + string "Custom scripts to run during fakeroot image creation" + default "" + help + Specify a space-separated list of scripts to be run after the build + has finished at the end of the fakeroot filesystem image creation. + + This gives a final chance to change permissions, create device + nodes, etc. + + These scripts are called with the target directory name as first + argument. Make sure the exit code of those scripts are 0, otherwise + make will stop after calling them. + config BR2_ROOTFS_POST_SCRIPT_ARGS string "Extra post-{build,image} arguments" - depends on BR2_ROOTFS_POST_BUILD_SCRIPT != "" || BR2_ROOTFS_POST_IMAGE_SCRIPT != "" + depends on BR2_ROOTFS_POST_BUILD_SCRIPT != "" || BR2_ROOTFS_POST_IMAGE_SCRIPT != "" || BR2_ROOTFS_FAKE_ROOT_SCRIPT != "" help Pass these aditional arguments to each post-build or post-image scripts.
This adds a BR2_ROOTFS_FAKE_ROOT_SCRIPT (similar to BR2_ROOTFS_POST_BUILD_SCRIPT and BR2_ROOTFS_POST_IMAGE_SCRIPT). This script is called inside the fakeroot which allows the script to change permissions, create device nodes, etc. Signed-off-by: Andrew Ruder <andrew.ruder@elecsyscorp.com> --- I am using this script as part of a configuration that creates a bunch of directories that need to have specific ownership. I can create the directories in a post-build script, but permissions needed to be done in a fakeroot environment. Didn't see any other way to hook into the fakeroot. fs/common.mk | 2 ++ system/Config.in | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-)