Makefile: allow rootfs overlays to override symbolic links
authorCarlos Santos <casantos@datacom.ind.br>
Mon, 7 May 2018 14:44:30 +0000 (11:44 -0300)
committerArnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Wed, 6 Feb 2019 16:11:02 +0000 (17:11 +0100)
Since commit 0db34529f48 we use rsync with the --keep-dirlinks option to
prevent overlays from accidentally overwriding /{usr,bin,sbin,lib} links
when BR2_ROOTFS_MERGED_USR option is enabled. Unfortunately this also
prevents replacing a symlink by a directory on purpose (e.g. /var/log,
to persist system logs).

Steps to reproduce:

- enable BR2_ROOTFS_MERGED_USR and BR2_PACKAGE_SKELETON_INIT_SYSV
- mkdir some_path/rootfs-overlay/var/log
- enable BR2_ROOTFS_OVERLAY="some_path/rootfs-overlay"
- run 'make'
- 'target/var/log' is still a symlink to '../tmp', not a directory

The --keep-dirlinks option can be dropped, since we run sanity checks
on overlays. Now the rsync invocation is identical to the SYSTEM_RSYNC
logic we have in system/system.mk, so use that variable.

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Makefile

index 752a850753c6e3c622ba5acdba9e6c0d78e00129..0d2659c46edcbd5246b1d1d5923016e7c1a9850f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -800,9 +800,7 @@ endif # merged /usr
 
        @$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \
                $(call MESSAGE,"Copying overlay $(d)"); \
-               rsync -a --ignore-times --keep-dirlinks $(RSYNC_VCS_EXCLUSIONS) \
-                       --chmod=u=rwX,go=rX --exclude .empty --exclude '*~' \
-                       $(d)/ $(TARGET_DIR)$(sep))
+               $(call SYSTEM_RSYNC,$(d),$(TARGET_DIR))$(sep))
 
        @$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_BUILD_SCRIPT)), \
                $(call MESSAGE,"Executing post-build script $(s)"); \