base-files: fix prerm return value, align with postinst code
[openwrt/openwrt.git] / package / base-files / files / lib / functions.sh
index b3bf2213f4122c044632d0d835f0bc92c2d61491..51ca8d5a0c80873b285feccc44319b5958140ba4 100755 (executable)
@@ -158,29 +158,34 @@ insert_modules() {
                if [ -f /etc/modules.d/$m ]; then
                        sed 's/^[^#]/insmod &/' /etc/modules.d/$m | ash 2>&- || :
                else
-                       modprobe $m
+                       modprobe $m || :
                fi
        done
 }
 
 default_prerm() {
        local root="${IPKG_INSTROOT}"
-       local name
+       local pkgname="$(basename ${1%.*})"
+       local ret=0
 
-       name=$(basename ${1%.*})
-       [ -f "$root/usr/lib/opkg/info/${name}.prerm-pkg" ] && . "$root/usr/lib/opkg/info/${name}.prerm-pkg"
+       if [ -f "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" ]; then
+               ( . "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" )
+               ret=$?
+       fi
 
        local shell="$(which bash)"
-       for i in `cat "$root/usr/lib/opkg/info/${name}.list" | grep "^/etc/init.d/"`; do
+       for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
                if [ -n "$root" ]; then
                        ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" disable
                else
                        if [ "$PKG_UPGRADE" != "1" ]; then
                                "$i" disable
                        fi
-                       "$i" stop || /bin/true
+                       "$i" stop
                fi
        done
+
+       return $ret
 }
 
 add_group_and_user() {
@@ -230,12 +235,17 @@ default_postinst() {
                ret=$?
        fi
 
+       if [ -d "$root/rootfs-overlay" ]; then
+               cp -R $root/rootfs-overlay/. $root/
+               rm -fR $root/rootfs-overlay/
+       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
                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"
+                       [ -f "$i" ] && . ./"$i" && rm -f "$i"
                ) done
                uci commit
        fi
@@ -348,4 +358,8 @@ user_exists() {
        grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/passwd
 }
 
+board_name() {
+       [ -e /tmp/sysinfo/board_name ] && cat /tmp/sysinfo/board_name || echo "generic"
+}
+
 [ -z "$IPKG_INSTROOT" -a -f /lib/config/uci.sh ] && . /lib/config/uci.sh