base-files: execute package's "postinst" after executing uci-defaults
authorRafał Miłecki <rafal@milecki.pl>
Sun, 26 Nov 2023 20:24:28 +0000 (21:24 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Sat, 27 Jan 2024 09:36:43 +0000 (10:36 +0100)
Allow "postinst" scripts to perform extra actions after applying all
kind of fixups implemented using uci-defaults.

This is needed e.g. by uhttpd-mod-ubus which after installation in a
running systems needs to:
1. Update uhttpd config using its uci-defaults script
2. Reload uhttpd

While this approach makes sense there is a risk it'll blow up some
corner case postinst usages. There is only 1 way to find out.

Cc: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
(cherry picked from commit b799dd3c705dfd95745cdd94b13d1cd2ad2367a6)

package/base-files/files/lib/functions.sh

index 4b1b838572a0cd6060856d44fcf9e5da4d14c697..50aed53b068b1c752b63ea7d15606d279c1f3ef4 100644 (file)
@@ -262,11 +262,6 @@ default_postinst() {
 
        add_group_and_user "${pkgname}"
 
-       if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
-               ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
-               ret=$?
-       fi
-
        if [ -d "$root/rootfs-overlay" ]; then
                cp -R $root/rootfs-overlay/. $root/
                rm -fR $root/rootfs-overlay/
@@ -292,6 +287,11 @@ default_postinst() {
                rm -f /tmp/luci-indexcache
        fi
 
+       if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
+               ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
+               ret=$?
+       fi
+
        local shell="$(command -v bash)"
        for i in $(grep -s "^/etc/init.d/" "$root$filelist"); do
                if [ -n "$root" ]; then