From: Jo-Philipp Wich Date: Fri, 27 May 2016 07:43:14 +0000 (+0200) Subject: base-files: rework postinstall uci-defaults handling X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=7f694582;p=openwrt%2Fstaging%2Fblocktrron.git base-files: rework postinstall uci-defaults handling 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 --- diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index 7bce122ae7..e6c6822cec 100755 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -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