more fixes
diff --git a/nandroid/nandroid-mobile.sh b/nandroid/nandroid-mobile.sh
index b5cae3d..9a9a824 100755
--- a/nandroid/nandroid-mobile.sh
+++ b/nandroid/nandroid-mobile.sh
@@ -1,23 +1,6 @@
#!/sbin/sh
-# nandroid v2.2.2 - an Android backup tool for the G1 by infernix and brainaid
-# restore capability added by cyanogen
-
-# pensive modified to allow to add prefixes to backups, and to restore specific backups
-# pensive added the ability to exclude various images from the restore/backup operations, allows to preserve the newer
-# recovery image if an older backup is being restored or to preserve user data. Also, saves space by not backing up
-# partitions which change rarely.
-# pensive added compressing backups and restoring compressed backups
-# pensive added fetching system updates directly from the web into /sdcard/update.zip
-# pensive added fetching system updates directly from the web into /cache and applying it.
-# pensive added moving *update*.zip from /sdcard/download where a browser puts it to /sdcard/update.zip
-# pensive added deletion of stale backups
-# pensive added backup for ext2 partition on the sdcard to switch roms
-# pensive added composite options --save NAME and --switchto NAME to switch ROMS
-# pensive added list backup anywhere on the sdcard
-# pensive added list updates (more precisely *.zip) anywhere on the sdcard
-# Amon_RA : ext restore -> added check if ext backup is existing
-# Amon_RA : ext restore -> added check if ext parition is existing
+# nandroid v2.1 - an Android backup tool for the G1 by infernix and brainaid
# Requirements:
@@ -26,10 +9,6 @@
# - busybox in recovery mode
# - dump_image-arm-uclibc compiled and in path on phone
# - mkyaffs2image-arm-uclibc compiled and installed in path on phone
-# - flash_image-arm-uclibc compiled and in path on phone
-# - unyaffs-arm-uclibc compiled and in path on phone
-# - for [de]compression needs gzip or bzip2, part of the busybox
-# - wget for the wireless updates
# Reference data:
@@ -44,7 +23,7 @@
# We don't dump misc or cache because they do not contain any useful data that we are aware of at this time.
-# Logical steps (v2.2.1):
+# Logical steps (v2.1):
#
# 0. test for a target dir and the various tools needed, if not found then exit with error.
# 1. check "adb devices" for a device in recovery mode. set DEVICEID variable to the device ID. abort when not found.
@@ -76,612 +55,23 @@
DEVICEID=foo
RECOVERY=foo
-SUBNAME=""
-NORECOVERY=0
-NOBOOT=0
-NODATA=0
-NOSYSTEM=0
-NOMISC=0
-NOCACHE=0
-NOSPLASH1=0
-NOSPLASH2=0
-EXT2=0
-
-COMPRESS=0
-GETUPDATE=0
-RESTORE=0
-BACKUP=0
-DELETE=0
-WEBGET=0
-LISTBACKUP=0
-LISTUPDATE=0
-AUTOREBOOT=0
-AUTOAPPLY=0
-ITSANUPDATE=0
-ITSANIMAGE=0
-WEBGETSOURCE=""
-WEBGETTARGET="/sdcard"
-
-DEFAULTUPDATEPATH="/sdcard/download"
-
-DEFAULTWEBUPDATE=http://n0rp.chemlab.org/android/update-cm-3.6.8.1-signed.zip
-# There really should be a clone link always pointing to the latest
-#DEFAULTWEBUPDATE="http://n0rp.chemlab.org/android/latestupdate-signed.zip"
-DEFAULTWEBIMAGE=http://n0rp.chemlab.org/android/cm-recovery-1.4-signed.zip
-
-# Set up the default (for pensive at least) nameservers
-NAMESERVER1=64.46.128.3
-NAMESERVER2=64.46.128.4
-
-# WiFi works, rmnet0 setup ???
-# Do not know how to start the rmnet0 interface in recovery
-# If in normal mode "ifconfig rmnet0 down" kills rild too
-# /system/bin/rild& exits immediately, todo?
+echo "nandroid-mobile v2.1"
-DEVICEID=`cat /proc/cmdline | sed "s/.*serialno=//" | cut -d" " -f1`
-
-# This is the default repository for backups
-BACKUPPATH="/sdcard/nandroid/$DEVICEID"
-
-
-# Boot, Cache, Data, Ext2, Misc, Recovery, System, Splash1, Splash2
-# BACKUPLEGEND, If all the partitions are backed up it should be "CBDEMRS12"
-# Enables the user to figure at a glance what is in the backup
-BACKUPLEGEND=""
-
-# Normally we want tar to be verbose for confidence building.
-TARFLAGS="v"
-
-DEFAULTCOMPRESSOR=gzip
-DEFAULTEXT=.gz
-DEFAULTLEVEL="-1"
-
-ASSUMEDEFAULTUSERINPUT=0
-
-echo2log()
-{
- if [ -e /cache/recovery/log ]; then
- echo $1 >>/cache/recovery/log
- else
- echo $1 >/cache/recovery/log
- fi
-}
-
-batteryAtLeast()
-{
- REQUIREDLEVEL=$1
- ENERGY=`cat /sys/class/power_supply/battery/capacity`
- if [ "`cat /sys/class/power_supply/battery/status`" == "Charging" ]; then
- ENERGY=100
- fi
- if [ ! $ENERGY -ge $REQUIREDLEVEL ]; then
- $ECHO "Error: not enough battery power, need at least $REQUIREDLEVEL%."
- $ECHO "Connect charger or USB power and try again"
- exit 1
- fi
-}
-
-if [ "`echo $0 | grep /sbin/nandroid-mobile.sh`" == "" ]; then
- cp $0 /sbin
- chmod 755 /sbin/`basename $0`
- exec /sbin/`basename $0` $@
+if [ "$1" == "" ]; then
+ echo "Usage: $0 {backup|restore} [/path/to/nandroid/backup/]"
+ echo "- backup will store a full system backup on /sdcard/nandroid/$DEVICEID"
+ echo "- restore path will restore the last made backup for boot, system, recovery and data"
+ exit 0
fi
-
-# Hm, have to handle old options for the current UI
case $1 in
- restore)
- shift
- RESTORE=1
- ;;
- backup)
- shift
- BACKUP=1
- ;;
- --)
- ;;
-esac
-
-ECHO=echo
-OUTPUT=""
-
-for option in $(getopt --name="nandroid-mobile v2.2.2" -l norecovery -l noboot -l nodata -l nosystem -l nocache -l nomisc -l nosplash1 -l nosplash2 -l subname: -l backup -l restore -l compress -l getupdate -l delete -l path -l webget: -l webgettarget: -l nameserver: -l nameserver2: -l bzip2: -l defaultinput -l autoreboot -l autoapplyupdate -l ext2 -l save: -l switchto: -l listbackup -l listupdate -l silent -l quiet -l help -- "cbruds:p:eql" "$@"); do
- case $option in
- --silent)
- ECHO=echo2log
- ASSUMEDEFAULTUSERINPUT=1
- TARFLAGS=""
- OUTPUT=>>/cache/recovery/log
- shift
- ;;
- --quiet)
- ECHO=echo2log
- ASSUMEDEFAULTUSERINPUT=1
- TARFLAGS=""
- OUTPUT=>>/cache/recovery/log
- shift
- ;;
- -q)
- ECHO=echo2log
- ASSUMEDEFAULTUSERINPUT=1
- TARFLAGS=""
- OUTPUT=>>/cache/recovery/log
- shift
- ;;
- --help)
- ECHO=echo
- $ECHO "Usage: $0 {--backup|--restore|--getupdate|--delete|--compress|--bzip2:ARG|--webget:URL|--listbackup|--listupdate} [options]"
- $ECHO ""
- $ECHO "--help Display this help"
- $ECHO ""
- $ECHO "-s | --subname: SUBSTRING In case of --backup the SUBSTRING is"
- $ECHO " the prefix used with backup name"
- $ECHO " in case of --restore or -c|--compress|--bzip2 or"
- $ECHO " --delete SUBSTRING specifies backups on which to"
- $ECHO " operate"
- $ECHO ""
- $ECHO "-u | --getupdate Will search /sdcard/download for files named"
- $ECHO " *update*.zip, will prompt the user"
- $ECHO " to narrow the choice if more than one is found,"
- $ECHO " and then move the latest, if not unique,"
- $ECHO " to sdcard root /sdcard with the update.zip name"
- $ECHO " It is assumed the browser was used to put the *.zip"
- $ECHO " in the /sdcard/download folder. -p|--path option"
- $ECHO " would override /sdcard/download with the path of your"
- $ECHO " choosing."
- $ECHO ""
- $ECHO "-p | --path DIR Requires an ARGUMENT, which is the path to where "
- $ECHO " the backups are stored, can be used"
- $ECHO " when the default path /sdcard/nandroid/$DEVICEID "
- $ECHO " needs to be changed"
- $ECHO ""
- $ECHO "-b | --backup Will store a full system backup on $BACKUPPATH"
- $ECHO " One can suppress backup of any image however with options"
- $ECHO " starting with --no[partionname]"
- $ECHO ""
- $ECHO "-e | --ext2 Preserve the contents of the ext2 partition along with"
- $ECHO " the other partitions being backed up, to easily switch roms."
- $ECHO ""
- $ECHO "-r | --restore Will restore the last made backup which matches --subname"
- $ECHO " ARGUMENT for boot, system, recovery and data"
- $ECHO " unless suppressed by other options"
- $ECHO " if no --subname is supplied and the user fails to"
- $ECHO " provide any input then the latest backup is used"
- $ECHO " When restoring compressed backups, the images will remain"
- $ECHO " decompressed after the restore, you need to use -c|-compress"
- $ECHO " or --bzip2 to compress the backup again"
- $ECHO ""
- $ECHO "-d | --delete Will remove backups whose names match --subname ARGUMENT"
- $ECHO " Will allow to narrow down, will ask if the user is certain."
- $ECHO " Removes one backup at a time, repeat to remove multiple backups"
- $ECHO ""
- $ECHO "-c | --compress Will operate on chosen backups to compress image files,"
- $ECHO " resulting in saving of about 40MB out of 90+mb,"
- $ECHO " i.e. up to 20 backups can be stored in 1 GIG, if this "
- $ECHO " option is turned on with --backup, the resulting backup will"
- $ECHO " be compressed, no effect if restoring since restore will"
- $ECHO " automatically uncompress compressed images if space is available"
- $ECHO ""
- $ECHO "--bzip2: -# Turns on -c|--compress and uses bzip2 for compression instead"
- $ECHO " of gzip, requires an ARG -[1-9] compression level"
- $ECHO ""
- $ECHO "--webget: URL|\"\" Requires an argument, a valid URL for an *update*.zip file"
- $ECHO " If a null string is passed then the default URL is used"
- $ECHO " Will also create an update.MD5sum file and update.name with the"
- $ECHO " original file name."
- $ECHO ""
- $ECHO "--nameserver: IP addr Provide the first nameserver IP address, to override the default"
- $ECHO ""
- $ECHO "--nameserver2: IP addr Provide the second nameserver IP address, to override the default"
- $ECHO ""
- $ECHO "--webgettarget: DIR Target directory to deposit the fetched update, default is"
- $ECHO " /sdcard"
- $ECHO ""
- $ECHO "--norecovery Will suppress restore/backup of the recovery partition"
- $ECHO " If recovery.img was not part of the backup, no need to use this"
- $ECHO " option as the nandroid will not attempt to restore it, same goes"
- $ECHO " for all the options below"
- $ECHO ""
- $ECHO "--noboot Will suppress restore/backup of the boot partition"
- $ECHO ""
- $ECHO "--nodata Will suppress restore/backup of the data partition"
- $ECHO ""
- $ECHO "--nosystem Will suppress restore/backup of the system partition"
- $ECHO ""
- $ECHO "--nocache Will suppress restore/backup of the cache partition"
- $ECHO ""
- $ECHO "--nomisc Will suppress restore/backup of the misc partition"
- $ECHO ""
- $ECHO "--nosplash1 Will suppress restore/backup of the splash1 partition"
- $ECHO ""
- $ECHO "--nosplash2 Will suppress restore/backup of the splash2 partition"
- $ECHO ""
- $ECHO "--defaultinput Makes nandroid-mobile non-interactive, assumes default"
- $ECHO " inputs from the user."
- $ECHO ""
- $ECHO "--autoreboot Automatically reboot the phone after a backup, especially"
- $ECHO " useful when the compression options are on -c|--compress| "
- $ECHO " --bzip2 -level since the compression op takes time and"
- $ECHO " you may want to go to sleep or do something else, and"
- $ECHO " when a backup is over you want the calls and mms coming"
- $ECHO " through, right?"
- $ECHO ""
- $ECHO "--autoapplyupdate Once the specific update is downloaded or chosen from the"
- $ECHO " sdcard, apply it immediately. This option is valid as a "
- $ECHO " modifier for either --webget or --getupdate options."
- $ECHO ""
- $ECHO "-e|--ext2 Save the contents of ext2 partition in the backup folder too."
- $ECHO " Enables to keep different sets of apps for different ROMS and"
- $ECHO " switch easily between them."
- $ECHO ""
- $ECHO "--save: ROMTAG Preserve EVERYTHING under ROMTAG name, a composite option,"
- $ECHO " it uses several other options."
- $ECHO ""
- $ECHO "--switchto: ROMTAG Restores your entire environment including app2sd apps, cache"
- $ECHO " to the ROM environment named ROMTAG."
- $ECHO ""
- $ECHO "-q|--quiet|--silent Direct all the output to the recovery log, and assume default"
- $ECHO " user inputs."
- $ECHO ""
- $ECHO "-l|--listbackup Will search the entire SDCARD for backup folders and will dump"
- $ECHO " the list to stdout for use by the UI. Should be run with --silent"
- $ECHO ""
- $ECHO "--listupdate Will search the entire SDCARD for updates and will dump"
- $ECHO " the list to stdout for use by the UI. Should be run with --silent"
- exit 0
- ;;
- --norecovery)
- NORECOVERY=1
- #$ECHO "No recovery"
- shift
- ;;
- --noboot)
- NOBOOT=1
- #$ECHO "No boot"
- shift
- ;;
- --nodata)
- NODATA=1
- #$ECHO "No data"
- shift
- ;;
- --nosystem)
- NOSYSTEM=1
- #$ECHO "No system"
- shift
- ;;
- --nocache)
- NOCACHE=1
- #$ECHO "No cache"
- shift
- ;;
- --nomisc)
- NOMISC=1
- #$ECHO "No misc"
- shift
- ;;
- --nosplash1)
- NOSPLASH1=1
- #$ECHO "No splash1"
- shift
- ;;
- --nosplash2)
- NOSPLASH2=1
- #$ECHO "No splash2"
- shift
- ;;
- --backup)
- BACKUP=1
- #$ECHO "backup"
- shift
- ;;
- -b)
- BACKUP=1
- #$ECHO "backup"
- shift
- ;;
- -e)
- EXT2=1
- shift
- ;;
- --ext2)
- EXT2=1
- shift
- ;;
- --restore)
- RESTORE=1
- #$ECHO "restore"
- shift
- ;;
- -r)
- RESTORE=1
- #$ECHO "restore"
- shift
- ;;
- --compress)
- COMPRESS=1
- #$ECHO "Compress"
- shift
- ;;
- -c)
- COMPRESS=1
- #$ECHO "Compress"
- shift
- ;;
- --bzip2)
- COMPRESS=1
- DEFAULTCOMPRESSOR=bzip2
- DEFAULTEXT=.bz2
- if [ "$2" == "$option" ]; then
- shift
- fi
- DEFAULTLEVEL="$2"
- shift
- ;;
- --getupdate)
- GETUPDATE=1
- shift
- ;;
- -u)
- GETUPDATE=1
- shift
- ;;
- --subname)
- if [ "$2" == "$option" ]; then
- shift
- fi
- #$ECHO $2
- SUBNAME="$2"
- shift
- ;;
- -s)
- if [ "$2" == "$option" ]; then
- shift
- fi
- #$ECHO $2
- SUBNAME="$2"
- shift
- ;;
- --path)
- if [ "$2" == "$option" ]; then
- shift
- fi
- #$ECHO $2
- BACKUPPATH="$2"
- DEFAULTUPDATEPATH="$2"
- shift 2
- ;;
- -p)
- if [ "$2" == "$option" ]; then
- shift
- fi
- #$ECHO $2
- BACKUPPATH="$2"
- shift 2
- ;;
- --delete)
- DELETE=1
- shift
- ;;
- -d)
- DELETE=1
- shift
- ;;
- --webgettarget)
- if [ "$2" == "$option" ]; then
- shift
- fi
- WEBGETTARGET="$2"
- shift
- ;;
- --webget)
- if [ "$2" == "$option" ]; then
- shift
- fi
- #$ECHO "WEBGET"
- # if the argument is "" stick with the default: /sdcard
- if [ ! "$2" == "" ]; then
- WEBGETSOURCE="$2"
- fi
- WEBGET=1
- shift
- ;;
- --nameserver)
- if [ "$2" == "$option" ]; then
- shift
- fi
- NAMESERVER1="$2"
- shift
- ;;
- --nameserver2)
- if [ "$2" == "$option" ]; then
- shift
- fi
- NAMESERVER2="$2"
- shift
- ;;
- --defaultinput)
- ASSUMEDEFAULTUSERINPUT=1
- shift
- ;;
- --autoreboot)
- AUTOREBOOT=1
- shift
- ;;
- --autoapplyupdate)
- AUTOAPPLY=1
- shift
- ;;
- --save)
- if [ "$2" == "$option" ]; then
- shift
- fi
- SUBNAME="$2"
- BACKUP=1
- ASSUMEDEFAULTUSERINPUT=1
- EXT2=1
- COMPRESS=1
- shift
- ;;
- --switchto)
- if [ "$2" == "$option" ]; then
- shift
- fi
- SUBNAME="$2"
- RESTORE=1
- ASSUMEDEFAULTUSERINPUT=1
- EXT2=1
- shift
- ;;
- -l)
- shift
- LISTBACKUP=1
- ;;
- --listbackup)
- shift
- LISTBACKUP=1
- ;;
- --listupdate)
- shift
- LISTUPDATE=1
- ;;
- --)
- shift
- break
- ;;
- esac
-done
-
-$ECHO ""
-$ECHO "nandroid-mobile v2.2.1"
-$ECHO ""
-
-let OPS=$BACKUP
-let OPS=$OPS+$RESTORE
-let OPS=$OPS+$DELETE
-let OPS=$OPS+$WEBGET
-let OPS=$OPS+$GETUPDATE
-let OPS=$OPS+$LISTBACKUP
-let OPS=$OPS+$LISTUPDATE
-
-if [ "$OPS" -ge 2 ]; then
- ECHO=echo
- $ECHO "--backup, --restore, --delete, --webget, --getupdate, --listbackup, --listupdate are mutually exclusive operations."
- $ECHO "Please, choose one and only one option!"
- $ECHO "Aborting."
- exit 1
-fi
-
-let OPS=$OPS+$COMPRESS
-
-if [ "$OPS" -lt 1 ]; then
- ECHO=echo
- $ECHO "Usage: $0 {-b|--backup|-r|--restore|-d|--delete|-u|--getupdate|--webget|-c|--compress|--bzip2 -level|-l|--listbackup|--listupdate} [options]"
- $ECHO "At least one operation must be defined, try $0 --help for more information."
- exit 0
-fi
-
-
-if [ "$LISTBACKUP" == 1 ]; then
- umount /sdcard 2>/dev/null
- mount /sdcard 2>/dev/null
- CHECK=`mount | grep /sdcard`
- if [ "$CHECK" == "" ]; then
- echo "Error: sdcard not mounted, aborting."
- exit 1
- else
- find /sdcard | grep nandroid.md5 | sed s/.gz//g | sed s/.bz2//g | sed s/nandroid.md5//g
- umount /sdcard 2>/dev/null
- exit 0
- fi
-fi
-
-if [ "$LISTUPDATE" == 1 ]; then
- umount /sdcard 2>/dev/null
- mount /sdcard 2>/dev/null
- CHECK=`mount | grep /sdcard`
- if [ "$CHECK" == "" ]; then
- echo "Error: sdcard not mounted, aborting."
- exit 1
- else
- find /sdcard | grep .zip
- umount /sdcard 2>/dev/null
- exit 0
- fi
-fi
-
-# Make sure it exists
-touch /cache/recovery/log
-
-
-if [ "$AUTOAPPLY" == 1 -a "$WEBGET" == 0 -a "$GETUPDATE" == 0 ]; then
- ECHO=echo
- $ECHO "The --autoapplyupdate option is valid only in conjunction with --webget or --getupdate."
- $ECHO "Aborting."
- exit 1
-fi
-
-if [ "$COMPRESS" == 1 ]; then
- $ECHO "Compressing with $DEFAULTCOMPRESSOR, level $DEFAULTLEVEL"
-fi
-
-if [ "$WEBGET" == 1 ]; then
- $ECHO "Fetching $WEBGETSOURCE to target folder: $WEBGETTARGET"
-fi
-
-if [ ! "$SUBNAME" == "" ]; then
- if [ "$BACKUP" == 1 ]; then
- if [ "$COMPRESS" == 1 ]; then
- $ECHO "Using $SUBNAME- prefix to create a compressed backup folder"
- else
- $ECHO "Using $SUBNAME- prefix to create a backup folder"
- fi
- else
- if [ "$RESTORE" == 1 -o "$DELETE" == 1 -o "$COMPRESS" == 1 ]; then
- $ECHO "Searching for backup directories, matching $SUBNAME, to delete or restore"
- $ECHO "or compress"
- $ECHO ""
- fi
- fi
-else
- if [ "$BACKUP" == 1 ]; then
- $ECHO "Using G1 keyboard, enter a prefix substring and then <CR>"
- $ECHO -n "or just <CR> to accept default: "
- if [ "$ASSUMEDEFAULTUSERINPUT" == 0 ]; then
- read SUBNAME
- else
- $ECHO "Accepting default."
- fi
- $ECHO ""
- if [ "$COMPRESS" == 1 ]; then
- $ECHO "Using $SUBNAME- prefix to create a compressed backup folder"
- else
- $ECHO "Using $SUBNAME- prefix to create a backup folder"
- fi
- $ECHO ""
- else
- if [ "$RESTORE" == 1 -o "$DELETE" == 1 -o "$COMPRESS" == 1 ]; then
- $ECHO "Using G1 keyboard, enter a directory name substring and then <CR>"
- $ECHO -n "to find matches or just <CR> to accept default: "
- if [ "$ASSUMEDEFAULTUSERINPUT" == 0 ]; then
- read SUBNAME
- else
- $ECHO "Accepting default."
- fi
- $ECHO ""
- $ECHO "Using $SUBNAME string to search for matching backup directories"
- $ECHO ""
- fi
- fi
-fi
-
-if [ "$BACKUP" == 1 ]; then
+ backup)
mkyaffs2image=`which mkyaffs2image`
if [ "$mkyaffs2image" == "" ]; then
mkyaffs2image=`which mkyaffs2image-arm-uclibc`
if [ "$mkyaffs2image" == "" ]; then
- $ECHO "error: mkyaffs2image or mkyaffs2image-arm-uclibc not found in path"
+ echo "error: mkyaffs2image or mkyaffs2image-arm-uclibc not found in path"
exit 1
fi
fi
@@ -689,331 +79,100 @@
if [ "$dump_image" == "" ]; then
dump_image=`which dump_image-arm-uclibc`
if [ "$dump_image" == "" ]; then
- $ECHO "error: dump_image or dump_image-arm-uclibc not found in path"
+ echo "error: dump_image or dump_image-arm-uclibc not found in path"
exit 1
fi
fi
-fi
-
-if [ "$RESTORE" == 1 ]; then
+ break
+ ;;
+ restore)
flash_image=`which flash_image`
if [ "$flash_image" == "" ]; then
flash_image=`which flash_image-arm-uclibc`
if [ "$flash_image" == "" ]; then
- $ECHO "error: flash_image or flash_image-arm-uclibc not found in path"
+ echo "error: flash_image or flash_image-arm-uclibc not found in path"
exit 1
fi
fi
- unyaffs=`which unyaffs`
- if [ "$unyaffs" == "" ]; then
- unyaffs=`which unyaffs-arm-uclibc`
- if [ "$unyaffs" == "" ]; then
- $ECHO "error: unyaffs or unyaffs-arm-uclibc not found in path"
- exit 1
- fi
- fi
-fi
-if [ "$COMPRESS" == 1 ]; then
- compressor=`busybox | grep $DEFAULTCOMPRESSOR`
- if [ "$compressor" == "" ]; then
- $ECHO "Warning: busybox/$DEFAULTCOMPRESSOR is not found"
- $ECHO "No compression operations will be performed"
- COMPRESS=0
- else
- $ECHO "Found $DEFAULTCOMPRESSOR, will compress the backup"
- fi
-fi
+ break
+ ;;
+esac
# 1
DEVICEID=`cat /proc/cmdline | sed "s/.*serialno=//" | cut -d" " -f1`
RECOVERY=`cat /proc/cmdline | grep "androidboot.mode=recovery"`
if [ "$RECOVERY" == "foo" ]; then
- $ECHO "Error: Must be in recovery mode, aborting"
+ echo "error: not running in recovery mode, aborting"
exit 1
fi
if [ "$DEVICEID" == "foo" ]; then
- $ECHO "Error: device id not found in /proc/cmdline, aborting"
+ echo "error: device id not found in /proc/cmdline, aborting"
exit 1
fi
if [ ! "`id -u 2>/dev/null`" == "0" ]; then
if [ "`whoami 2>&1 | grep 'uid 0'`" == "" ]; then
- $ECHO "Error: must run as root, aborting"
+ echo "error: must run as root, aborting"
exit 1
fi
fi
-if [ "$RESTORE" == 1 ]; then
- batteryAtLeast 30
-# ENERGY=`cat /sys/class/power_supply/battery/capacity`
-# if [ "`cat /sys/class/power_supply/battery/status`" == "Charging" ]; then
-# ENERGY=100
-# fi
-# if [ ! $ENERGY -ge 30 ]; then
-# $ECHO "Error: not enough battery power"
-# $ECHO "Connect charger or USB power and try again"
-# exit 1
-# fi
-
-
- umount /sdcard 2>/dev/null
- mount /sdcard 2>/dev/null
- if [ "`mount | grep sdcard`" == "" ]; then
- $ECHO "error: unable to mount /sdcard, aborting"
+case $1 in
+ restore)
+ ENERGY=`cat /sys/class/power_supply/battery/capacity`
+ if [ "`cat /sys/class/power_supply/battery/status`" == "Charging" ]; then
+ ENERGY=100
+ fi
+ if [ ! $ENERGY -ge 30 ]; then
+ echo "Error: not enough battery power"
+ echo "Connect charger or USB power and try again"
exit 1
fi
-
- # find the latest backup, but show the user other options
- $ECHO ""
- $ECHO "Looking for the latest backup, will display other choices!"
- $ECHO ""
-
- RESTOREPATH=`ls -trd $BACKUPPATH/*$SUBNAME* 2>/dev/null | tail -1`
- $ECHO " "
-
- if [ "$RESTOREPATH" = "" ];
- then
- $ECHO "Error: no backups found"
- exit 2
- else
- $ECHO "Default backup is the latest: $RESTOREPATH"
- $ECHO ""
- $ECHO "Other available backups are: "
- $ECHO ""
- ls -trd $BACKUPPATH/*$SUBNAME* 2>/dev/null | grep -v $RESTOREPATH $OUTPUT
- $ECHO ""
- $ECHO "Using G1 keyboard, enter a unique name substring to change it and <CR>"
- $ECHO -n "or just <CR> to accept: "
- if [ "$ASSUMEDEFAULTUSERINPUT" == 0 ]; then
- read SUBSTRING
- else
- $ECHO "Accepting default."
- SUBSTRING=""
- fi
- $ECHO ""
-
- if [ ! "$SUBSTRING" == "" ]; then
- RESTOREPATH=`ls -trd $BACKUPPATH/*$SUBNAME* 2>/dev/null | grep $SUBSTRING | tail -1`
- else
- RESTOREPATH=`ls -trd $BACKUPPATH/*$SUBNAME* 2>/dev/null | tail -1`
- fi
- if [ "$RESTOREPATH" = "" ]; then
- $ECHO "Error: no matching backups found, aborting"
- exit 2
- fi
- fi
-
- $ECHO "Restore path: $RESTOREPATH"
- $ECHO ""
-
- umount /system /data 2>/dev/null
- mount /system 2>/dev/null
- mount /data 2>/dev/null
- if [ "`mount | grep data`" == "" ]; then
- $ECHO "error: unable to mount /data, aborting"
+ RESTOREPATH=$2
+ if [ ! -f $RESTOREPATH/nandroid.md5 ]; then
+ echo "error: $RESTOREPATH/nandroid.md5 not found, cannot verify backup data"
exit 1
fi
- if [ "`mount | grep system`" == "" ]; then
- $ECHO "error: unable to mount /system, aborting"
+ umount /system 2>/dev/null
+ umount /data 2>/dev/null
+ if [ ! "`mount | grep data`" == "" ]; then
+ echo "error: unable to umount /data, aborting"
+ exit 1
+ fi
+ if [ ! "`mount | grep system`" == "" ]; then
+ echo "error: unable to umount /system, aborting"
exit 1
fi
+ echo "Verifying backup images..."
CWD=$PWD
cd $RESTOREPATH
-
- DEFAULTEXT=""
- if [ `ls *.bz2 2>/dev/null|wc -l` -ge 1 ]; then
- DEFAULTCOMPRESSOR=bzip2
- DEFAULTDECOMPRESSOR=bunzip2
- DEFAULTEXT=.bz2
- fi
- if [ `ls *.gz 2>/dev/null|wc -l` -ge 1 ]; then
- DEFAULTCOMPRESSOR=gzip
- DEFAULTDECOMPRESSOR=gunzip
- DEFAULTEXT=.gz
- fi
-
- if [ ! -f $RESTOREPATH/nandroid.md5$DEFAULTEXT ]; then
- $ECHO "error: $RESTOREPATH/nandroid.md5 not found, cannot verify backup data"
- exit 1
- fi
-
- if [ `ls *.bz2 2>/dev/null|wc -l` -ge 1 -o `ls *.gz 2>/dev/null|wc -l` -ge 1 ]; then
- $ECHO "This backup is compressed with $DEFAULTCOMPRESSOR."
-
- # Make sure that $DEFAULT[DE]COMPRESSOR exists
- if [ `busybox | grep $DEFAULTCOMPRESSOR | wc -l` -le 0 -a\
- `busybox | grep $DEFAULTDECOMPRESSOR | wc -l` -le 0 ]; then
-
- $ECHO "You do not have either the $DEFAULTCOMPRESSOR or the $DEFAULTDECOMPRESSOR"
- $ECHO "to unpack this backup, cleaning up and aborting!"
- umount /system 2>/dev/null
- umount /data 2>/dev/null
- umount /sdcard 2>/dev/null
- exit 1
- fi
- $ECHO "Checking free space /sdcard for the decompression operation."
- FREEBLOCKS="`df -k /sdcard| grep sdcard | awk '{ print $4 }'`"
- # we need about 100MB for gzip to uncompress the files
- if [ $FREEBLOCKS -le 100000 ]; then
- $ECHO "Error: not enough free space available on sdcard (need about 100mb)"
- $ECHO "to perform restore from the compressed images, aborting."
- umount /system 2>/dev/null
- umount /data 2>/dev/null
- umount /sdcard 2>/dev/null
- exit 1
- fi
- $ECHO "Decompressing images, please wait...."
- $ECHO ""
- # Starting from the largest while we still have more space to reduce
- # space requirements
- $DEFAULTCOMPRESSOR -d `ls -S *$DEFAULTEXT`
- $ECHO "Backup images decompressed"
- $ECHO ""
- fi
-
- $ECHO "Verifying backup images..."
md5sum -c nandroid.md5
if [ $? -eq 1 ]; then
- $ECHO "Error: md5sum mismatch, aborting"
+ echo "error: md5sum mismatch, aborting"
exit 1
fi
-
- if [ `ls boot* 2>/dev/null | wc -l` == 0 ]; then
- NOBOOT=1
- fi
- if [ `ls recovery* 2>/dev/null | wc -l` == 0 ]; then
- NORECOVERY=1
- fi
- if [ `ls data* 2>/dev/null | wc -l` == 0 ]; then
- NODATA=1
- fi
- if [ `ls system* 2>/dev/null | wc -l` == 0 ]; then
- NOSYSTEM=1
- fi
- # Amon_RA : If there's no ext backup set EXT2 to 0 so ext2 restore doesn't start
- if [ `ls ext2* 2>/dev/null | wc -l` == 0 ]; then
- EXT2=0
- fi
-
for image in boot recovery; do
- if [ "$NOBOOT" == "1" -a "$image" == "boot" ]; then
- $ECHO ""
- $ECHO "Not flashing boot image!"
- $ECHO ""
- continue
- fi
- if [ "$NORECOVERY" == "1" -a "$image" == "recovery" ]; then
- $ECHO ""
- $ECHO "Not flashing recovery image!"
- $ECHO ""
- continue
- fi
- $ECHO "Flashing $image..."
- $flash_image $image $image.img $OUTPUT
- done
-
- for image in data system; do
- if [ "$NODATA" == "1" -a "$image" == "data" ]; then
- $ECHO ""
- $ECHO "Not restoring data image!"
- $ECHO ""
- continue
- fi
- if [ "$NOSYSTEM" == "1" -a "$image" == "system" ]; then
- $ECHO ""
- $ECHO "Not restoring system image!"
- $ECHO ""
- continue
- fi
- $ECHO "Erasing /$image..."
- cd /$image
- rm -rf * 2>/dev/null
- $ECHO "Unpacking $image image..."
- $unyaffs $RESTOREPATH/$image.img $OUTPUT
- cd /
- sync
- umount /$image
+ echo "Flashing $image..."
+ $flash_image $image $image.img
done
-
- if [ "$EXT2" == 1 ]; then
- # Amon_RA : Check if there's an ext partition before starting to restore
- if [ -e /dev/block/mmcblk0p2 ]; then
- $ECHO "Restoring the ext2 contents."
- CWD=`pwd`
- cd /
-
- if [ `mount | grep /system | wc -l` == 0 ]; then
- mount /system
- else
- mount -o rw,remount /system
- fi
-
- if [ `mount | grep /system/sd | wc -l` == 0 ]; then
- mount /system/sd
- fi
-
- cd $CWD
- CHECK=`mount | grep /system/sd`
-
- if [ "$CHECK" == "" ]; then
- $ECHO "Warning: --ext2 specified but unable to mount the ext2 partition."
- $ECHO "Warning: your phone may be in an inconsistent state on reboot."
- exit 1
- else
- CWD=`pwd`
- cd /system/sd
- # Depending on whether the ext2 backup is compressed we do either or.
- if [ -e $RESTOREPATH/ext2.tar ]; then
- rm -rf * 2>/dev/null
- tar -x$TARFLAGS -f $RESTOREPATH/ext2.tar
- else
- if [ -e $RESTOREPATH/ext2.tgz ]; then
- rm -rf * 2>/dev/null
- tar -x$TARFLAGS -zf $RESTOREPATH/ext2.tgz
- else
- if [ -e $RESTOREPATH/ext2.tar.bz2 ]; then
- rm -rf * 2>/dev/null
- tar -x$TARFLAGS -jf $RESTOREPATH/ext2.tar.bz2
- else
- $ECHO "Warning: --ext2 specified but cannot find the ext2 backup."
- $ECHO "Warning: your phone may be in an inconsistent state on reboot."
- fi
- fi
- fi
- cd $CWD
- sync
- umount /system/sd
- umount /system
-
- fi
- else
- # Amon_RA : Just display a warning
- $ECHO "Warning: --ext2 specified but ext2 partition present on sdcard"
- $ECHO "Warning: your phone may be in an inconsistent state on reboot."
- fi
- fi
- $ECHO "Restore done"
+ echo "Flashing system and data not currently supported"
+ echo "Restore done"
exit 0
-fi
+ ;;
+ backup)
+ break
+ ;;
+ *)
+ echo "Usage: $0 {backup|restore} [/path/to/nandroid/backup/]"
+ echo "- backup will store a full system backup on /sdcard/nandroid/$DEVICEID"
+ echo "- restore path will restore the last made backup for boot, system, recovery and data"
+ exit 1
+ ;;
+esac
# 2.
-if [ "$BACKUP" == 1 ]; then
-
- if [ "$COMPRESS" == 1 ]; then
- ENERGY=`cat /sys/class/power_supply/battery/capacity`
- if [ "`cat /sys/class/power_supply/battery/status`" == "Charging" ]; then
- ENERGY=100
- fi
- if [ ! $ENERGY -ge 30 ]; then
- $ECHO "Warning: Not enough battery power to perform compression."
- COMPRESS=0
- $ECHO "Turning off compression option, you can compress the backup later"
- $ECHO "with the compression options."
- fi
- fi
-
-$ECHO "mounting system and data read-only, sdcard read-write"
+echo "mounting system and data read-only, sdcard read-write"
umount /system 2>/dev/null
umount /data 2>/dev/null
umount /sdcard 2>/dev/null
@@ -1021,61 +180,17 @@
mount -o ro /data || FAIL=2
mount /sdcard || mount /dev/block/mmcblk0 /sdcard || FAIL=3
case $FAIL in
- 1) $ECHO "Error mounting system read-only"; umount /system /data /sdcard; exit 1;;
- 2) $ECHO "Error mounting data read-only"; umount /system /data /sdcard; exit 1;;
- 3) $ECHO "Error mounting sdcard read-write"; umount /system /data /sdcard; exit 1;;
+ 1) echo "Error mounting system read-only"; umount /system /data /sdcard; exit 1;;
+ 2) echo "Error mounting data read-only"; umount /system /data /sdcard; exit 1;;
+ 3) echo "Error mounting sdcard read-write"; umount /system /data /sdcard; exit 1;;
esac
-if [ ! "$SUBNAME" == "" ]; then
- SUBNAME=$SUBNAME-
-fi
-
-# Identify the backup with what partitions have been backed up
-if [ "$NOBOOT" == 0 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"B"
-fi
-if [ "$NOCACHE" == 0 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"C"
-fi
-if [ "$NODATA" == 0 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"D"
-fi
-if [ "$EXT2" == 1 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"E"
-fi
-if [ "$NOMISC" == 0 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"M"
-fi
-if [ "$NORECOVERY" == 0 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"R"
-fi
-if [ "$NOSYSTEM" == 0 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"S"
-fi
-
-if [ ! -e /dev/mtd/mtd6ro ]; then
- NOSPLASH1=1
- NOSPLASH2=1
-fi
-
-if [ "$NOSPLASH1" == 0 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"1"
-fi
-if [ "$NOSPLASH2" == 0 ]; then
- BACKUPLEGEND=$BACKUPLEGEND"2"
-fi
-
-if [ ! "$BACKUPLEGEND" == "" ]; then
- BACKUPLEGEND=$BACKUPLEGEND-
-fi
-
-
TIMESTAMP="`date +%Y%m%d-%H%M`"
-DESTDIR="$BACKUPPATH/$SUBNAME$BACKUPLEGEND$TIMESTAMP"
+DESTDIR="/sdcard/nandroid/$DEVICEID/$TIMESTAMP"
if [ ! -d $DESTDIR ]; then
mkdir -p $DESTDIR
if [ ! -d $DESTDIR ]; then
- $ECHO "error: cannot create $DESTDIR"
+ echo "error: cannot create $DESTDIR"
umount /system 2>/dev/null
umount /data 2>/dev/null
umount /sdcard 2>/dev/null
@@ -1084,7 +199,7 @@
else
touch $DESTDIR/.nandroidwritable
if [ ! -e $DESTDIR/.nandroidwritable ]; then
- $ECHO "error: cannot write to $DESTDIR"
+ echo "error: cannot write to $DESTDIR"
umount /system 2>/dev/null
umount /data 2>/dev/null
umount /sdcard 2>/dev/null
@@ -1094,11 +209,11 @@
fi
# 3.
-$ECHO "checking free space on sdcard"
+echo "checking free space on sdcard"
FREEBLOCKS="`df -k /sdcard| grep sdcard | awk '{ print $4 }'`"
# we need about 130MB for the dump
if [ $FREEBLOCKS -le 130000 ]; then
- $ECHO "Error: not enough free space available on sdcard (need 130mb), aborting."
+ echo "error: not enough free space available on sdcard (need 130mb), aborting."
umount /system 2>/dev/null
umount /data 2>/dev/null
umount /sdcard 2>/dev/null
@@ -1108,683 +223,71 @@
if [ -e /dev/mtd/mtd6ro ]; then
- if [ "$NOSPLASH1" == 0 ]; then
- $ECHO -n "Dumping splash1 from device over tcp to $DESTDIR/splash1.img..."
+ echo -n "Dumping splash1 from device over tcp to $DESTDIR/splash1.img..."
dd if=/dev/mtd/mtd6ro of=$DESTDIR/splash1.img skip=19072 bs=2048 count=150 2>/dev/null
- $ECHO "done"
+ echo "done"
sleep 1s
- else
- $ECHO "Dump of the splash1 image suppressed."
- fi
- if [ "$NOSPLASH2" == 0 ]; then
- $ECHO -n "Dumping splash2 from device over tcp to $DESTDIR/splash2.img..."
+ echo -n "Dumping splash2 from device over tcp to $DESTDIR/splash2.img..."
dd if=/dev/mtd/mtd6ro of=$DESTDIR/splash2.img skip=19456 bs=2048 count=150 2>/dev/null
- $ECHO "done"
- else
- $ECHO "Dump of the splash2 image suppressed."
- fi
+ echo "done"
fi
# 5.
for image in boot recovery misc; do
-
- case $image in
- boot)
- if [ "$NOBOOT" == 1 ]; then
- $ECHO "Dump of the boot partition suppressed."
- continue
- fi
- ;;
- recovery)
- if [ "$NORECOVERY" == 1 ]; then
- $ECHO "Dump of the recovery partition suppressed."
- continue
- fi
- ;;
- misc)
- if [ "$NOMISC" == 1 ]; then
- $ECHO "Dump of the misc partition suppressed."
- continue
- fi
- ;;
- esac
-
# 5a
DEVICEMD5=`$dump_image $image - | md5sum | awk '{ print $1 }'`
sleep 1s
MD5RESULT=1
# 5b
- $ECHO -n "Dumping $image to $DESTDIR/$image.img..."
+ echo -n "Dumping $image to $DESTDIR/$image.img..."
ATTEMPT=0
while [ $MD5RESULT -eq 1 ]; do
let ATTEMPT=$ATTEMPT+1
# 5b1
- $dump_image $image $DESTDIR/$image.img $OUTPUT
+ $dump_image $image $DESTDIR/$image.img
sync
# 5b3
- echo "${DEVICEMD5} $DESTDIR/$image.img" | md5sum -c -s - $OUTPUT
+ echo "${DEVICEMD5} $DESTDIR/$image.img" | md5sum -c -s -
if [ $? -eq 1 ]; then
true
else
MD5RESULT=0
fi
if [ "$ATTEMPT" == "5" ]; then
- $ECHO "Fatal error while trying to dump $image, aborting."
+ echo "fatal error while trying to dump $image, aborting"
umount /system
umount /data
umount /sdcard
exit 1
fi
done
- $ECHO "done"
+ echo "done"
done
# 6
for image in system data cache; do
- case $image in
- system)
- if [ "$NOSYSTEM" == 1 ]; then
- $ECHO "Dump of the system partition suppressed."
- continue
- fi
- ;;
- data)
- if [ "$NODATA" == 1 ]; then
- $ECHO "Dump of the data partition suppressed."
- continue
- fi
- ;;
- cache)
- if [ "$NOCACHE" == 1 ]; then
- $ECHO "Dump of the cache partition suppressed."
- continue
- fi
- ;;
- esac
-
# 6a
- $ECHO -n "Dumping $image to $DESTDIR/$image.img..."
- $mkyaffs2image /$image $DESTDIR/$image.img $OUTPUT
+ echo -n "Dumping $image to $DESTDIR/$image.img..."
+ $mkyaffs2image /$image $DESTDIR/$image.img
sync
- $ECHO "done"
+ echo "done"
done
-# Backing up the ext2 partition, not really for the backup but to switch ROMS and apps at the same time.
-
-if [ "$EXT2" == 1 ]; then
- $ECHO "Storing the ext2(Apps, Dalvik-cache) contents in the backup folder."
-
- CHECK1=`mount | grep /system`
- if [ "$CHECK1" == "" ]; then
- mount /system 2>/dev/null
- fi
- CHECK2=`mount | grep /system/sd`
- if [ "$CHECK2" == "" ]; then
- mount /system/sd 2>/dev/null
- fi
-
- CHECK1=`mount | grep /system`
- CHECK2=`mount | grep /system/sd`
- if [ "$CHECK1" == "" -o "$CHECK2" == "" ]; then
- $ECHO "Warning: --ext2 specified but unable to mount the ext2 partition."
- exit 1
- else
-
- CWD=`pwd`
- cd /system/sd
- # Depending on the whether we want it compressed we do either or.
- if [ "$COMPRESS" == 0 ]; then
- tar -cvf $DESTDIR/ext2.tar ./
- else
- if [ "$DEFAULTCOMPRESSOR" == "bzip2" ]; then
- tar -cvjf $DESTDIR/ext2.tar.bz2 ./
- else
- tar -cvzf $DESTDIR/ext2.tgz ./
- fi
- fi
- cd $CWD
- umount /system/sd
- fi
-fi
-
# 7.
-$ECHO -n "generating md5sum file..."
+echo -n "generating md5sum file..."
CWD=$PWD
cd $DESTDIR
md5sum *img > nandroid.md5
-
-# 7b.
-if [ "$COMPRESS" == 1 ]; then
- $ECHO "Compressing the backup, may take a bit of time, please wait..."
- $ECHO "checking free space on sdcard for the compression operation."
- FREEBLOCKS="`df -k /sdcard| grep sdcard | awk '{ print $4 }'`"
- # we need about 70MB for the intermediate storage needs
- if [ $FREEBLOCKS -le 70000 ]; then
- $ECHO "error: not enough free space available on sdcard for compression operation (need 70mb)"
- $ECHO "leaving this backup uncompressed."
- else
- # we are already in $DESTDIR, start compression from the smallest files
- # to maximize space for the largest's compression, less likely to fail.
- # To decompress reverse the order.
- $DEFAULTCOMPRESSOR $DEFAULTLEVEL `ls -S -r * | grep -v ext2`
- fi
-fi
-
cd $CWD
-$ECHO "done"
+echo "done"
# 8.
-$ECHO "unmounting system, data and sdcard"
+echo "unmounting system, data and sdcard"
umount /system
umount /data
umount /sdcard
# 9.
-$ECHO "Backup successful."
-if [ "$AUTOREBOOT" == 1 ]; then
- reboot
-fi
-exit 0
-fi
-
-
-# ----------------------------------GETTING UPDATES DIRECT FROM THE WEB USING WIFI-------------
-
-if [ "$WEBGET" == 1 ]; then
- $ECHO "mounting system and data read-only, sdcard read-write"
- umount /system 2>/dev/null
- umount /data 2>/dev/null
- umount /sdcard 2>/dev/null
-
- # Since we are in recovery, these file-systems have to be mounted
- $ECHO "Mounting /system and /data for starting WiFi"
- mount -o ro /system || FAIL=1
- # Need to write to this system to setup nameservers for the wifi
- mount -o rw /data || FAIL=2
- mount /sdcard || mount /dev/block/mmcblk0 /sdcard || FAIL=3
-
- case $FAIL in
- 1) $ECHO "Error mounting system read-only"; umount /system /data /sdcard; exit 1;;
- 2) $ECHO "Error mounting data read-write"; umount /system /data /sdcard; exit 1;;
- 3) $ECHO "Error mounting sdcard read-write"; umount /system /data /sdcard; exit 1;;
- esac
-
- if [ "$WEBGETSOURCE" == "" ]; then
- # Set the URL to the current latest update
- if [ "$ITSANUPDATE" == 1 ]; then
- WEBGETSOURCE=$DEFAULTWEBUPDATE
- else
- WEBGETSOURCE=$DEFAULTWEBIMAGE
- fi
- fi
-
- if [ "$AUTOAPPLY" == 0 ]; then
- # Need to check space on sdcard only if we dump the update there.
- $ECHO "Checking free space on sdcard for the update download."
- FREEBLOCKS="`df -k /sdcard| grep sdcard | awk '{ print $4 }'`"
- # we need about 50MB for the storage needs
- if [ $FREEBLOCKS -le 50000 ]; then
- $ECHO "Error: not enough free space available on sdcard for the update operation (need 50mb)"
- $ECHO "Please free up space before invoking this option again."
- $ECHO "Cleaning up, unmounting file systems, aborting."
- umount /system /data /sdcard
- exit 1
- fi
- fi
-
- if [ ! `basename $WEBGETSOURCE` == `basename $WEBGETSOURCE .zip` ]; then
- # It is a zip, not img.
- ITSANUPDATE=1
- else
- if [ ! `basename $WEBGETSOURCE` == `basename $WEBGETSOURCE .img` ]; then
- # It is an img file.
- ITSANIMAGE=1
- else
- # Unknown file type
- $ECHO "Unknown file type, cleaning up, aborting."
- umount /system /data /sdcard
- exit 1
- fi
- fi
-
-
- if [ "$ITSANUPDATE" == 1 -a "$AUTOAPPLY" == 0 ]; then
- # Move the previous update aside, if things go badly with the new update, it is good
- # to have the last one still around :-)
-
- # If we cannot figure out what the file name used to be, create this new one with a time stamp
- OLDNAME="OLD-update-`date +%Y%m%d-%H%M`"
-
- if [ -e $WEBGETTARGET/update.zip ]; then
- $ECHO "There is already an update.zip in $WEBGETTARGET, backing it up to"
- if [ -e $WEBGETTARGET/update.name ]; then
- OLDNAME=`cat $WEBGETTARGET/update.name`
- # Backup the name file (presumably contains the old name of the update.zip
- mv -f $WEBGETTARGET/update.name $WEBGETTARGET/`basename $OLDNAME .zip`.name
- fi
- $ECHO "`basename $OLDNAME .zip`.zip"
- mv -f $WEBGETTARGET/update.zip $WEBGETTARGET/`basename $OLDNAME .zip`.zip
-
- # Backup the MD5sum file
- if [ -e $WEBGETTARGET/update.MD5sum ]; then
- mv -f $WEBGETTARGET/update.MD5sum $WEBGETTARGET/`basename $OLDNAME .zip`.MD5sum
- fi
- fi
- fi
-
- $ECHO "Starting WiFI, please wait..."
- insmod /system/lib/modules/wlan.ko
-
- wlan_loader -f /system/etc/wifi/Fw1251r1c.bin -e /proc/calibration -i /system/etc/wifi/tiwlan.ini
-
- CWD=`pwd`
- cd /data/local/tmp
-
- wpa_supplicant -f -Dtiwlan0 -itiwlan0 -c/data/misc/wifi/wpa_supplicant.conf&
-
- sleep 5
- $ECHO "wpa_supplicant started"
- $ECHO ""
-
- echo "nameserver $NAMESERVER1" >/etc/resolv.conf
- echo "nameserver $NAMESERVER2" >>/etc/resolv.conf
-
- #We want the wifi to assign a dynamic address
- $ECHO "Starting DHCPCD server (dynamic address assignment)"
- # -BKL flags????
- dhcpcd -d tiwlan0 2>/dev/null &
-
- # Have to wait for it to init stuff
- sleep 10
-
-
- CHECK1=`ps | grep -v grep | grep dhcpcd`
- CHECK2=`ps | grep -v grep | grep wpa_supplicant`
- if [ "$CHECK1" == "" -o "$CHECK2" == "" ]; then
- $ECHO "Error: wpa_supplicant or DHCPCD server is not running, cleaning up, aborting"
- rm -- -Dtiwlan0
- cd $CWD
-
- $ECHO "unmounting /system, /data and /sdcard"
- umount /system
- umount /data
- umount /sdcard
- exit 2
- fi
-
- $ECHO "DHCPCD server started"
- $ECHO ""
-
- $ECHO "WiFi is running!"
- $ECHO ""
-
- if [ "$AUTOAPPLY" == 1 ]; then
- $ECHO "Autoapply is on, retrieving the update into /cache/`basename $WEBGETSOURCE`"
-
- wget -O /cache/`basename $WEBGETSOURCE` $WEBGETSOURCE $OUTPUT
-
- if [ ! -e /cache/recovery ]; then
- mkdir /cache/recovery
- chmod 777 /cache/recovery
- fi
- if [ -e /cache/recovery/command ]; then
- echo "--update_package=CACHE:`basename $WEBGETSOURCE`" >>/cache/recovery/command
- else
- echo "--update_package=CACHE:`basename $WEBGETSOURCE`" >/cache/recovery/command
- fi
- chmod 555 /cache/recovery/command
- # Once rebooted the update will be applied.
-
- else
-
- if [ "$ITSANUPDATE" == 1 ]; then
- $ECHO "Retrieving system update into $WEBGETTARGET/update.zip, please wait..."
- wget -O $WEBGETTARGET/update.zip $WEBGETSOURCE $OUTPUT
-
- echo "`basename $WEBGETSOURCE`" > $WEBGETTARGET/update.name
- $ECHO ""
- $ECHO "Update retrieved, if concerned, please compare the md5sum with the number"
- $ECHO "you see on the web page, if it is NOT the same, the retrieval"
- $ECHO "has failed and has to be repeated."
- $ECHO ""
- $ECHO `md5sum $WEBGETTARGET/update.zip | tee $WEBGETTARGET/update.MD5sum`
- $ECHO ""
- $ECHO "MD5sum has been stored in $WEBGETTARGET/update.MD5sum"
- else
- $ECHO "Retrieving the image into $WEBGETTARGET/`basename $WEBGETSOURCE`, please wait..."
- wget -O $WEBGETTARGET/`basename $WEBGETSOURCE` $WEBGETSOURCE $OUTPUT
- $ECHO ""
- $ECHO "$WEBGETSOURCE retrieved, if concerned, please compare the md5sum with the number"
- $ECHO "you see on the web page, if it is NOT the same, the retrieval"
- $ECHO "has failed and has to be repeated."
- $ECHO ""
- md5sum $WEBGETTARGET/`basename $WEBGETSOURCE` | tee $WEBGETTARGET/`basename $WEBGETSOURCE .img`.MD5sum $OUTPUT
- $ECHO ""
- $ECHO "MD5sum has been stored in $WEBGETTARGET/`basename $WEBGETSOURCE .img`.MD5sum"
- $ECHO ""
- $ECHO -n "Would you like to flash this image into boot or recovery? (or no for no flash) "
- read ANSWER
- if [ "$ANSWER" == "boot" ]; then
- $ECHO "Flashing $WEBGETTARGET/`basename $WEBGETSOURCE` into the boot partition."
- $flash_image boot $WEBGETTARGET/`basename $WEBGETSOURCE`
- else
- if [ "$ANSWER" == "recovery" ]; then
- $ECHO "Moving $WEBGETTARGET/`basename $WEBGETSOURCE` into the /data/recovery.img"
- $ECHO "and /system/recovery.img"
- cp -f $WEBGETTARGET/`basename $WEBGETSOURCE` /data/recovery.img
- mount -o rw,remount /system
- cp -f $WEBGETTARGET/`basename $WEBGETSOURCE` /system/recovery.img
- $ECHO "Depending on the settings of your specific ROM, the recovery.img will be"
- $ECHO "flashed at the normal bootup time either from /system or /data."
- else
- $ECHO "Not flashing the image."
- fi
- fi
- fi
- $ECHO ""
-
- fi
-
- $ECHO "Shutting down DHCPCD service and wpa_supplicant"
- killall -TERM dhcpcd
- TEMPVAR=`ps | grep -v grep | grep wpa_supplicant`
- TEMPVAR=`echo $TEMPVAR | cut -f 1 -d ' '`
- kill -TERM $TEMPVAR
-
- while true; do
- CHECK=`ps | grep -v grep | grep dhcpcd`
- if [ ! "$CHECK" == "" ]; then
- sleep 1
- else
- break
- fi
- done
-
- while true; do
- CHECK=`ps | grep -v grep | grep wpa_supplicant`
- if [ ! "$CHECK" == "" ]; then
- sleep 1
- else
- break
- fi
- done
- #sleep 5
-
- $ECHO "Cleaning up..."
- # Looks like cannot clean up wlan module since chdir is missing
- #rmmod wlan
- rm -- -Dtiwlan0
- cd $CWD
-
- $ECHO "unmounting /system, /data and /sdcard"
- umount /system
- umount /data
- umount /sdcard
-
- if [ "$AUTOAPPLY" == 1 ]; then
- $ECHO "Auto apply update is on, rebooting into recovery to apply the update."
- $ECHO "When the update is complete reboot into the normal mode."
- $ECHO "The device will reboot and the update will be applied in 10 seconds!"
- sleep 10
- reboot recovery
- else
- if [ "$ITSANUPDATE" == 1 ]; then
- $ECHO "If you put the update into a folder other than /sdcard you need to use --getupdate to"
- $ECHO "prepare the update for application."
- $ECHO "You may want to execute 'reboot recovery' and choose update option to flash the update."
- $ECHO "Or in the alternative, shutdown your phone with reboot -p, and then press <CAMERA>+<POWER>"
- $ECHO "to initiate a normal system update procedure, if you have stock SPL."
- fi
- exit 0
- fi
-fi
-
-# -------------------------------------DELETION, COMPRESSION OF BACKUPS---------------------------------
-if [ "$COMPRESS" == 1 -o "$DELETE" == 1 ]; then
- $ECHO "Unmounting /system and /data to be on the safe side, mounting /sdcard read-write."
- umount /system 2>/dev/null
- umount /data 2>/dev/null
- umount /sdcard 2>/dev/null
-
- FAIL=0
- # Since we are in recovery, these file-system have to be mounted
- $ECHO "Mounting /sdcard to look for backups."
- mount /sdcard || mount /dev/block/mmcblk0 /sdcard || FAIL=1
-
- if [ "$FAIL" == 1 ]; then
- $ECHO "Error mounting /sdcard read-write, cleaning up..."; umount /system /data /sdcard; exit 1
- fi
-
- $ECHO "The current size of /sdcard FAT32 filesystem is `du /sdcard | tail -1 | cut -f 1 -d '/'`Kb"
- $ECHO ""
-
- # find the oldest backup, but show the user other options
- $ECHO "Looking for the oldest backup to delete, newest to compress,"
- $ECHO "will display all choices!"
- $ECHO ""
- $ECHO "Here are the backups you have picked within this repository $BACKUPPATH:"
-
- if [ "$DELETE" == 1 ]; then
- RESTOREPATH=`ls -td $BACKUPPATH/*$SUBNAME* 2>/dev/null | tail -1`
- ls -td $BACKUPPATH/*$SUBNAME* 2>/dev/null $OUTPUT
- else
- RESTOREPATH=`ls -trd $BACKUPPATH/*$SUBNAME* 2>/dev/null | tail -1`
- ls -trd $BACKUPPATH/*$SUBNAME* 2>/dev/null $OUTPUT
- fi
- $ECHO " "
-
- if [ "$RESTOREPATH" = "" ]; then
- $ECHO "Error: no backups found"
- exit 2
- else
- if [ "$DELETE" == 1 ]; then
- $ECHO "Default backup to delete is the oldest: $RESTOREPATH"
- $ECHO ""
- $ECHO "Other candidates for deletion are: "
- ls -td $BACKUPPATH/*$SUBNAME* 2>/dev/null | grep -v $RESTOREPATH $OUTPUT
- fi
- if [ "$COMPRESS" == 1 ]; then
- $ECHO "Default backup to compress is the latest: $RESTOREPATH"
- $ECHO ""
- $ECHO "Other candidates for compression are: "
- ls -trd $BACKUPPATH/*$SUBNAME* 2>/dev/null | grep -v $RESTOREPATH $OUTPUT
- fi
-
- $ECHO ""
- $ECHO "Using G1 keyboard, enter a unique name substring to change it and <CR>"
- $ECHO -n "or just <CR> to accept: "
- if [ "$ASSUMEDEFAULTUSERINPUT" == 0 ]; then
- read SUBSTRING
- else
- $ECHO "Accepting default."
- SUBSTRING=""
- fi
-
- if [ ! "$SUBSTRING" == "" ]; then
- RESTOREPATH=`ls -td $BACKUPPATH/*$SUBNAME* 2>/dev/null | grep $SUBSTRING | tail -1`
- else
- RESTOREPATH=`ls -td $BACKUPPATH/*$SUBNAME* 2>/dev/null | tail -1`
- fi
- if [ "$RESTOREPATH" = "" ]; then
- $ECHO "Error: no matching backup found, aborting"
- exit 2
- fi
- fi
-
- if [ "$DELETE" == 1 ]; then
- $ECHO "Deletion path: $RESTOREPATH"
- $ECHO ""
- $ECHO "WARNING: Deletion of a backup is an IRREVERSIBLE action!!!"
- $ECHO -n "Are you absolutely sure? {yes | YES | Yes | no | NO | No}: "
- if [ "$ASSUMEDEFAULTUSERINPUT" == 0 ]; then
- read ANSWER
- else
- ANSWER=yes
- $ECHO "Accepting default."
- fi
- $ECHO ""
- if [ "$ANSWER" == "yes" -o "$ANSWER" == "YES" -o "$ANSWER" == "Yes" ]; then
- rm -rf $RESTOREPATH
- $ECHO ""
- $ECHO "$RESTOREPATH has been permanently removed from your SDCARD."
- $ECHO "Post deletion size of the /sdcard FAT32 filesystem is `du /sdcard | tail -1 | cut -f 1 -d '/'`Kb"
- else
- if [ "$ANSWER" == "no" -o "$ANSWER" == "NO" -o "$ANSWER" == "No" ]; then
- $ECHO "The chosen backup will NOT be removed."
- else
- $ECHO "Invalid answer: assuming NO."
- fi
- fi
- fi
-
- if [ "$COMPRESS" == 1 ]; then
-
- CWD=`pwd`
- cd $RESTOREPATH
-
- if [ `ls *.bz2 2>/dev/null|wc -l` -ge 1 -o `ls *.gz 2>/dev/null|wc -l` -ge 1 ]; then
- $ECHO "This backup is already compressed, cleaning up, aborting..."
- cd $CWD
- umount /sdcard 2>/dev/null
- exit 0
- fi
-
- $ECHO "checking free space on sdcard for the compression operation."
- FREEBLOCKS="`df -k /sdcard| grep sdcard | awk '{ print $4 }'`"
- # we need about 70MB for the intermediate storage needs
- if [ $FREEBLOCKS -le 70000 ]; then
- $ECHO "Error: not enough free space available on sdcard for compression operation (need 70mb)"
- $ECHO "leaving this backup uncompressed."
- else
- # we are already in $DESTDIR, start compression from the smallest files
- # to maximize space for the largest's compression, less likely to fail.
- # To decompress reverse the order.
- $ECHO "Pre compression size of the /sdcard FAT32 filesystem is `du /sdcard | tail -1 | cut -f 1 -d '/'`Kb"
- $ECHO ""
- $ECHO "Compressing the backup may take a bit of time, please wait..."
- $DEFAULTCOMPRESSOR $DEFAULTLEVEL `ls -S -r *`
- $ECHO ""
- $ECHO "Post compression size of the /sdcard FAT32 filesystem is `du /sdcard | tail -1 | cut -f 1 -d '/'`Kb"
- fi
- fi
-
- $ECHO "Cleaning up."
- cd $CWD
- umount /sdcard 2>/dev/null
- exit 0
-
-fi
-
-if [ "$GETUPDATE" == 1 ]; then
- $ECHO "Unmounting /system and /data to be on the safe side, mounting /sdcard read-write."
- umount /system 2>/dev/null
- umount /data 2>/dev/null
- umount /sdcard 2>/dev/null
-
- FAIL=0
- # Since we are in recovery, these file-system have to be mounted
- $ECHO "Mounting /sdcard to look for updates to flash."
- mount /sdcard || mount /dev/block/mmcblk0 /sdcard || FAIL=1
-
- if [ "$FAIL" == 1 ]; then
- $ECHO "Error mounting /sdcard read-write, cleaning up..."; umount /system /data /sdcard; exit 1
- fi
-
- $ECHO "The current size of /sdcard FAT32 filesystem is `du /sdcard | tail -1 | cut -f 1 -d '/'`Kb"
- $ECHO ""
-
- # find all the files with update in them, but show the user other options
- $ECHO "Looking for all *update*.zip candidate files to flash."
- $ECHO ""
- $ECHO "Here are the updates limited by the subname $SUBNAME found"
- $ECHO "within the repository $DEFAULTUPDATEPATH:"
- $ECHO ""
- RESTOREPATH=`ls -trd $DEFAULTUPDATEPATH/*$SUBNAME*.zip 2>/dev/null | grep update | tail -1`
- if [ "$RESTOREPATH" == "" ]; then
- $ECHO "Error: found no matching updates, cleaning up, aborting..."
- umount /sdcard 2>/dev/null
- exit 2
- fi
- ls -trd $DEFAULTUPDATEPATH/*$SUBNAME*.zip 2>/dev/null | grep update $OUTPUT
- $ECHO ""
- $ECHO "The default update is the latest $RESTOREPATH"
- $ECHO ""
- $ECHO "Using G1 keyboard, enter a unique name substring to change it and <CR>"
- $ECHO -n "or just <CR> to accept: "
- if [ "$ASSUMEDEFAULTUSERINPUT" == 0 ]; then
- read SUBSTRING
- else
- $ECHO "Accepting default."
- SUBSTRING=""
- fi
- $ECHO ""
-
- if [ ! "$SUBSTRING" == "" ]; then
- RESTOREPATH=`ls -trd $DEFAULTUPDATEPATH/*$SUBNAME*.zip 2>/dev/null | grep update | grep $SUBSTRING | tail -1`
- else
- RESTOREPATH=`ls -trd $DEFAULTUPDATEPATH/*$SUBNAME*.zip 2>/dev/null | grep update | tail -1`
- fi
- if [ "$RESTOREPATH" = "" ]; then
- $ECHO "Error: no matching backups found, aborting"
- exit 2
- fi
-
- if [ "$RESTOREPATH" == "/sdcard/update.zip" ]; then
- $ECHO "You chose update.zip, it is ready for flashing, there nothing to do."
- else
-
- # Things seem ok so far.
-
- # Move the previous update aside, if things go badly with the new update, it is good
- # have the last one still around :-)
-
- # If we cannot figure out what the file name used to be, create this new one with a time stamp
- OLDNAME="OLD-update-`date +%Y%m%d-%H%M`"
-
- if [ -e /sdcard/update.zip ]; then
- $ECHO "There is already an update.zip in /sdcard, backing it up to"
- if [ -e /sdcard/update.name ]; then
- OLDNAME=`cat /sdcard/update.name`
- # Backup the name file (presumably contains the old name of the update.zip
- mv -f /sdcard/update.name /sdcard/`basename $OLDNAME .zip`.name
- fi
- $ECHO "`basename $OLDNAME .zip`.zip"
- mv -f /sdcard/update.zip /sdcard/`basename $OLDNAME .zip`.zip
-
- # Backup the MD5sum file
- if [ -e /sdcard/update.MD5sum ]; then
- mv -f /sdcard/update.MD5sum /sdcard/`basename $OLDNAME .zip`.MD5sum
- fi
- fi
-
- if [ -e $DEFAULTUPDATEPATH/`basename $RESTOREPATH .zip`.MD5sum ]; then
- mv -f $DEFAULTUPDATEPATH/`basename $RESTOREPATH .zip`.MD5sum /sdcard/update.MD5sum
- else
- $ECHO `md5sum $RESTOREPATH | tee /sdcard/update.MD5sum`
- $ECHO ""
- $ECHO "MD5sum has been stored in /sdcard/update.MD5sum"
- $ECHO ""
- fi
- if [ -e $DEFAULTUPDATEPATH/`basename $RESTOREPATH .zip`.name ]; then
- mv -f $DEFAULTUPDATEPATH/`basename $RESTOREPATH .zip`.name /sdcard/update.name
- else
- echo "`basename $RESTOREPATH`" > /sdcard/update.name
- fi
-
- mv -i $RESTOREPATH /sdcard/update.zip
-
-
- $ECHO "Your file $RESTOREPATH has been moved to the root of sdcard, and is ready for flashing!!!"
-
- fi
-
- $ECHO "You may want to execute 'reboot recovery' and then choose the update option to flash the update."
- $ECHO "Or in the alternative, shutdown your phone with reboot -p, and then press <CAMERA>+<POWER> to"
- $ECHO "initiate a standard update procedure if you have stock SPL."
- $ECHO ""
- $ECHO "Cleaning up and exiting."
- umount /sdcard 2>/dev/null
- exit 0
-fi
+echo "Backup successful."