blob: 410c410c1287d1c2d9b01b1d0642f532c89b915a [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
Davide Garberi9717dfa2019-09-24 20:18:11 +02007export SYSDEV="$(readlink -nf "$2")"
8export SYSFS="$3"
micky3877d554ae2023-07-20 16:21:18 +02009export V=13
Andrew Dodd0c209012013-09-28 15:34:25 -040010
Marko Man2d218732017-09-12 02:24:39 +020011DEBUG=0
12
Andrew Dodd0c209012013-09-28 15:34:25 -040013# Preserve /system/addon.d in /tmp/addon.d
14preserve_addon_d() {
maxwen1c2e98d2017-09-15 17:13:48 +020015 rm -rf /tmp/addon.d/
Andrew Dodd0c209012013-09-28 15:34:25 -040016 mkdir -p /tmp/addon.d/
LuK1337ae517382020-01-20 16:09:50 +000017 cp -a $S/addon.d/* /tmp/addon.d/
Andrew Dodd0c209012013-09-28 15:34:25 -040018 chmod 755 /tmp/addon.d/*.sh
19}
20
21# Restore /system/addon.d in /tmp/addon.d
22restore_addon_d() {
LuK1337ae517382020-01-20 16:09:50 +000023 cp -a /tmp/addon.d/* $S/addon.d/
Andrew Dodd0c209012013-09-28 15:34:25 -040024 rm -rf /tmp/addon.d/
25}
26
maxwen1c2e98d2017-09-15 17:13:48 +020027# Restore only if backup has the expected major and minor version
Andrew Dodd0c209012013-09-28 15:34:25 -040028check_prereq() {
maxwen1c2e98d2017-09-15 17:13:48 +020029 if [ ! -f /tmp/build.prop ]; then
30 # this will block any backups made before 8 cause file was not copied before
31 echo "Not restoring files from incompatible version: $V"
32 exit 127
33 fi
34 if ( ! grep -q "^ro.build.version.release=$V.*" /tmp/build.prop ); then
35 echo "Not restoring files from incompatible version: $V"
36 exit 127
37 fi
Andrew Dodd0c209012013-09-28 15:34:25 -040038}
39
40check_blacklist() {
LuK1337ae517382020-01-20 16:09:50 +000041 if [ -f $S/addon.d/blacklist ];then
maxwen1c2e98d2017-09-15 17:13:48 +020042 ## Discard any known bad backup scripts
Davide Garberie8c83a92020-01-19 19:28:55 +010043 for f in /$1/addon.d/*sh; do
maxwen1c2e98d2017-09-15 17:13:48 +020044 s=$(md5sum $f | awk {'print $1'})
LuK1337ae517382020-01-20 16:09:50 +000045 grep -q $s $S/addon.d/blacklist && rm -f $f
maxwen1c2e98d2017-09-15 17:13:48 +020046 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
Davide Garberi9717dfa2019-09-24 20:18:11 +020060determine_system_mount() {
61 if grep -q -e"^$SYSDEV" /proc/mounts; then
62 umount $(grep -e"^$SYSDEV" /proc/mounts | cut -d" " -f2)
63 fi
64
65 if [ -d /mnt/system ]; then
66 SYSMOUNT="/mnt/system"
67 elif [ -d /system_root ]; then
68 SYSMOUNT="/system_root"
69 else
70 SYSMOUNT="/system"
71 fi
72
73 export S=$SYSMOUNT/system
74}
75
76mount_system() {
77 mount -t $SYSFS $SYSDEV $SYSMOUNT -o rw,discard
78}
79
80unmount_system() {
81 umount $SYSMOUNT
82}
83
84determine_system_mount
85
Andrew Dodd0c209012013-09-28 15:34:25 -040086case "$1" in
87 backup)
maxwen1c2e98d2017-09-15 17:13:48 +020088 # make sure we dont start with any leftovers
89 rm -rf $C
LuK1337ae517382020-01-20 16:09:50 +000090 cp $S/bin/backuptool.functions /tmp
91 cp $S/build.prop /tmp
Davide Garberi9717dfa2019-09-24 20:18:11 +020092 mount_system
Andrew Dodd0c209012013-09-28 15:34:25 -040093 mkdir -p $C
maxwen1c2e98d2017-09-15 17:13:48 +020094 #check_prereq
LuK1337ae517382020-01-20 16:09:50 +000095 check_blacklist $S
Andrew Dodd0c209012013-09-28 15:34:25 -040096 preserve_addon_d
97 run_stage pre-backup
98 run_stage backup
99 run_stage post-backup
Davide Garberi9717dfa2019-09-24 20:18:11 +0200100 unmount_system
Andrew Dodd0c209012013-09-28 15:34:25 -0400101 ;;
102 restore)
LuK1337ae517382020-01-20 16:09:50 +0000103 cp $S/bin/backuptool.functions /tmp
Davide Garberi9717dfa2019-09-24 20:18:11 +0200104 mount_system
Andrew Dodd0c209012013-09-28 15:34:25 -0400105 check_prereq
LuK1337ae517382020-01-20 16:09:50 +0000106 check_blacklist /tmp
Andrew Dodd0c209012013-09-28 15:34:25 -0400107 run_stage pre-restore
108 run_stage restore
109 run_stage post-restore
110 restore_addon_d
111 rm -rf $C
112 sync
Davide Garberi9717dfa2019-09-24 20:18:11 +0200113 unmount_system
Andrew Dodd0c209012013-09-28 15:34:25 -0400114 ;;
115 *)
116 echo "Usage: $0 {backup|restore}"
117 exit 1
118esac
119
120exit 0