base-files: evaluate uci-defaults on run-time installations
authorDaniel Golle <daniel@makrotopia.org>
Fri, 29 Apr 2016 11:34:44 +0000 (11:34 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Wed, 4 May 2016 13:24:37 +0000 (14:24 +0100)
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>
package/base-files/files/lib/functions.sh

index 33b22d28426700784b185b5436b22002b1a68fbb..7bce122ae799bb6dc7040f55d9d0b21dcae69e81 100755 (executable)
@@ -220,6 +220,17 @@ default_postinst() {
                ret=$?
        fi
 
+       if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "/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/" "/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