[openwrt/openwrt] build: fix restoring /etc/opkg with PER_DEVICE_ROOTFS

LEDE Commits lede-commits at lists.infradead.org
Thu Jan 11 09:21:01 PST 2018


jow pushed a commit to openwrt/openwrt.git, branch master:
https://git.lede-project.org/ab1785b1b2559c9f2d09d4d3ce43e11f4b828616

commit ab1785b1b2559c9f2d09d4d3ce43e11f4b828616
Author: Jo-Philipp Wich <jo at mein.io>
AuthorDate: Wed Jan 10 20:17:48 2018 +0100

    build: fix restoring /etc/opkg with PER_DEVICE_ROOTFS
    
    When generating per-device rootfs directories, the ./etc/opkg/ directory
    is moved away prior to calling opkg install, opkg remove and rootfs_prepare.
    After the opkg invocations and the rootfs_prepare macro call, the saved opkg
    config directory is supposed to be moved back to its previous ./etc/opkg
    location.
    
    The mv command however can fail to properly restore the directory under
    certain circumstances, e.g. when the prior opkg or files/ overlay copy
    operations caused a new ./etc/opkg/ directory to be created.
    
    In this case, the backed up directory (named target-dir-$hash.opkg) will be
    moved into the preexisting ./etc/opkg/ directory instead, causing the opkg
    configuration to be located in a wrong path on the final rootfs, e.g. in
    /etc/opkg/target-dir-$hash.opkg/distfeeds.conf instead of
    /etc/opkg/distfeeds.conf.
    
    Solve this problem by replacing the naive "mv" command with a recursive
    "cp -T" invocation which causes the backed up directory tree to get merged
    with the destination directory in case it already exists.
    
    Also perform the rootfs_prepare macro call after restoring the opkg
    configuration, to allow users to override it again by using the files/
    overlay mechanism.
    
    Signed-off-by: Jo-Philipp Wich <jo at mein.io>
---
 include/image.mk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/image.mk b/include/image.mk
index 605cb06..af01951 100644
--- a/include/image.mk
+++ b/include/image.mk
@@ -303,9 +303,9 @@ target-dir-%: FORCE
 		$(opkg_target) update && \
 		$(opkg_target) install \
 			$(call opkg_package_files,$(mkfs_packages_add)))
+	-$(CP) -T $(mkfs_cur_target_dir).opkg/ $(mkfs_cur_target_dir)/etc/opkg/
+	rm -rf $(mkfs_cur_target_dir).opkg $(mkfs_cur_target_dir).conf
 	$(call prepare_rootfs,$(mkfs_cur_target_dir))
-	-mv $(mkfs_cur_target_dir).opkg $(mkfs_cur_target_dir)/etc/opkg
-	rm -f $(mkfs_cur_target_dir).conf
 
 $(KDIR)/root.%: kernel_prepare
 	$(call Image/mkfs/$(word 1,$(target_params)),$(target_params))



More information about the lede-commits mailing list