[Buildroot] [PATCH] Makefile: Fix overlay overwriting everything

Maxime Hadjinlian maxime.hadjinlian at gmail.com
Wed Feb 10 15:58:28 UTC 2016


After bumping from a 2 years old Buildroot installation, I got the
following messages from the kernel at boot:

Failed to execute /init (error -2)

It appears that the overlay mechanisms was causing my issues.

Description:
The overlay mechanisms works by rsync'ing files from a folder specified
by the user into target.
Since c5bd8af65e50a51735eb112fed9cbe6337f14e06, /bin, /sbin and /lib are
symlinked into /usr.

Problem:
If you have an overlay that contains the directory /bin, /sbin or /lib, rsync
will erase the symlink and create a directory in its place.
The directory, say .../target/lib, would *only* contains the overlay's content.
Obviously, this causes a lot of troubles, starting with the kernel
failing to start init (because of missing shared libraries).

Solution:
Telling rsync to treat symlinked dir on the receiver side as directory
allow users to be blissfully ignorant of that problem.

Signed-off-by: Maxime Hadjinlian <maxime.hadjinlian at gmail.com>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 71735b5..2f33ddf 100644
--- a/Makefile
+++ b/Makefile
@@ -655,7 +655,7 @@ endif
 
 	@$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
 		$(call MESSAGE,"Copying overlay $(d)"); \
-		rsync -a --ignore-times $(RSYNC_VCS_EXCLUSIONS) \
+		rsync -a --keep-dirlinks --ignore-times $(RSYNC_VCS_EXCLUSIONS) \
 			--chmod=u=rwX,go=rX --exclude .empty --exclude '*~' \
 			$(d)/ $(TARGET_DIR)$(sep))
 
-- 
2.7.0



More information about the buildroot mailing list