add SZ 1.52 updater files
[pandora-misc.git] / hotfix_updater / superzaxxon / updater.sh
diff --git a/hotfix_updater/superzaxxon/updater.sh b/hotfix_updater/superzaxxon/updater.sh
new file mode 100755 (executable)
index 0000000..9e72b9b
--- /dev/null
@@ -0,0 +1,146 @@
+#!/bin/sh
+
+logfile=/tmp/updater.log
+oldkernel=/boot/uImage-3
+newkernel=boot/uImage-3
+
+if ! grep -q '[[:blank:]]/[[:blank:]]*ubifs' /proc/mounts; then
+  # prefer alternative locations when running from SD
+  test -e /media/PANDORABOOT/uImage && oldkernel=/media/PANDORABOOT/uImage
+  test -e /media/PANDORABOOT/uImage-3 && oldkernel=/media/PANDORABOOT/uImage-3
+  test -e /media/BOOT/uImage && oldkernel=/media/BOOT/uImage
+  test -e /media/BOOT/uImage-3 && oldkernel=/media/BOOT/uImage-3
+fi
+
+if ! test -e $oldkernel; then
+  zenity --error --text "SuperZaxxon Final firmware required, sorry."
+  exit 1
+fi
+
+if ! test -e $newkernel || ! test -d lib || ! test -d ipk; then
+  zenity --error --text "Required files are missing, perhaps this .pnd got corrupted."
+  exit 1
+fi
+
+root_free=`df | grep '/$' | sed -e '2~1d' | awk '{print $4}'`
+if [ "$root_free" -lt 2000 ]; then
+  zenity --error --text "There is not enough space left in root partition.
+This usually means your NAND is almost full.
+
+Delete some files and try again, or just do a full reflash."
+  exit 1
+fi
+
+if [ "`id -u`" != "0" ]; then
+  zenity --error --text "Root permissions required."
+  exit 1
+fi
+
+get_ver()
+{
+  dd if=$1 bs=32 skip=1 count=1 2> /dev/null \
+    | strings | sed -e 's/.*\([0-9]\.[0-9]\.[0-9]*\).*/\1/'
+}
+
+get_vercode()
+{
+  ver1=`echo $1 | awk -F. '{printf $1}'`
+  ver2=`echo $1 | awk -F. '{printf $2}'`
+  ver3=`echo $1 | awk -F. '{printf $3}'`
+  echo $((($ver1 << 16) + ($ver2 << 8) + $ver3))
+}
+
+log()
+{
+  echo -en "\033[0;32m"
+  echo "$@"
+  echo -en "\033[0m"
+
+  echo "$@" >> $logfile
+}
+
+echo > $logfile
+
+kernel_failed_detect=true
+kernel_ask_newer=false
+kernel_do_update=false
+kernel_reboot_needed=false
+
+oldver=`get_ver $oldkernel`
+newver=`get_ver $newkernel`
+oldvcode=`get_vercode $oldver`
+newvcode=`get_vercode $newver`
+
+# echo $oldver $newver $oldvcode $newvcode
+
+if [ -n "$oldver" -a -n "$newver" -a -n "$oldvcode" -a -n "$newvcode" ]; then
+  if [ "$oldvcode" -lt "$(((3 << 16) + (2 << 8) + 21))" ]; then
+    # a version before SZ-Final
+    zenity --error --text "SuperZaxxon Final firmware required, sorry."
+    exit 1
+  fi
+
+  if [ "$oldvcode" -eq "$newvcode" ]; then
+    oldtime=`stat -c %Y $oldkernel`
+    newtime=`stat -c %Y $newkernel`
+    if [ "$oldtime" -gt "$newtime" ]; then
+      kernel_ask_newer=true
+    else
+      kernel_failed_detect=false
+      kernel_do_update=true
+    fi
+  elif [ "$oldvcode" -gt "$newvcode" ]; then
+    kernel_ask_newer=true
+  else
+    kernel_failed_detect=false
+    kernel_do_update=true
+  fi
+fi
+
+if $kernel_ask_newer; then
+  if zenity --question --text "It seems you have newer kernel already installed, 
+overwrite it?"; then
+    kernel_do_update=true
+  fi
+elif $kernel_failed_detect; then
+  if zenity --question --text "Could not determine what kernel is installed on your system, 
+so have to ask, do you want to overwrite your current kernel?"; then
+    kernel_do_update=true
+  fi
+fi
+
+if $kernel_do_update; then
+  if ! cmp $newkernel $oldkernel > /dev/null; then
+    log "updating kernel at $oldkernel from $oldver to $newver ..."
+    cp -a $newkernel $oldkernel
+    sync
+    kernel_reboot_needed=true
+  fi
+
+  log "updating modules for $newver ..."
+  if [ -n "$oldver" -a -d "/lib/modules/$oldver" ]; then
+    rm -rf /lib/modules/$oldver
+  fi
+  cp -a lib /
+  sync
+  if ! $kernel_reboot_needed; then
+    # we can depmod now
+    depmod -a
+    sync
+  fi
+fi
+
+log "installing packages..."
+opkg install ipk/* | tee -a $logfile
+sync
+
+# since uninstall script of gtk-touchscreen-mode-enable is broken, edit this out manually
+sudo sed -i -e 's/^\(gtk-touchscreen-mode = 1\)/#\1/' /etc/gtk-2.0/gtkrc
+
+log "all done. You can find logfile at $logfile"
+if $kernel_reboot_needed; then
+  zenity --question --text "Reboot required to start the new kernel.
+Reboot now?" && reboot
+else
+  zenity --info --text "Update complete."
+fi