3 logfile=/tmp/updater.log
4 oldkernel=/boot/uImage-3
5 newkernel=boot/uImage-3
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
15 if ! test -e $oldkernel; then
16 zenity --error --text "SuperZaxxon Final firmware required, sorry."
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."
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.
30 Delete some files and try again, or just do a full reflash."
34 if [ "`id -u`" != "0" ]; then
35 zenity --error --text "Root permissions required."
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/'
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))
64 kernel_failed_detect=true
65 kernel_ask_newer=false
66 kernel_do_update=false
67 kernel_reboot_needed=false
69 oldver=`get_ver $oldkernel`
70 newver=`get_ver $newkernel`
71 oldvcode=`get_vercode $oldver`
72 newvcode=`get_vercode $newver`
74 # echo $oldver $newver $oldvcode $newvcode
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."
83 if [ "$oldvcode" -eq "$newvcode" ]; then
84 oldtime=`stat -c %Y $oldkernel`
85 newtime=`stat -c %Y $newkernel`
86 if [ "$oldtime" -gt "$newtime" ]; then
89 kernel_failed_detect=false
92 elif [ "$oldvcode" -gt "$newvcode" ]; then
95 kernel_failed_detect=false
100 if $kernel_ask_newer; then
101 if zenity --question --text "It seems you have newer kernel already installed,
103 kernel_do_update=true
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
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
117 kernel_reboot_needed=true
120 log "updating modules for $newver ..."
121 if [ -n "$oldver" -a -d "/lib/modules/$oldver" ]; then
122 rm -rf /lib/modules/$oldver
126 if ! $kernel_reboot_needed; then
133 log "installing packages..."
134 opkg install ipk/* | tee -a $logfile
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
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
145 zenity --info --text "Update complete."