add SZ 1.52 updater files
[pandora-misc.git] / hotfix_updater / superzaxxon / updater.sh
1 #!/bin/sh
2
3 logfile=/tmp/updater.log
4 oldkernel=/boot/uImage-3
5 newkernel=boot/uImage-3
6
7 if ! grep -q '[[:blank:]]/[[:blank:]]*ubifs' /proc/mounts; then
8   # prefer alternative locations when running from SD
9   test -e /media/PANDORABOOT/uImage && oldkernel=/media/PANDORABOOT/uImage
10   test -e /media/PANDORABOOT/uImage-3 && oldkernel=/media/PANDORABOOT/uImage-3
11   test -e /media/BOOT/uImage && oldkernel=/media/BOOT/uImage
12   test -e /media/BOOT/uImage-3 && oldkernel=/media/BOOT/uImage-3
13 fi
14
15 if ! test -e $oldkernel; then
16   zenity --error --text "SuperZaxxon Final firmware required, sorry."
17   exit 1
18 fi
19
20 if ! test -e $newkernel || ! test -d lib || ! test -d ipk; then
21   zenity --error --text "Required files are missing, perhaps this .pnd got corrupted."
22   exit 1
23 fi
24
25 root_free=`df | grep '/$' | sed -e '2~1d' | awk '{print $4}'`
26 if [ "$root_free" -lt 2000 ]; then
27   zenity --error --text "There is not enough space left in root partition.
28 This usually means your NAND is almost full.
29
30 Delete some files and try again, or just do a full reflash."
31   exit 1
32 fi
33
34 if [ "`id -u`" != "0" ]; then
35   zenity --error --text "Root permissions required."
36   exit 1
37 fi
38
39 get_ver()
40 {
41   dd if=$1 bs=32 skip=1 count=1 2> /dev/null \
42     | strings | sed -e 's/.*\([0-9]\.[0-9]\.[0-9]*\).*/\1/'
43 }
44
45 get_vercode()
46 {
47   ver1=`echo $1 | awk -F. '{printf $1}'`
48   ver2=`echo $1 | awk -F. '{printf $2}'`
49   ver3=`echo $1 | awk -F. '{printf $3}'`
50   echo $((($ver1 << 16) + ($ver2 << 8) + $ver3))
51 }
52
53 log()
54 {
55   echo -en "\033[0;32m"
56   echo "$@"
57   echo -en "\033[0m"
58
59   echo "$@" >> $logfile
60 }
61
62 echo > $logfile
63
64 kernel_failed_detect=true
65 kernel_ask_newer=false
66 kernel_do_update=false
67 kernel_reboot_needed=false
68
69 oldver=`get_ver $oldkernel`
70 newver=`get_ver $newkernel`
71 oldvcode=`get_vercode $oldver`
72 newvcode=`get_vercode $newver`
73
74 # echo $oldver $newver $oldvcode $newvcode
75
76 if [ -n "$oldver" -a -n "$newver" -a -n "$oldvcode" -a -n "$newvcode" ]; then
77   if [ "$oldvcode" -lt "$(((3 << 16) + (2 << 8) + 21))" ]; then
78     # a version before SZ-Final
79     zenity --error --text "SuperZaxxon Final firmware required, sorry."
80     exit 1
81   fi
82
83   if [ "$oldvcode" -eq "$newvcode" ]; then
84     oldtime=`stat -c %Y $oldkernel`
85     newtime=`stat -c %Y $newkernel`
86     if [ "$oldtime" -gt "$newtime" ]; then
87       kernel_ask_newer=true
88     else
89       kernel_failed_detect=false
90       kernel_do_update=true
91     fi
92   elif [ "$oldvcode" -gt "$newvcode" ]; then
93     kernel_ask_newer=true
94   else
95     kernel_failed_detect=false
96     kernel_do_update=true
97   fi
98 fi
99
100 if $kernel_ask_newer; then
101   if zenity --question --text "It seems you have newer kernel already installed, 
102 overwrite it?"; then
103     kernel_do_update=true
104   fi
105 elif $kernel_failed_detect; then
106   if zenity --question --text "Could not determine what kernel is installed on your system, 
107 so have to ask, do you want to overwrite your current kernel?"; then
108     kernel_do_update=true
109   fi
110 fi
111
112 if $kernel_do_update; then
113   if ! cmp $newkernel $oldkernel > /dev/null; then
114     log "updating kernel at $oldkernel from $oldver to $newver ..."
115     cp -a $newkernel $oldkernel
116     sync
117     kernel_reboot_needed=true
118   fi
119
120   log "updating modules for $newver ..."
121   if [ -n "$oldver" -a -d "/lib/modules/$oldver" ]; then
122     rm -rf /lib/modules/$oldver
123   fi
124   cp -a lib /
125   sync
126   if ! $kernel_reboot_needed; then
127     # we can depmod now
128     depmod -a
129     sync
130   fi
131 fi
132
133 log "installing packages..."
134 opkg install ipk/* | tee -a $logfile
135 sync
136
137 # since uninstall script of gtk-touchscreen-mode-enable is broken, edit this out manually
138 sudo sed -i -e 's/^\(gtk-touchscreen-mode = 1\)/#\1/' /etc/gtk-2.0/gtkrc
139
140 log "all done. You can find logfile at $logfile"
141 if $kernel_reboot_needed; then
142   zenity --question --text "Reboot required to start the new kernel.
143 Reboot now?" && reboot
144 else
145   zenity --info --text "Update complete."
146 fi