base-files: evaluate uci-defaults on run-time installations
authorLuka Perkov <luka@openwrt.org>
Tue, 10 May 2016 22:36:49 +0000 (22:36 +0000)
committerLuka Perkov <luka@openwrt.org>
Tue, 10 May 2016 22:36:49 +0000 (22:36 +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: 49340

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

index 4ec0cac33231f4e0f0265371820a67b0f28f1f6d..cf1fa4874a396b006ded1cbc43cb8de16a5a6c0f 100755 (executable)
@@ -231,6 +231,17 @@ default_postinst() {
                cd $OLDPWD
        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