blob: 97277ec2a0a3bc9812393aa76c7dcdafda39fef9 [file] [log] [blame]
Meninblack00776bd9aa2016-04-03 07:14:30 -04001#!/sbin/sh
2#
3# Backup and restore addon /system files
4#
5
6export C=/tmp/backupdir
7export S=/system
Jackeagle2e87a9a2017-10-01 05:24:50 -04008export V=8.0
Meninblack00776bd9aa2016-04-03 07:14:30 -04009
10# Scripts in /system/addon.d expect to find backuptool.functions in /tmp
11cp -f /tmp/install/bin/backuptool.functions /tmp
12
13# Preserve /system/addon.d in /tmp/addon.d
14preserve_addon_d() {
15 if [ -d /system/addon.d/ ]; then
16 mkdir -p /tmp/addon.d/
17 cp -a /system/addon.d/* /tmp/addon.d/
18 chmod 755 /tmp/addon.d/*.sh
19 fi
20}
21
22# Restore /system/addon.d from /tmp/addon.d
23restore_addon_d() {
24 if [ -d /tmp/addon.d/ ]; then
25 cp -a /tmp/addon.d/* /system/addon.d/
26 rm -rf /tmp/addon.d/
27 fi
28}
29
30# Proceed only if /system is the expected major and minor version
31check_prereq() {
32# If there is no build.prop file the partition is probably empty.
33if [ ! -r /system/build.prop ]; then
34 return 0
35fi
36if ( ! grep -q "^ro.build.version.release=$V.*" /system/build.prop ); then
37 echo "Not backing up files from incompatible version: $V"
38 return 0
39fi
40return 1
41}
42
43check_blacklist() {
44 if [ -f /system/addon.d/blacklist ];then
45 ## Discard any known bad backup scripts
46 cd /$1/addon.d/
47 for f in *sh; do
48 s=$(md5sum $f | cut -c-32)
49 grep -q $s /system/addon.d/blacklist && rm -f $f
50 done
51 fi
52}
53
54check_whitelist() {
55 found=0
56 if [ -f /system/addon.d/whitelist ];then
57 ## forcefully keep any version-independent stuff
58 cd /$1/addon.d/
59 for f in *sh; do
60 s=$(md5sum $f | cut -c-32)
61 grep -q $s /system/addon.d/whitelist
62 if [ $? -eq 0 ]; then
63 found=1
64 else
65 rm -f $f
66 fi
67 done
68 fi
69 return $found
70}
71
72# Execute /system/addon.d/*.sh scripts with $1 parameter
73run_stage() {
74if [ -d /tmp/addon.d/ ]; then
75 for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
76 $script $1
77 done
78fi
79}
80
81case "$1" in
82 backup)
83 mkdir -p $C
84 if check_prereq; then
85 if check_whitelist system; then
86 exit 127
87 fi
88 fi
89 check_blacklist system
90 preserve_addon_d
91 run_stage pre-backup
92 run_stage backup
93 run_stage post-backup
94 ;;
95 restore)
96 if check_prereq; then
97 if check_whitelist tmp; then
98 exit 127
99 fi
100 fi
101 check_blacklist tmp
102 run_stage pre-restore
103 run_stage restore
104 run_stage post-restore
105 restore_addon_d
106 rm -rf $C
107 sync
108 ;;
109 *)
110 echo "Usage: $0 {backup|restore}"
111 exit 1
112esac
113
114exit 0