Skip to content

Instantly share code, notes, and snippets.

@arawas
Created July 23, 2011 20:08
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arawas/1101829 to your computer and use it in GitHub Desktop.
Save arawas/1101829 to your computer and use it in GitHub Desktop.
Backup/restore for apt/Cydia repos and packages, libactivator/libhide/libiconsupport settings.
#!/bin/sh
#
# @(#) bkrs.sh
# $Id: bkrs.sh,v.0.03 2012/05/28 00:00:00 arawas Exp $
#
# Usage:
# [su; |sudo] $CMDNAME -[b|r] [-o <DIR>]
# -b Backup
# -r Restore
#
# -o Currently NOT supported this feature
#
# You need have superuser privilege!
# Use 'sudo' or 'su' before run this script.
#
# Description:
# backup and restore for Cydia's stuff.
#
# Depends:
# apt7,aptitude,unzip,zip
#
########################################################################
#readonly CMDNAME=`basename $0`
readonly CMDNAME=bkrs.sh
readonly HOME_DIR=/var/mobile
readonly BACKUP_DIR=/var/mobile/_backup
readonly BACKUP_FILE=backup.zip
readonly DEBS_LIST=deblists.txt
readonly APT_DIR=/etc/apt/sources.list.d
readonly APT_SRC=cydia.list
readonly CYDIA_DIR=/var/lib/cydia
readonly CYDIA_SRC=metadata.plist
readonly ACTIVATOR_DIR=/var/mobile/Library/Caches
readonly ACTIVATOR_SRC=libactivator.plist
readonly LIBHIDE_DIR=/var/mobile/Library/LibHide
readonly LIBHIDE_SRC=hidden.plist
readonly ICONSUPPORT_DIR=/var/mobile/Library/SpringBoard
readonly ICONSUPPORT_SRC=IconSupportState*
readonly IFILE_DIR=$HOME_DIR/Library/iFile
readonly IFILE_SRC=Bookmarks.plist
readonly ETC_DIR=/etc
readonly LIGHTTPD_SRC=lighttpd2.conf
readonly SUDOERS_SRC=sudoers
readonly SCREEN_SRC=screenrc
readonly SCREEN_PSRC=.screenrc
readonly PROFILE_SRC=.profile
readonly BASHRC_SRC=.bash_rc
readonly BASHPROF_SRC=.bash_profile
readonly SMS_DIR=/var/mobile/Library/SMS
readonly SMS_ARCH=SMS.tgz
readonly CH_DIR=/var/wireless/Library/CallHistory
readonly CH_ARCH=CallHistory.tgz
readonly DCIM_DIR=/var/mobile/Media/DCIM
readonly DCIM_ARCH=DCIM.tgz
readonly PHOTO_DIR=/var/mobile/Media/PhotoData
readonly PHOTO_ARCH=PhotoData.tgz
readonly PHOTOS_DIR=/var/mobile/Media/Photos
readonly PHOTOS_ARCH=Photos.tgz
readonly VR_DIR=/var/mobile/Media/Recordings
readonly VR_ARCH=Recordings.tgz
mode=""
#### FUNCTIONS ####
function usage() {
cat <<__EOT__
Usage: [su; |sudo] $CMDNAME -[b|r] [-o <DIR>]
-b Backup
-r Restore
-o Currently NOT supported this feature
Note: You NEED super user's permission(s), use su or sudo command.
Important: This script DEPENDS on 'zip','unzip','apt7' and 'aptitude'.
Please install these packages through Cydia,
BEFORE USING this script.
__EOT__
return 1
}
function backup_files() {
if [ -d $BACKUP_DIR ]; then
rm -rf $BACKUP_DIR
fi
mkdir -p $BACKUP_DIR || { exit 1; }
if [ -f $HOME_DIR/$BACKUP_FILE ]; then
rm -rf $HOME_DIR/$BACKUP_FILE
fi
echo "Backuping shell environment..."
if [ -e $HOME_DIR/$PROFILE_SRC ]; then
cp -f $HOME_DIR/$PROFILE_SRC $BACKUP_DIR/ || { exit 1; }
fi
if [ -e $HOME_DIR/$BASHRC_SRC ]; then
cp -f $HOME_DIR/$BASHRC_SRC $BACKUP_DIR/ || { exit 1; }
fi
if [ -e $HOME_DIR/$BASHPROF_SRC ]; then
cp -f $HOME_DIR/$BASHPROF_SRC $BACKUP_DIR/ || { exit 1; }
fi
if [ -e $ETC_DIR/$LIGHTTPD_SRC ]; then
cp -f $ETC_DIR/$LIGHTTPD_SRC $BACKUP_DIR/ || { exit 1; }
fi
if [ -e $ETC_DIR/$SUDOERS_SRC ]; then
cp -f $ETC_DIR/$SUDOERS_SRC $BACKUP_DIR/ || { exit 1; }
fi
if [ -e $ETC_DIR/$SCREEN_SRC ]; then
cp -f $ETC_DIR/$SCREEN_SRC $BACKUP_DIR/ || { exit 1; }
fi
if [ -e $HOME_DIR/$SCREEN_PSRC ]; then
cp -f $HOME_DIR/$SCREEN_PSRC $BACKUP_DIR/ || { exit 1; }
fi
echo ""
echo "Backuping application environment..."
if [ -e $IFILE_DIR/$IFILE_SRC ]; then
cp -f $IFILE_DIR/$IFILE_SRC $BACKUP_DIR/ || { exit 1; }
fi
echo ""
echo "Backuping libactivator,libhide and libiconsupport's stuff..."
if [ -e $ACTIVATOR_DIR/$ACTIVATOR_SRC ]; then
cp -f $ACTIVATOR_DIR/$ACTIVATOR_SRC $BACKUP_DIR/ || { exit 1; }
fi
if [ -e $LIBHIDE_DIR/$LIBHIDE_SRC ]; then
cp -f $LIBHIDE_DIR/$LIBHIDE_SRC $BACKUP_DIR/ || { exit 1; }
fi
if [ -e $ICONSUPPORT_DIR/$ICONSUPPORT_SRC ]; then
cp -f $ICONSUPPORT_DIR/$ICONSUPPORT_SRC $BACKUP_DIR/ || { exit 1; }
fi
echo ""
echo "Backuping installed packages list..."
dpkg --get-selections >$BACKUP_DIR/$DEBS_LIST || { exit 1; }
echo ""
echo "Backuping apt/Cydia repositories list..."
cp -f $APT_DIR/$APT_SRC $BACKUP_DIR/
cp -f $CYDIA_DIR/$CYDIA_SRC $BACKUP_DIR/
echo ""
echo "Backuping SMS history..."
if [ -d $SMS_DIR ]; then
( cd $SMS_DIR; tar -czf $BACKUP_DIR/$SMS_ARCH . )
fi
echo ""
echo "Backuping Call history..."
if [ -d $CH_DIR ]; then
( cd $CH_DIR; tar -czf $BACKUP_DIR/$CH_ARCH . )
fi
echo ""
echo "Backuping Cameraroll..."
if [ -d $DCIM_DIR ]; then
( cd $DCIM_DIR; tar -czf $BACKUP_DIR/$DCIM_ARCH . )
fi
if [ -d $PHOTO_DIR ]; then
( cd $PHOTO_DIR; tar -czf $BACKUP_DIR/$PHOTO_ARCH . )
fi
if [ -d $PHOTOS_DIR ]; then
( cd $PHOTOS_DIR; tar -czf $BACKUP_DIR/$PHOTOS_ARCH . )
fi
echo ""
echo "Backuping Voice Records..."
if [ -d $VR_DIR ]; then
( cd $VR_DIR; tar -czf $BACKUP_DIR/$VR_ARCH . )
fi
echo ""
echo "Changing permittions..."
chown -R mobile:mobile $BACKUP_DIR
chmod 644 $BACKUP_DIR
echo ""
echo "Creating backup archive..."
zip -j $HOME_DIR/$BACKUP_FILE $BACKUP_DIR/* || { exit 1; }
echo ""
# echo ""
echo "Backup complete to $HOME_DIR/$BACKUP_FILE."
echo "NEXT, backup this file to your computer, and"
echo " put back file to same place AFTER restored and jailbreaked."
echo ""
}
function restore_files() {
if [ -d $BACKUP_DIR ]; then
rm -rf $BACKUP_DIR
fi
mkdir -p $BACKUP_DIR || { exit 1; }
echo "Unpacking backup archive..."
unzip $HOME_DIR/$BACKUP_FILE -d $BACKUP_DIR/ || { exit 1; }
echo ""
while [ 1 ]; do
read -p "Would you want to restore SMS history? [Y/N] " key
case $key in
[yY])
echo "Restoring SMS history..."
if [ -d $SMS_DIR ]; then
rm -rf $SMS_DIR
fi
mkdir -p $SMS_DIR || { exit 1; }
chmod 700 $SMS_DIR
chown mobile:mobile $SMS_DIR
( cd $SMS_DIR; tar -xzf $BACKUP_DIR/$SMS_ARCH )
break;;
[nN])
break;;
esac
done
echo ""
# echo ""
while [ 1 ]; do
read -p "Would you want to restore Call history? [Y/N] " key
case $key in
[yY])
echo "Restoring call history..."
if [ -d $CH_DIR ]; then
rm -rf $CH_DIR
fi
mkdir -p $CH_DIR || { exit 1; }
chmod 755 $CH_DIR
chown _wireless:_wireless $CH_DIR
( cd $CH_DIR; tar -xzf $BACKUP_DIR/$CH_ARCH )
break;;
[nN])
break;;
esac
done
echo ""
# echo ""
while [ 1 ]; do
read -p "Would you want to restore Cameraroll? [Y/N] " key
case $key in
[yY])
echo "Restoring Cameraroll..."
if [ -d $DCIM_DIR ]; then
rm -rf $DCIM_DIR
fi
mkdir -p $DCIM_DIR || { exit 1; }
chmod 750 $DCIM_DIR
chown mobile:mobile $DCIM_DIR
( cd $DCIM_DIR; tar -xzf $BACKUP_DIR/$DCIM_ARCH )
if [ -d $PHOTO_DIR ]; then
rm -rf $PHOTO_DIR
fi
mkdir -p $PHOTO_DIR || { exit 1; }
chmod 750 $PHOTO_DIR
chown mobile:mobile $PHOTO_DIR
( cd $PHOTO_DIR; tar -xzf $BACKUP_DIR/$PHOTO_ARCH )
if [ -d $PHOTOS_DIR ]; then
rm -rf $PHOTOS_DIR
fi
mkdir -p $PHOTOS_DIR || { exit 1; }
chmod 750 $PHOTOS_DIR
chown mobile:mobile $PHOTOS_DIR
( cd $PHOTOS_DIR; tar -xzf $BACKUP_DIR/$PHOTOS_ARCH )
break;;
[nN])
break;;
esac
done
echo ""
# echo ""
while [ 1 ]; do
read -p "Would you want to restore Voice records? [Y/N] " key
case $key in
[yY])
echo "Restoring Voice records..."
if [ -d $VR_DIR ]; then
rm -rf $VR_DIR
fi
mkdir -p $VR_DIR || { exit 1; }
chmod 755 $VR_DIR
chown mobile:mobile $VR_DIR
( cd $VR_DIR; tar -xzf $BACKUP_DIR/$VR_ARCH )
break;;
[nN])
break;;
esac
done
echo ""
# echo ""
while [ 1 ]; do
read -p "Would you want to restore apt/Cydia repositories? [Y/N] " key
case $key in
[yY])
echo "Restoring apt/Cydia repositories list..."
cp -f $BACKUP_DIR/$CYDIA_SRC $CYDIA_DIR/ || { exit 1;}
chmod 644 $CYDIA_DIR/$CYDIA_SRC
chown 0:0 $CYDIA_DIR/$CYDIA_SRC
cp -f $BACKUP_DIR/$APT_SRC $APT_DIR/ || { exit 1; }
chmod 644 $APT_DIR/$APT_SRC
chown 0:0 $APT_DIR/$APT_SRC
# echo ""
while [ 1 ]; do
read -p "Would you want to restore installed packages? [Y/N] " pkey
case $pkey in
[yY])
echo "Restoring (will be) installed package lists..."
dpkg --set-selections <$BACKUP_DIR/$DEBS_LIST || { exit 1; }
echo "Updating apt/Cydia repositories..."
aptitude update
echo "Restoring software packages..."
apt-get dselect-upgrade || { exit 1; }
break;;
[nN])
break;;
esac
done
echo ""
break;;
[nN])
break;;
esac
done
echo ""
# echo ""
while [ 1 ]; do
read -p "Would you want to restore some library's preferences? [Y/N] " key
case $key in
[yY])
echo "Restoring libiconsupport,libhide and libactivator's stuff..."
if [ -e $BACKUP_DIR/$ICONSUPPORT_SRC ]; then
cp -f $BACKUP_DIR/$ICONSUPPORT_SRC $ICONSUPPORT_DIR/ || { exit 1; }
chmod 644 $ICONSUPPORT_DIR/$ICONSUPPORT_SRC
chown mobile:mobile $ICONSUPPORT_DIR/$ICONSUPPORT_SRC
fi
if [ -e $BACKUP_DIR/$LIBHIDE_SRC ]; then
mkdir -p $LIBHIDE_DIR
cp -f $BACKUP_DIR/$LIBHIDE_SRC $LIBHIDE_DIR/ || { exit 1; }
chmod 644 $LIBHIDE_DIR/$LIBHIDE_SRC
chown -R mobile:mobile $LIBHIDE_DIR
fi
if [ -e $BACKUP_DIR/$ACTIVATOR_SRC ]; then
cp -f $BACKUP_DIR/$ACTIVATOR_SRC $ACTIVATOR_DIR/ || { exit 1; }
chmod 644 $ACTIVATOR_DIR/$ACTIVATOR_SRC
chown mobile:mobile $ACTIVATOR_DIR/$ACTIVATOR_SRC
fi
break;;
[nN])
break;;
esac
done
echo ""
# echo ""
while [ 1 ]; do
read -p "Would you want to restore some application's environment? [Y/N] " key
case $key in
[yY])
echo "Restoring application's environment..."
if [ -e $BACKUP_DIR/$IFILE_SRC ]; then
# mkdir -p $IFILE_DIR || {{ exit 1; }}
mkdir -p $IFILE_DIR
cp -f $BACKUP_DIR/$IFILE_SRC $IFILE_DIR/ || { exit 1; }
chmod 644 $IFILE_DIR/$IFILE_SRC
chown -R mobile:mobile $IFILE_DIR
fi
break;;
[nN])
break;;
esac
done
echo ""
# echo ""
while [ 1 ]; do
read -p "Would you want to restore shell's environment? [Y/N] " key
case $key in
[yY])
echo "Restoring shell environment..."
if [ -e $BACKUP_DIR/$SCREEN_PSRC ]; then
cp -f $BACKUP_DIR/$SCREEN_PSRC $HOME_DIR/ || { exit 1; }
chmod 600 $HOME_DIR/$SCREEN_PSRC
chown mobile:mobile $HOME_DIR/$SCREEN_PSRC
fi
if [ -e $BACKUP_DIR/$SCREEN_SRC ]; then
cp -f $BACKUP_DIR/$SCREEN_SRC $ETC_DIR/ || { exit 1; }
chmod 644 $ETC_DIR/$SCREEN_SRC
chown 0:0 $ETC_DIR/$SCREEN_SRC
fi
if [ -e $BACKUP_DIR/$SUDOERS_SRC ]; then
cp -f $BACKUP_DIR/$SUDOERS_SRC $ETC_DIR/ || { exit 1; }
chmod 440 $ETC_DIR/$SUDOERS_SRC
chown 0:0 $ETC_DIR/$SUDOERS_SRC
fi
if [ -e $BACKUP_DIR/$LIGHTTPD_SRC ]; then
cp -f $BACKUP_DIR/$LIGHTTPD_SRC $ETC_DIR/ || { exit 1; }
chmod 644 $ETC_DIR/$LIGHTTPD_SRC
chown 0:0 $ETC_DIR/$LIGHTTPD_SRC
fi
if [ -e $BACKUP_DIR/$BASHPROF_SRC ]; then
cp -f $BACKUP_DIR/$BASHPROF_SRC $HOME_DIR/ || { exit 1; }
chmod 600 $HOME_DIR/$BASHPROF_SRC
chown mobile:mobile $HOME_DIR/$BASHPROF_SRC
fi
if [ -e $BACKUP_DIR/$BASHRC_SRC ]; then
cp -f $BACKUP_DIR/$BASHRC_SRC $HOME_DIR/ || { exit 1; }
chmod 600 $HOME_DIR/$BASHRC_SRC
chown mobile:mobile $HOME_DIR/$BASHRC_SRC
fi
if [ -e $BACKUP_DIR/$PROFILE_SRC ]; then
cp -f $BACKUP_DIR/$PROFILE_SRC $HOME_DIR/ || { exit 1; }
chmod 600 $HOME_DIR/$PROFILE_SRC
chown mobile:mobile $HOME_DIR/$PROFILE_SRC
fi
break;;
[nN])
break;;
esac
done
echo ""
echo "Fixing user directory's permissions..."
chown -R mobile:mobile $HOME_DIR
echo ""
# echo ""
echo "Restore complete, please REBOOT your device."
echo ""
}
#### MAIN ROUTINE ####
while getopts brO: OPT
do
case $OPT in
"b" )
mode="b";;
"r" )
mode="r";;
"O" )
out_dir="$OPTARG";;
* )
usage
exit 1;;
esac
done
if [ "$mode" = "b" ]; then
backup_files
elif [ "$mode" = "r" ]; then
restore_files
else
echo "Invalid option: $OPT"
usage || { exit 1; }
fi
exit 0
@arawas
Copy link
Author

arawas commented Jul 23, 2011

インデントぐちゃぐちゃや……

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment