diff options
Diffstat (limited to 'rbutil/mknwzboot/uninstall_script.sh')
-rw-r--r-- | rbutil/mknwzboot/uninstall_script.sh | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/rbutil/mknwzboot/uninstall_script.sh b/rbutil/mknwzboot/uninstall_script.sh new file mode 100644 index 0000000000..0e409c63cd --- /dev/null +++ b/rbutil/mknwzboot/uninstall_script.sh @@ -0,0 +1,122 @@ +#!/bin/sh + +# NOTE: busybox is using ash, a very posix and very pedantic shell, make sure +# you test your scripts with +# busybox sh -n <script> +# and if you really, really don't want to download busybox to try it, then go +# ahead and brick your device + +# The updater script on the NWZ has a major bug/feature: +# it does NOT clear the update flag if the update scrit fails +# thus causing a update/reboot loop and a bricked device +# always clear to make sure we don't end up being screwed +nvpflag fup 0xFFFFFFFF + +# go to /tmp +cd /tmp + +# get content partition path +CONTENTS="/contents" +CONTENTS_PART=`mount | grep contents | awk '{ print $1 }'` + +# print a message to the screen and also on the standard output +# lcdprint x,y msg +lcdprint () +{ + echo $2 + lcdmsg -f /usr/local/bin/font_08x12.bmp -l $1 "$2" +} + +# clear screen +lcdmsg -c "" +lcdprint 0,3 "Contents partition:\n$CONTENTS_PART" + +# We need to remount the contents partition in read-write mode be able to +# write something on it +lcdprint 0,6 "Remount $CONTENTS rw" +mount -o remount,rw $CONTENTS_PART $CONTENTS +if [ "$?" != 0 ]; then + lcdprint 0,15 "ERROR: remount failed" + sleep 3 + exit 0 +fi + +# redirect all output to a log file +exec > "$CONTENTS/uninstall_dualboot_log.txt" 2>&1 + +# import constants +. /install_script/constant.txt +ROOTFS_TMP_DIR=/tmp/rootfs +SPIDERAPP_PATH=$ROOTFS_TMP_DIR/usr/local/bin/SpiderApp + +# mount root partition +lcdprint 0,7 "Mount root filesystem" +mkdir $ROOTFS_TMP_DIR +if [ "$?" != 0 ]; then + lcdprint 0,15 "ERROR: mkdir failed" + sleep 3 + exit 0 +fi + +# If there is an ext4 mounter, try it. Otherwise or on failure, try ext3 and +# then ext2. +# NOTE some platforms probably use an mtd and this might need some fixing +if [ -e /usr/local/bin/icx_mount.ext4 ]; then + /usr/local/bin/icx_mount.ext4 $COMMON_ROOTFS_PARTITION $ROOTFS_TMP_DIR +else + false +fi +if [ "$?" != 0 ]; then + mount -t ext3 $COMMON_ROOTFS_PARTITION $ROOTFS_TMP_DIR +fi +if [ "$?" != 0 ]; then + mount -t ext2 $COMMON_ROOTFS_PARTITION $ROOTFS_TMP_DIR +fi +if [ "$?" != 0 ]; then + lcdprint 0,15 "ERROR: mount failed" + sleep 3 + exit 0 +fi + +# the installer renames the OF to $SPIDERAPP_PATH.of so if it does not exists +# print an error +lcdprint 0,8 "Restore OF" +if [ ! -e $SPIDERAPP_PATH.of ]; then + lcdprint 0,15 "ERROR: cannot find OF" + lcdprint 0,16 "ERROR: is Rockbox installed?" + sleep 3 + exit 0 +fi +# restore the OF +mv $SPIDERAPP_PATH.of $SPIDERAPP_PATH +if [ "$?" != 0 ]; then + lcdprint 0,15 "ERROR: restore failed" + sleep 3 + exit 0 +fi + +# unmount root partition +lcdprint 0,11 "Unmount root filesystem" +sync +if [ "$?" != 0 ]; then + umount "$ROOTFS_TMP_DIR" + lcdprint 0,15 "ERROR: sync failed" + sleep 3 + exit 0 +fi + +umount $ROOTFS_TMP_DIR +if [ "$?" != 0 ]; then + lcdprint 0,15 "ERROR: umount failed" + sleep 3 + exit 0 +fi + +# Success screen +lcdprint 0,15 "Rebooting in 3 seconds." +sleep 3 +sync + +echo "Uninstallation successful" +# finish +exit 0 |