blob: 9853eed72082390d65cba06b7a78219bad2f4695 [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
Andrew Dodd0c209012013-09-28 15:34:25 -040040# Execute /system/addon.d/*.sh scripts with $1 parameter
41run_stage() {
maxwen1c2e98d2017-09-15 17:13:48 +020042 for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
43 if [ $DEBUG -eq 1 ]; then
44 echo run_stage $script $1
45 fi
46 $script $1
47 done
Andrew Dodd0c209012013-09-28 15:34:25 -040048}
49
Davide Garberi9717dfa2019-09-24 20:18:11 +020050determine_system_mount() {
51 if grep -q -e"^$SYSDEV" /proc/mounts; then
52 umount $(grep -e"^$SYSDEV" /proc/mounts | cut -d" " -f2)
53 fi
54
55 if [ -d /mnt/system ]; then
56 SYSMOUNT="/mnt/system"
57 elif [ -d /system_root ]; then
58 SYSMOUNT="/system_root"
59 else
60 SYSMOUNT="/system"
61 fi
62
63 export S=$SYSMOUNT/system
64}
65
66mount_system() {
67 mount -t $SYSFS $SYSDEV $SYSMOUNT -o rw,discard
68}
69
70unmount_system() {
71 umount $SYSMOUNT
72}
73
74determine_system_mount
75
Andrew Dodd0c209012013-09-28 15:34:25 -040076case "$1" in
77 backup)
maxwen1c2e98d2017-09-15 17:13:48 +020078 # make sure we dont start with any leftovers
79 rm -rf $C
LuK1337ae517382020-01-20 16:09:50 +000080 cp $S/bin/backuptool.functions /tmp
81 cp $S/build.prop /tmp
Davide Garberi9717dfa2019-09-24 20:18:11 +020082 mount_system
Andrew Dodd0c209012013-09-28 15:34:25 -040083 mkdir -p $C
maxwen1c2e98d2017-09-15 17:13:48 +020084 #check_prereq
Andrew Dodd0c209012013-09-28 15:34:25 -040085 preserve_addon_d
86 run_stage pre-backup
87 run_stage backup
88 run_stage post-backup
Davide Garberi9717dfa2019-09-24 20:18:11 +020089 unmount_system
Andrew Dodd0c209012013-09-28 15:34:25 -040090 ;;
91 restore)
LuK1337ae517382020-01-20 16:09:50 +000092 cp $S/bin/backuptool.functions /tmp
Davide Garberi9717dfa2019-09-24 20:18:11 +020093 mount_system
Andrew Dodd0c209012013-09-28 15:34:25 -040094 check_prereq
Andrew Dodd0c209012013-09-28 15:34:25 -040095 run_stage pre-restore
96 run_stage restore
97 run_stage post-restore
98 restore_addon_d
99 rm -rf $C
100 sync
Davide Garberi9717dfa2019-09-24 20:18:11 +0200101 unmount_system
Andrew Dodd0c209012013-09-28 15:34:25 -0400102 ;;
103 *)
104 echo "Usage: $0 {backup|restore}"
105 exit 1
106esac
107
108exit 0