blob: 45a14e16bb413f1e3ebdc210112e9a9c606c50b8 [file] [log] [blame]
Andrew Dodd0c209012013-09-28 15:34:25 -04001#!/sbin/sh
2#
3# Backup and restore addon /system files
4#
5
6export C=/tmp/backupdir
7export S=/system
maxwen504d5142017-12-09 00:34:19 +01008export V=8.1
Andrew Dodd0c209012013-09-28 15:34:25 -04009
Marko Man2d218732017-09-12 02:24:39 +020010DEBUG=0
11
Andrew Dodd0c209012013-09-28 15:34:25 -040012# Preserve /system/addon.d in /tmp/addon.d
13preserve_addon_d() {
maxwen1c2e98d2017-09-15 17:13:48 +020014 rm -rf /tmp/addon.d/
Andrew Dodd0c209012013-09-28 15:34:25 -040015 mkdir -p /tmp/addon.d/
16 cp -a /system/addon.d/* /tmp/addon.d/
17 chmod 755 /tmp/addon.d/*.sh
18}
19
20# Restore /system/addon.d in /tmp/addon.d
21restore_addon_d() {
22 cp -a /tmp/addon.d/* /system/addon.d/
23 rm -rf /tmp/addon.d/
24}
25
maxwen1c2e98d2017-09-15 17:13:48 +020026# Restore only if backup has the expected major and minor version
Andrew Dodd0c209012013-09-28 15:34:25 -040027check_prereq() {
maxwen1c2e98d2017-09-15 17:13:48 +020028 if [ ! -f /tmp/build.prop ]; then
29 # this will block any backups made before 8 cause file was not copied before
30 echo "Not restoring files from incompatible version: $V"
31 exit 127
32 fi
33 if ( ! grep -q "^ro.build.version.release=$V.*" /tmp/build.prop ); then
34 echo "Not restoring files from incompatible version: $V"
35 exit 127
36 fi
Andrew Dodd0c209012013-09-28 15:34:25 -040037}
38
39check_blacklist() {
40 if [ -f /system/addon.d/blacklist ];then
maxwen1c2e98d2017-09-15 17:13:48 +020041 ## Discard any known bad backup scripts
42 cd /$1/addon.d/
43 for f in *sh; do
44 s=$(md5sum $f | awk {'print $1'})
45 grep -q $s /system/addon.d/blacklist && rm -f $f
46 done
Andrew Dodd0c209012013-09-28 15:34:25 -040047 fi
48}
49
50# Execute /system/addon.d/*.sh scripts with $1 parameter
51run_stage() {
maxwen1c2e98d2017-09-15 17:13:48 +020052 for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
53 if [ $DEBUG -eq 1 ]; then
54 echo run_stage $script $1
55 fi
56 $script $1
57 done
Andrew Dodd0c209012013-09-28 15:34:25 -040058}
59
60case "$1" in
61 backup)
maxwen1c2e98d2017-09-15 17:13:48 +020062 # make sure we dont start with any leftovers
63 rm -rf $C
Marko Man2d218732017-09-12 02:24:39 +020064 cp /system/bin/backuptool.functions /tmp
maxwen1c2e98d2017-09-15 17:13:48 +020065 cp /system/build.prop /tmp
Andrew Dodd0c209012013-09-28 15:34:25 -040066 mkdir -p $C
maxwen1c2e98d2017-09-15 17:13:48 +020067 #check_prereq
Andrew Dodd0c209012013-09-28 15:34:25 -040068 check_blacklist system
69 preserve_addon_d
70 run_stage pre-backup
71 run_stage backup
72 run_stage post-backup
73 ;;
74 restore)
Marko Man2d218732017-09-12 02:24:39 +020075 cp /system/bin/backuptool.functions /tmp
Andrew Dodd0c209012013-09-28 15:34:25 -040076 check_prereq
77 check_blacklist tmp
78 run_stage pre-restore
79 run_stage restore
80 run_stage post-restore
81 restore_addon_d
82 rm -rf $C
83 sync
84 ;;
85 *)
86 echo "Usage: $0 {backup|restore}"
87 exit 1
88esac
89
90exit 0