blob: d925eb5d8c078a2d8fedd1a6e0045abdfc7f3690 [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
Wang Hane43d6992020-02-05 16:45:15 +080036 exit 127
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"
Wang Hane43d6992020-02-05 16:45:15 +080040 exit 127
Adrian DC29fca642018-05-17 23:06:24 +020041fi
Ricardo Cerqueira4f4c30b2013-08-19 04:00:05 +010042}
43
Warren Togamib1637c82012-03-03 22:37:42 -100044# Execute /system/addon.d/*.sh scripts with $1 parameter
45run_stage() {
Andreas Schneider9cfe9682015-09-03 11:04:58 +020046if [ -d /tmp/addon.d/ ]; then
47 for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
48 $script $1
49 done
50fi
kmobse051cf32010-06-24 22:36:11 -050051}
52
Davide Garberie40c3182019-09-24 20:18:11 +020053determine_system_mount() {
54 if grep -q -e"^$SYSDEV" /proc/mounts; then
55 umount $(grep -e"^$SYSDEV" /proc/mounts | cut -d" " -f2)
56 fi
57
58 if [ -d /mnt/system ]; then
59 SYSMOUNT="/mnt/system"
60 elif [ -d /system_root ]; then
61 SYSMOUNT="/system_root"
62 else
63 SYSMOUNT="/system"
64 fi
65
66 export S=$SYSMOUNT/system
67}
68
69mount_system() {
70 mount -t $SYSFS $SYSDEV $SYSMOUNT -o rw,discard
71}
72
73unmount_system() {
74 umount $SYSMOUNT
75}
76
77determine_system_mount
78
kmobse051cf32010-06-24 22:36:11 -050079case "$1" in
Warren Togamib1637c82012-03-03 22:37:42 -100080 backup)
Davide Garberie40c3182019-09-24 20:18:11 +020081 mount_system
Warren Togamib1637c82012-03-03 22:37:42 -100082 mkdir -p $C
Wang Hane43d6992020-02-05 16:45:15 +080083 check_prereq
Warren Togamib1637c82012-03-03 22:37:42 -100084 preserve_addon_d
85 run_stage pre-backup
86 run_stage backup
87 run_stage post-backup
Davide Garberie40c3182019-09-24 20:18:11 +020088 unmount_system
Warren Togamib1637c82012-03-03 22:37:42 -100089 ;;
90 restore)
Davide Garberie40c3182019-09-24 20:18:11 +020091 mount_system
Wang Hane43d6992020-02-05 16:45:15 +080092 check_prereq
Warren Togamib1637c82012-03-03 22:37:42 -100093 run_stage pre-restore
94 run_stage restore
95 run_stage post-restore
96 restore_addon_d
Warren Togamib1637c82012-03-03 22:37:42 -100097 rm -rf $C
98 sync
Davide Garberie40c3182019-09-24 20:18:11 +020099 unmount_system
Warren Togamib1637c82012-03-03 22:37:42 -1000100 ;;
101 *)
102 echo "Usage: $0 {backup|restore}"
103 exit 1
kmobse051cf32010-06-24 22:36:11 -0500104esac
105
106exit 0