First commit
This commit is contained in:
commit
00b4d46db6
3 changed files with 174 additions and 0 deletions
20
README.md
Normal file
20
README.md
Normal file
|
@ -0,0 +1,20 @@
|
|||
Android Oandbackup restore script
|
||||
---------------------------------
|
||||
|
||||
A simple bash script to restore application backuped with OandBackup on a rooted
|
||||
Android Phone. This script can restore GPG encrypted backup.
|
||||
|
||||
to use this script, clone the repo :
|
||||
|
||||
```shell
|
||||
git clone https://git.epha.se/ephase/oandbackup_restore
|
||||
cd oandbackup_restore
|
||||
git submodule init && git submodule update
|
||||
```
|
||||
|
||||
This script is in devellopment, this is not a working version
|
||||
|
||||
## Licence
|
||||
|
||||
Do what you want and feel free to send me a message or offer me a beer if you
|
||||
come near Bordeaux - France.
|
1
lib/message
Submodule
1
lib/message
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit e1f41d37fa105ea24749cf44d731c958ecfc2073
|
153
restore.sh
Executable file
153
restore.sh
Executable file
|
@ -0,0 +1,153 @@
|
|||
#!/bin/bash
|
||||
source ./lib/message/message.sh
|
||||
|
||||
DATADIR="/data/data"
|
||||
PHONE_TMPDIR="/sdcard/tmp"
|
||||
TMPDIR="/tmp/a_restore"
|
||||
SYSTEM_PART="/dev/block/mmcblk0p14"
|
||||
DEBUG=0
|
||||
DRYRUN=""
|
||||
CURRENT_DIR=$(pwd)
|
||||
|
||||
process_args () {
|
||||
while :; do
|
||||
case $1 in
|
||||
-h|-\?|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
v|--version)
|
||||
show_version
|
||||
exit 0
|
||||
;;
|
||||
-d|--debug)
|
||||
DEBUG=1
|
||||
;;
|
||||
--dry-run)
|
||||
DRYRUN="echo"
|
||||
;;
|
||||
*)
|
||||
debug "folder : $1"
|
||||
[[ ! -d "$1" ]] && error "You must specify a folder" "fatal"
|
||||
cd "$1"
|
||||
break
|
||||
esac
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
usage () {
|
||||
msg "\n**Android App Restore script for oandbackup**\n"
|
||||
msg "This script restore backup made by oandbackup\n\n"
|
||||
msg "__USAGE__ :\n"
|
||||
msg "$0 -d --dry-run <folder>\n"
|
||||
msg "-d\t\tactivate debug mode\n"
|
||||
msg "--dry-mode\tdo nothing\n"
|
||||
msg "\n"
|
||||
}
|
||||
|
||||
show_version () {
|
||||
msg "\nversion 0.01A\n"
|
||||
}
|
||||
|
||||
clean () {
|
||||
msg "\n\nTerminating script ..."
|
||||
msg "\nCleaning phone temp directory : "
|
||||
$ADB_EXE shell "rm -rf $PHONE_TMPDIR" 2> /dev/null
|
||||
[[ $? -eq 0 ]] && msg "green" "Ok\n" || msg "red" "Error"
|
||||
|
||||
msg "\nCleaning local temp directory : "
|
||||
rm -rf $TMPDIR
|
||||
[[ $? -eq 0 ]] && msg "green" "Ok\n" || msg "red" "Error\n"
|
||||
exit 0
|
||||
}
|
||||
|
||||
trap clean 2
|
||||
process_args $@
|
||||
GPG_EXE=$(which gpg)
|
||||
ADB_EXE=$(which adb)
|
||||
ZIP_EXE=$(which unzip)
|
||||
[[ -z $GPG_EXE ]] && error "gpg executable not found"
|
||||
[[ -z $ADB_EXE ]] && error "adb executable not found"
|
||||
[[ -z $ZIP_EXE ]] && error "unzip executable not found"
|
||||
|
||||
if [ ! -z $DRYRUN ]
|
||||
then
|
||||
GPG_EXE="debug $GPG_EXE"
|
||||
ADB_EXE="debug $ADB_EXE"
|
||||
ZIP_EXE="debug $ZIP_EXE"
|
||||
fi
|
||||
|
||||
$ADB_EXE shell "mkdir $PHONE_TMPDIR" 2> /dev/null
|
||||
msg "**Android Restore App**\n\n"
|
||||
msg "**Pass 1** Install Application\n"
|
||||
mkdir -p $TMPDIR
|
||||
|
||||
for d in $(ls -d */)
|
||||
do
|
||||
mkdir -p ${TMPDIR}/${d}
|
||||
msg "\tInstall __${d}__ : "
|
||||
cd "$d"
|
||||
[[ -f base.apk.gpg ]] && $GPG_EXE --decrypt --no-verbose base.apk.gpg > ${TMPDIR}/${d}base.apk 2> /dev/null
|
||||
|
||||
if [ -f ${TMPDIR}/${d}base.apk ]
|
||||
then
|
||||
$ADB_EXE push ${TMPDIR}/${d}base.apk ${PHONE_TMPDIR}/base.apk > /dev/null || (msg "red" "Error in adb push\n"; cd ..; continue)
|
||||
else
|
||||
msg "red" " no application to restore \n"
|
||||
cd ..
|
||||
continue
|
||||
fi
|
||||
|
||||
#I've got some problem with adb install ...
|
||||
[[ -z $DRYRUN ]] && ret=$(adb install ${TMPDIR}/${d}base.apk)
|
||||
[[ "$ret" -eq "Success" ]] && msg "green" " installed\n" || msg "red" " error\n"
|
||||
$ADB_EXE shell "rm ${PHONE_TMPDIR}/base.apk"
|
||||
cd ..
|
||||
done
|
||||
|
||||
msg "\nAll installations done, reboot phone into recovery\n"
|
||||
$ADB_EXE reboot recovery
|
||||
msg "When recovery is ready, press space to continue..."
|
||||
while true; do
|
||||
IFS= read -s -n1 -r key
|
||||
[[ $key == ' ' ]] && break
|
||||
done
|
||||
|
||||
#Mount system partition to avoid error in ls
|
||||
$ADB_EXE shell "mount $SYSTEM_PART /system"
|
||||
sleep 2
|
||||
|
||||
msg "\n\n**Pass 2** Restore apps data\n"
|
||||
|
||||
for d in $(ls -d */)
|
||||
do
|
||||
msg "\tRestore data for __${d}__ : "
|
||||
cd $d
|
||||
mkdir -p ${TMPDIR}/${d}
|
||||
datafile=$(find . -type f -name "*.zip.gpg")
|
||||
|
||||
if [ -z $datafile ]
|
||||
then
|
||||
basename=$(basename ${d}).zip
|
||||
[[ -z $basename ]] && error "Can't found data file"
|
||||
else
|
||||
basename=$(basename $datafile .gpg)
|
||||
$GPG_EXE --no-verbose --decrypt $datafile > ${TMPDIR}/${d}$basename 2>/dev/null
|
||||
fi
|
||||
|
||||
$ZIP_EXE -qq ${TMPDIR}/${d}$basename -d ${TMPDIR}/${d} || (msg "red" "Can't extract $basename\n"; cd ..; continue)
|
||||
|
||||
#get app user and group
|
||||
user=$($ADB_EXE shell "ls -dla ${DATADIR}/${d}" | awk '{print $3}')
|
||||
if [ ! -z $user ]
|
||||
then
|
||||
msg "found user **$user** "
|
||||
$ADB_EXE push ${TMPDIR}/${d}${d}* $DATADIR/${d} >/dev/null
|
||||
$ADB_EXE shell "chown -R $user:$user ${DATADIR}/${d}*" && msg "green" "Done\n" || error "red" "can't chown\n"
|
||||
else
|
||||
warning "Can't found user"
|
||||
fi
|
||||
cd ..
|
||||
done
|
||||
clean
|
Reference in a new issue