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
}
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 /lib/upgrade/do_stage2 $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
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
# 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
let loop_limit--
[ $loop_limit -eq 0 ] && {
- echo
- echo "Failed to kill all processes."
+ 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
platform_pre_upgrade "$IMAGE"
fi
if [ -n "$(rootfs_type)" ]; then
- echo "Switching to ramdisk..."
+ v "Switching to ramdisk..."
switch_to_ramfs
fi