base-files: change logging for upgrade on stage2
[openwrt/staging/mkresin.git] / package / base-files / files / lib / upgrade / stage2
index 5a439f1201b1dc452493a7ce6129d41aa206b072..f2f3cd439a747e80da9f7c22d75325983eb9868b 100755 (executable)
@@ -6,24 +6,13 @@
 export IMAGE="$1"
 COMMAND="$2"
 
-export ARGV="$IMAGE"
-export ARGC=1
-
-export SAVE_CONFIG=1
-export SAVE_PARTITIONS=1
-
 export INTERACTIVE=0
 export VERBOSE=1
 export CONFFILES=/tmp/sysupgrade.conffiles
-export CONF_TAR=/tmp/sysupgrade.tgz
 
 RAMFS_COPY_BIN=                # extra programs for temporary ramfs root
 RAMFS_COPY_DATA=       # extra data files
 
-
-[ -f "$CONF_TAR" ] || export SAVE_CONFIG=0
-[ -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap ] && export SAVE_PARTITIONS=0
-
 include /lib/upgrade
 
 
@@ -44,33 +33,43 @@ supivot() { # <new_root> <old_root>
 }
 
 switch_to_ramfs() {
+       RAMFS_COPY_LOSETUP="$(command -v losetup)"
+       RAMFS_COPY_LVM="$(command -v lvm)"
+
        for binary in \
                /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount    \
                pivot_root mount_root reboot sync kill sleep            \
-               md5sum hexdump cat zcat bzcat dd tar                    \
+               md5sum hexdump cat zcat dd tar                          \
                ls basename find cp mv rm mkdir rmdir mknod touch chmod \
                '[' printf wc grep awk sed cut                          \
-               mtd partx losetup mkfs.ext4                             \
+               mtd partx losetup mkfs.ext4 nandwrite flash_erase       \
                ubiupdatevol ubiattach ubiblock ubiformat               \
                ubidetach ubirsvol ubirmvol ubimkvol                    \
-               snapshot snapshot_tool                                  \
+               snapshot snapshot_tool date logger                      \
+               $RAMFS_COPY_LOSETUP $RAMFS_COPY_LVM                     \
                $RAMFS_COPY_BIN
        do
-               local file="$(which "$binary" 2>/dev/null)"
+               local file="$(command -v "$binary" 2>/dev/null)"
                [ -n "$file" ] && install_bin "$file"
        done
-       install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh $RAMFS_COPY_DATA
+       install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh /lib/upgrade/do_stage2 /usr/share/libubox/jshn.sh $RAMFS_COPY_DATA
 
        [ -L "/lib64" ] && ln -s /lib $RAM_ROOT/lib64
 
        supivot $RAM_ROOT /mnt || {
-               echo "Failed to switch over to ramfs. Please reboot."
+               v "Failed to switch over to ramfs. Please reboot."
                exit 1
        }
 
        /bin/mount -o remount,ro /mnt
        /bin/umount -l /mnt
 
+       [ "$RAMFS_COPY_LOSETUP" ] && losetup -D
+       [ "$RAMFS_COPY_LVM" ] && {
+               mkdir -p /tmp/lvm/cache
+               $RAMFS_COPY_LVM vgchange -aln --ignorelockingfailure
+       }
+
        grep /overlay /proc/mounts > /dev/null && {
                /bin/mount -o noatime,remount,ro /overlay
                /bin/umount -l /overlay
@@ -78,12 +77,15 @@ switch_to_ramfs() {
 }
 
 kill_remaining() { # [ <signal> [ <loop> ] ]
+       local loop_limit=10
+
        local sig="${1:-TERM}"
        local loop="${2:-0}"
        local run=true
        local stat
+       local proc_ppid=$(cut -d' ' -f4  /proc/$$/stat)
 
-       echo -n "Sending $sig to remaining processes ... "
+       v "Sending $sig to remaining processes ..."
 
        while $run; do
                run=false
@@ -94,8 +96,8 @@ kill_remaining() { # [ <signal> [ <loop> ] ]
                        read pid name state ppid rest < $stat
                        name="${name#(}"; name="${name%)}"
 
-                       # Skip PID1, ourself and our children
-                       [ $pid -ne 1 -a $pid -ne $$ -a $ppid -ne $$ ] || continue
+                       # Skip PID1, our parent, ourself and our children
+                       [ $pid -ne 1 -a $pid -ne $proc_ppid -a $pid -ne $$ -a $ppid -ne $$ ] || continue
 
                        local cmdline
                        read cmdline < /proc/$pid/cmdline
@@ -103,36 +105,56 @@ kill_remaining() { # [ <signal> [ <loop> ] ]
                        # Skip kernel threads
                        [ -n "$cmdline" ] || continue
 
-                       echo -n "$name "
+                       v "Sending signal $sig to $name ($pid)"
                        kill -$sig $pid 2>/dev/null
 
                        [ $loop -eq 1 ] && run=true
                done
+
+               let loop_limit--
+               [ $loop_limit -eq 0 ] && {
+                       v "Failed to kill all processes."
+                       exit 1
+               }
        done
-       echo ""
 }
 
+indicate_upgrade
+
+while read -r a b c; do
+       case "$a" in
+               MemT*) mem="$b" ;; esac
+done < /proc/meminfo
+
+[ "$mem" -gt 32768 ] && \
+       skip_services="dnsmasq log network"
+for service in /etc/init.d/*; do
+       service=${service##*/}
+
+       case " $skip_services " in
+               *" $service "*) continue ;; esac
+
+       ubus call service delete '{ "name": "'"$service"'" }' 2>/dev/null
+done
 
 killall -9 telnetd
 killall -9 dropbear
 killall -9 ash
 
 kill_remaining TERM
-sleep 3
+sleep 4
 kill_remaining KILL 1
 
-sleep 1
+sleep 6
 
+echo 3 > /proc/sys/vm/drop_caches
 
 if [ -n "$IMAGE" ] && type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then
-       IS_PRE_UPGRADE=1 platform_pre_upgrade "$IMAGE"
-
-       # Needs to be unset again because of busybox weirdness ...
-       IS_PRE_UPGRADE=
+       platform_pre_upgrade "$IMAGE"
 fi
 
 if [ -n "$(rootfs_type)" ]; then
-       echo "Switching to ramdisk..."
+       v "Switching to ramdisk..."
        switch_to_ramfs
 fi