base-files: evaluate uci-defaults on run-time installations
authorJohn Crispin <john@openwrt.org>
Fri, 29 Apr 2016 11:34:44 +0000 (11:34 +0000)
committerJohn Crispin <john@openwrt.org>
Fri, 29 Apr 2016 11:34:44 +0000 (11:34 +0000)
Packages may install scripts into /etc/uci-defaults to be executed once
after installation, usually at the first boot of the target. This works
fine if the package was installed to the rootfs during build or using
the ImageBuilder.
If the package is installed using opkg during run-time uci-defaults
were applied only after a reboot of the device. Avoid the need to
reboot by evaluting the package's uci-defaults in default-postinst.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
SVN-Revision: 49266

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

index dde1ac4f4707b66d6f096320cc8b587471a1f257..8582605991fd1c41b483ad0a38bc2145befe5715 100755 (executable)
@@ -214,6 +214,17 @@ default_postinst() {
                ret=$?
        fi
 
+       if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "$root/usr/lib/opkg/info/${pkgname}.list"; then
+               . /lib/functions/system.sh
+               [ -d /tmp/.uci ] || mkdir -p /tmp/.uci
+               cd /etc/uci-defaults
+               for i in $(grep -s "^/etc/uci-defaults/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
+                       ( . "./$(basename $i)" ) && rm -f "$i"
+               done
+               uci commit
+               cd $OLDPWD
+       fi
+
        [ -n "$root" ] || rm -f /tmp/luci-indexcache 2>/dev/null
 
        if [ "$PKG_UPGRADE" != "1" ]; then