blob: 1d9dd4e08903334dfd35234a89281a10060bcf90 [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
Dan Pasanen8320eb12018-01-26 10:26:47 -060011export ADDOND_VERSION=1
12
Marko Man2d218732017-09-12 02:24:39 +020013DEBUG=0
14
Andrew Dodd0c209012013-09-28 15:34:25 -040015# Preserve /system/addon.d in /tmp/addon.d
16preserve_addon_d() {
maxwen1c2e98d2017-09-15 17:13:48 +020017 rm -rf /tmp/addon.d/
Andrew Dodd0c209012013-09-28 15:34:25 -040018 mkdir -p /tmp/addon.d/
LuK1337ae517382020-01-20 16:09:50 +000019 cp -a $S/addon.d/* /tmp/addon.d/
Dan Pasanen8320eb12018-01-26 10:26:47 -060020 # Discard any scripts that aren't at least our version level
Davide Garberi87b84972020-01-19 12:21:00 +010021 for f in /tmp/addon.d/*sh; do
Dan Pasanen8320eb12018-01-26 10:26:47 -060022 SCRIPT_VERSION=$(grep "^# ADDOND_VERSION=" $f | cut -d= -f2)
23 if [ -z "$SCRIPT_VERSION" ]; then
24 SCRIPT_VERSION=1
25 fi
26 if [ $SCRIPT_VERSION -lt $ADDOND_VERSION ]; then
27 rm $f
28 fi
29 done
Andrew Dodd0c209012013-09-28 15:34:25 -040030 chmod 755 /tmp/addon.d/*.sh
31}
32
33# Restore /system/addon.d in /tmp/addon.d
34restore_addon_d() {
LuK1337ae517382020-01-20 16:09:50 +000035 cp -a /tmp/addon.d/* $S/addon.d/
Andrew Dodd0c209012013-09-28 15:34:25 -040036 rm -rf /tmp/addon.d/
37}
38
maxwen1c2e98d2017-09-15 17:13:48 +020039# Restore only if backup has the expected major and minor version
Andrew Dodd0c209012013-09-28 15:34:25 -040040check_prereq() {
maxwen1c2e98d2017-09-15 17:13:48 +020041 if [ ! -f /tmp/build.prop ]; then
42 # this will block any backups made before 8 cause file was not copied before
43 echo "Not restoring files from incompatible version: $V"
44 exit 127
45 fi
46 if ( ! grep -q "^ro.build.version.release=$V.*" /tmp/build.prop ); then
47 echo "Not restoring files from incompatible version: $V"
48 exit 127
49 fi
Andrew Dodd0c209012013-09-28 15:34:25 -040050}
51
52check_blacklist() {
LuK1337ae517382020-01-20 16:09:50 +000053 if [ -f $S/addon.d/blacklist ];then
maxwen1c2e98d2017-09-15 17:13:48 +020054 ## Discard any known bad backup scripts
LuK1337ae517382020-01-20 16:09:50 +000055 cd $1/addon.d/
maxwen1c2e98d2017-09-15 17:13:48 +020056 for f in *sh; do
57 s=$(md5sum $f | awk {'print $1'})
LuK1337ae517382020-01-20 16:09:50 +000058 grep -q $s $S/addon.d/blacklist && rm -f $f
maxwen1c2e98d2017-09-15 17:13:48 +020059 done
Andrew Dodd0c209012013-09-28 15:34:25 -040060 fi
61}
62
63# Execute /system/addon.d/*.sh scripts with $1 parameter
64run_stage() {
maxwen1c2e98d2017-09-15 17:13:48 +020065 for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
66 if [ $DEBUG -eq 1 ]; then
67 echo run_stage $script $1
68 fi
69 $script $1
70 done
Andrew Dodd0c209012013-09-28 15:34:25 -040071}
72
Davide Garberi9717dfa2019-09-24 20:18:11 +020073determine_system_mount() {
74 if grep -q -e"^$SYSDEV" /proc/mounts; then
75 umount $(grep -e"^$SYSDEV" /proc/mounts | cut -d" " -f2)
76 fi
77
78 if [ -d /mnt/system ]; then
79 SYSMOUNT="/mnt/system"
80 elif [ -d /system_root ]; then
81 SYSMOUNT="/system_root"
82 else
83 SYSMOUNT="/system"
84 fi
85
86 export S=$SYSMOUNT/system
87}
88
89mount_system() {
90 mount -t $SYSFS $SYSDEV $SYSMOUNT -o rw,discard
91}
92
93unmount_system() {
94 umount $SYSMOUNT
95}
96
97determine_system_mount
98
Andrew Dodd0c209012013-09-28 15:34:25 -040099case "$1" in
100 backup)
maxwen1c2e98d2017-09-15 17:13:48 +0200101 # make sure we dont start with any leftovers
102 rm -rf $C
LuK1337ae517382020-01-20 16:09:50 +0000103 cp $S/bin/backuptool.functions /tmp
104 cp $S/build.prop /tmp
Davide Garberi9717dfa2019-09-24 20:18:11 +0200105 mount_system
Andrew Dodd0c209012013-09-28 15:34:25 -0400106 mkdir -p $C
maxwen1c2e98d2017-09-15 17:13:48 +0200107 #check_prereq
LuK1337ae517382020-01-20 16:09:50 +0000108 check_blacklist $S
Andrew Dodd0c209012013-09-28 15:34:25 -0400109 preserve_addon_d
110 run_stage pre-backup
111 run_stage backup
112 run_stage post-backup
Davide Garberi9717dfa2019-09-24 20:18:11 +0200113 unmount_system
Andrew Dodd0c209012013-09-28 15:34:25 -0400114 ;;
115 restore)
LuK1337ae517382020-01-20 16:09:50 +0000116 cp $S/bin/backuptool.functions /tmp
Davide Garberi9717dfa2019-09-24 20:18:11 +0200117 mount_system
Andrew Dodd0c209012013-09-28 15:34:25 -0400118 check_prereq
LuK1337ae517382020-01-20 16:09:50 +0000119 check_blacklist /tmp
Andrew Dodd0c209012013-09-28 15:34:25 -0400120 run_stage pre-restore
121 run_stage restore
122 run_stage post-restore
123 restore_addon_d
124 rm -rf $C
125 sync
Davide Garberi9717dfa2019-09-24 20:18:11 +0200126 unmount_system
Andrew Dodd0c209012013-09-28 15:34:25 -0400127 ;;
128 *)
129 echo "Usage: $0 {backup|restore}"
130 exit 1
131esac
132
133exit 0