blob: 97ef414d860b8e20cc28fbb67b8072a5dfe02c59 [file] [log] [blame]
kmobse051cf32010-06-24 22:36:11 -05001#!/sbin/sh
2#
Warren Togamib1637c82012-03-03 22:37:42 -10003# Backup and restore addon /system files
kmobse051cf32010-06-24 22:36:11 -05004#
5
Warren Togamib1637c82012-03-03 22:37:42 -10006export C=/tmp/backupdir
Davide Garberie40c3182019-09-24 20:18:11 +02007export SYSDEV="$(readlink -nf "$2")"
8export SYSFS="$3"
Michael Bestas42020e22020-01-03 02:03:00 +02009export V=17.1
kmobse051cf32010-06-24 22:36:11 -050010
Tom Marshall65aff662014-12-12 11:56:04 -080011# Scripts in /system/addon.d expect to find backuptool.functions in /tmp
12cp -f /tmp/install/bin/backuptool.functions /tmp
13
Warren Togamib1637c82012-03-03 22:37:42 -100014# Preserve /system/addon.d in /tmp/addon.d
15preserve_addon_d() {
LuK133757490e62018-12-05 20:51:21 +010016 if [ -d $S/addon.d/ ]; then
Andreas Schneider9cfe9682015-09-03 11:04:58 +020017 mkdir -p /tmp/addon.d/
LuK133757490e62018-12-05 20:51:21 +010018 cp -a $S/addon.d/* /tmp/addon.d/
Andreas Schneider9cfe9682015-09-03 11:04:58 +020019 chmod 755 /tmp/addon.d/*.sh
20 fi
Warren Togamib1637c82012-03-03 22:37:42 -100021}
22
Andreas Schneider9cfe9682015-09-03 11:04:58 +020023# Restore /system/addon.d from /tmp/addon.d
Warren Togamib1637c82012-03-03 22:37:42 -100024restore_addon_d() {
Andreas Schneider9cfe9682015-09-03 11:04:58 +020025 if [ -d /tmp/addon.d/ ]; then
LuK133757490e62018-12-05 20:51:21 +010026 mkdir -p $S/addon.d/
27 cp -a /tmp/addon.d/* $S/addon.d/
Andreas Schneider9cfe9682015-09-03 11:04:58 +020028 rm -rf /tmp/addon.d/
29 fi
Warren Togamib1637c82012-03-03 22:37:42 -100030}
31
Chirayu Desai700fc8f2012-12-13 19:36:37 +053032# Proceed only if /system is the expected major and minor version
kmobse051cf32010-06-24 22:36:11 -050033check_prereq() {
Andreas Schneider9cfe9682015-09-03 11:04:58 +020034# If there is no build.prop file the partition is probably empty.
LuK133757490e62018-12-05 20:51:21 +010035if [ ! -r $S/build.prop ]; then
z3DD3rfa8a4422020-03-04 12:42:10 +030036 return 0
Andreas Schneider9cfe9682015-09-03 11:04:58 +020037fi
LuK133757490e62018-12-05 20:51:21 +010038if ! grep -q "^ro.lineage.version=$V.*" $S/build.prop; then
Adrian DC29fca642018-05-17 23:06:24 +020039 echo "Not backing up files from incompatible version: $V"
z3DD3rfa8a4422020-03-04 12:42:10 +030040 return 0
Adrian DC29fca642018-05-17 23:06:24 +020041fi
z3DD3rfa8a4422020-03-04 12:42:10 +030042return 1
Ricardo Cerqueira4f4c30b2013-08-19 04:00:05 +010043}
44
Warren Togamib1637c82012-03-03 22:37:42 -100045# Execute /system/addon.d/*.sh scripts with $1 parameter
46run_stage() {
Andreas Schneider9cfe9682015-09-03 11:04:58 +020047if [ -d /tmp/addon.d/ ]; then
48 for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
49 $script $1
50 done
51fi
kmobse051cf32010-06-24 22:36:11 -050052}
53
Davide Garberie40c3182019-09-24 20:18:11 +020054determine_system_mount() {
55 if grep -q -e"^$SYSDEV" /proc/mounts; then
56 umount $(grep -e"^$SYSDEV" /proc/mounts | cut -d" " -f2)
57 fi
58
59 if [ -d /mnt/system ]; then
60 SYSMOUNT="/mnt/system"
61 elif [ -d /system_root ]; then
62 SYSMOUNT="/system_root"
63 else
64 SYSMOUNT="/system"
65 fi
66
67 export S=$SYSMOUNT/system
68}
69
70mount_system() {
71 mount -t $SYSFS $SYSDEV $SYSMOUNT -o rw,discard
72}
73
74unmount_system() {
75 umount $SYSMOUNT
76}
77
78determine_system_mount
79
kmobse051cf32010-06-24 22:36:11 -050080case "$1" in
Warren Togamib1637c82012-03-03 22:37:42 -100081 backup)
Davide Garberie40c3182019-09-24 20:18:11 +020082 mount_system
Warren Togamib1637c82012-03-03 22:37:42 -100083 mkdir -p $C
z3DD3rfa8a4422020-03-04 12:42:10 +030084 if ! check_prereq; then
85 unmount_system
86 exit 127
87 end
Warren Togamib1637c82012-03-03 22:37:42 -100088 preserve_addon_d
89 run_stage pre-backup
90 run_stage backup
91 run_stage post-backup
Davide Garberie40c3182019-09-24 20:18:11 +020092 unmount_system
Warren Togamib1637c82012-03-03 22:37:42 -100093 ;;
94 restore)
Davide Garberie40c3182019-09-24 20:18:11 +020095 mount_system
z3DD3rfa8a4422020-03-04 12:42:10 +030096 if ! check_prereq; then
97 unmount_system
98 exit 127
99 end
Warren Togamib1637c82012-03-03 22:37:42 -1000100 run_stage pre-restore
101 run_stage restore
102 run_stage post-restore
103 restore_addon_d
Warren Togamib1637c82012-03-03 22:37:42 -1000104 rm -rf $C
105 sync
Davide Garberie40c3182019-09-24 20:18:11 +0200106 unmount_system
Warren Togamib1637c82012-03-03 22:37:42 -1000107 ;;
108 *)
109 echo "Usage: $0 {backup|restore}"
110 exit 1
kmobse051cf32010-06-24 22:36:11 -0500111esac
112
113exit 0