Skip to contentSkip to conversation

fs/common.mk: Add support for fakeroot script

RFC PATCH New Andrew Ruder 5 participants 7 messages Oct 15, 2013 – Oct 27, 2013 VFS

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/1 fs/common.mk: Add support for fakeroot script

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.

---
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(-)
fs/common.mk +2 -0
index 4dab7ea..dfcc647 100644
@@ -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)
system/Config.in +15 -1
index 4c80087..ef9c689 100644
@@ -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.
Signature · 1 line
1.8.4.rc3
#1 lore raw

RFC PATCH 1/1 fs/common.mk: Add support for fakeroot script

Dear Andrew Ruder,

Quoted 1 line · Andrew Ruder

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).

Quoted 11 lines

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.

---
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

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

RFC PATCH 1/1 fs/common.mk: Add support for fakeroot script

Quoted 5 lines · Thomas Petazzoni

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

#3 lore raw

RFC PATCH 1/1 fs/common.mk: Add support for fakeroot script

Andrew, All,

On 2013-10-18 15:23 -0500, Andrew Ruder spake thusly:

Quoted 10 lines · Thomas Petazzoni
Quoted 5 lines

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.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#4 lore raw

RFC PATCH 1/1 fs/common.mk: Add support for fakeroot script

Quoted 4 lines · Yann E. MORIN

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.

Quoted 3 lines

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

#5 lore raw

RFC PATCH 1/1 fs/common.mk: Add support for fakeroot script

Andrew, All,

On 2013-10-18 16:35 -0500, Andrew Ruder spake thusly:

Quoted 6 lines · Yann E. MORIN
Quoted 4 lines

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:

Quoted 8 lines

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.

Quoted 3 lines

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.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#6 lore raw

RFC PATCH 1/1 fs/common.mk: Add support for fakeroot script

In reply to Andrew Ruder
Quoted 5 lines · Andrew Ruder

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.

Quoted 7 lines

---
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

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F