include/rootfs: rework handling of post-install scripts for APK
authorChristian Marangi <ansuelsmth@gmail.com>
Wed, 22 May 2024 17:29:32 +0000 (19:29 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Tue, 11 Jun 2024 21:58:11 +0000 (23:58 +0200)
Rework handling of post-install scripts for APK. As we do with OPKG,
lets just iterate between each post-install package so we can actually
check if something fail in applying them.

To do this we first extract each .post-install script in APK
scripts.tar.

Also remove these files from final image as they are needed only for the
first installation of the packages.

Link: https://github.com/openwrt/openwrt/pull/15543
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
include/rootfs.mk

index 9fb7d8cfdfe86c32b284fcf7c031334e2d83a62c..23692a3a8233e635c1c05b4413256fffd2257c0f 100644 (file)
@@ -80,18 +80,21 @@ define prepare_rootfs
        @( \
                cd $(1); \
                if [ -n "$(CONFIG_USE_APK)" ]; then \
-               $(STAGING_DIR_HOST)/bin/tar -xf ./lib/apk/db/scripts.tar --wildcards "*.post-install" -O > script.sh; \
-               chmod +x script.sh; \
-               IPKG_INSTROOT=$(1) $$(command -v bash) script.sh; \
+                       IPKG_POSTINST_PATH=./lib/apk/db/*.post-install; \
+                       $(STAGING_DIR_HOST)/bin/tar -C ./lib/apk/db/ -xf ./lib/apk/db/scripts.tar --wildcards "*.post-install"; \
                else \
-               for script in ./usr/lib/opkg/info/*.postinst; do \
+                       IPKG_POSTINST_PATH=./usr/lib/opkg/info/*.postinst; \
+               fi; \
+               for script in $$IPKG_POSTINST_PATH; do \
                        IPKG_INSTROOT=$(1) $$(command -v bash) $$script; \
                        ret=$$?; \
                        if [ $$ret -ne 0 ]; then \
                                echo "postinst script $$script has failed with exit code $$ret" >&2; \
                                exit 1; \
                        fi; \
+                       [ -n "$(CONFIG_USE_APK)" ] && $(STAGING_DIR_HOST)/bin/tar --delete -f ./lib/apk/db/scripts.tar $$(basename $$script); \
                done; \
+               if [ -z "$(CONFIG_USE_APK)" ]; then \
                $(if $(IB),,awk -i inplace \
                        '/^Status:/ { \
                                if ($$3 == "user") { $$3 = "ok" } \
@@ -115,6 +118,7 @@ define prepare_rootfs
        rm -rf \
                $(1)/boot \
                $(1)/tmp/* \
+               $(1)/lib/apk/db/*.post-install* \
                $(1)/usr/lib/opkg/info/*.postinst* \
                $(1)/usr/lib/opkg/lists/* \
                $(1)/var/lock/*.lock