Remove awk dependency
[platform/core/system/initrd-recovery.git] / src / system-recovery / recovery-init.in
1 #!/bin/bash
2
3 SYSTEM_RECOVERY="/usr/bin/system-recovery"
4 FAKE_ROOT=/system
5
6 GREP="/usr/bin/grep"
7 MOUNT="/usr/bin/mount"
8 PARTX="/usr/sbin/partx"
9 BLKID="/usr/sbin/blkid"
10 REBOOT="/usr/lib/initrd-recovery/minireboot"
11 SYNC="/usr/bin/sync"
12 TOUCH="/usr/bin/touch"
13 UMOUNT="/usr/bin/umount"
14 TR="/usr/bin/tr"
15 SED="/usr/bin/sed"
16 CUT="/usr/bin/cut"
17
18 #------------------------------------------------
19 #       get partition id
20 #------------------------------------------------
21 get_partition_id() {
22     EMMC_DEVICE="/dev/mmcblk0"
23     RET_PARTX=$("$PARTX" -s ${EMMC_DEVICE})
24     TEST=$(echo "$RET_PARTX" | "$TR" -s ' ' | "$SED" -e '1d' -e 's/^ //' | "$CUT" -d ' ' -f 6)
25     if [ "z$TEST" == "z" ]; then
26         PART_ROOTFS=$("$BLKID" -L "rootfs" -o device)
27         PART_SYSTEM_DATA=$("$BLKID" -L "system-data" -o device)
28         PART_USER=$("$BLKID" -L "user" -o device)
29     else
30         PART_ROOTFS=${EMMC_DEVICE}p$(
31                         echo "$RET_PARTX" |
32                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
33                         "$GREP" "rootfs" | "$SED" 's/^ //' |
34                         "$CUT" -d ' ' -f 1)
35         PART_SYSTEM_DATA=${EMMC_DEVICE}p$(
36                         echo "$RET_PARTX" |
37                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
38                         "$GREP" "system-data" | "$SED" 's/^ //' |
39                         "$CUT" -d ' ' -f 1)
40         PART_USER=${EMMC_DEVICE}p$(
41                         echo "$RET_PARTX" |
42                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
43                         "$GREP" "user" | "$SED" 's/^ //' |
44                         "$CUT" -d ' ' -f 1)
45     fi
46 }
47
48 #------------------------------------------------
49 #       mount_partitions
50 #------------------------------------------------
51 mount_partitions() {
52     echo "mount partitions"
53     get_partition_id
54
55     "$MOUNT" -t ext4 ${PART_ROOTFS} ${FAKE_ROOT} -o ro
56     "$MOUNT" -t ext4 ${PART_SYSTEM_DATA} ${FAKE_ROOT}/opt
57     "$MOUNT" -t ext4 ${PART_USER} ${FAKE_ROOT}/opt/usr
58
59     "$MOUNT" -t proc none ${FAKE_ROOT}/proc
60     "$MOUNT" -t sysfs none ${FAKE_ROOT}/sys
61     "$MOUNT" -t smackfs smackfs ${FAKE_ROOT}/sys/fs/smackfs
62     "$MOUNT" -t devtmpfs devtmpfs ${FAKE_ROOT}/dev
63     "$MOUNT" -t devpts devpts ${FAKE_ROOT}/dev/pts
64     "$MOUNT" -t tmpfs tmpfs ${FAKE_ROOT}/tmp -o mode=1777,smackfsroot=*
65 }
66
67 #------------------------------------------------
68 #       umount_partitions
69 #------------------------------------------------
70 umount_partitions() {
71     echo "umount partitions"
72    "$SYNC"
73     get_partition_id
74
75     "$UMOUNT" ${FAKE_ROOT}/opt/usr
76     "$UMOUNT" ${FAKE_ROOT}/opt
77     "$UMOUNT" ${FAKE_ROOT}
78 }
79
80 #------------------------------------------------
81 #       do_reboot
82 #------------------------------------------------
83 do_reboot() {
84     echo "Reboot"
85     "$SYNC"
86     "$REBOOT"
87     while [ 1 ]
88     do
89         sleep 1
90         echo "."
91     done
92 }
93
94 #------------------------------------------------
95 #       system-recovery initrc
96 #------------------------------------------------
97 echo "Starting system recovery."
98 mount_partitions
99
100 # For debugging - It should be deleted on Release
101 /sbin/agetty -l /bin/bash -n --keep-baud 115200,38400,9600 ttyS1 linux &
102
103 if [ "z@RECOVERY_GUI@" == "zGUI" ]; then
104     "$SYSTEM_RECOVERY"
105 else
106     $TOUCH ${FAKE_ROOT}/opt/.factoryreset
107     if [ $? -ne 0 ]; then
108         echo "Error: failed to put factory reset file flag."
109     fi
110 fi
111 umount_partitions
112 do_reboot