base-files: rework postinstall uci-defaults handling
authorJo-Philipp Wich <jo@mein.io>
Fri, 27 May 2016 07:43:14 +0000 (09:43 +0200)
committerJo-Philipp Wich <jo@mein.io>
Fri, 27 May 2016 08:27:45 +0000 (10:27 +0200)
Some package postinstall operations, e.g. those emitted by the LuCI build
system, source and delete the uci-defaults themselves upon package insteall,
causing the generic defaults apply code to trigger shell errors like:

    .../luci-app-ddns.postinst: .: line 130: can't open './40_luci-ddns'

Rework the generic apply code to check the existence of the uci-defaults
script before trying to source it, use sed to prefilter the list of entries
from the control file and perform the directory change in a subshell,
avoiding the need for cd $OLDPWD.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
package/base-files/files/lib/functions.sh

index 7bce122..e6c6822 100755 (executable)
@@ -223,12 +223,11 @@ default_postinst() {
        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
+               for i in $(sed -ne 's!^/etc/uci-defaults/!!p' "/usr/lib/opkg/info/${pkgname}.list"); do (
+                       cd /etc/uci-defaults
+                       [ -f "$i" ] && . "$i" && rm -f "$i"
+               done
                uci commit
-               cd $OLDPWD
        fi
 
        [ -n "$root" ] || rm -f /tmp/luci-indexcache 2>/dev/null