Remove awk dependency
[platform/core/system/initrd-recovery.git] / src / initrd-recovery / init
1 #!/bin/bash
2
3 FAKE_ROOT=/system
4 FAKE_ROOT_RO=/system-ro
5
6 STATUS_DIR=${FAKE_ROOT}/opt/data/recovery
7 STATUS_FILE=${STATUS_DIR}/RW.STATUS
8 DELTA_PATH_FILE=${STATUS_DIR}/DELTA.PATH
9
10 CAT="/bin/cat"
11 SYNC="/bin/sync"
12 MKDIR="/bin/mkdir"
13 MOUNT="/bin/mount"
14 UMOUNT="/bin/umount"
15 GREP="/bin/grep"
16 REBOOT="/sbin/reboot"
17 CUT="/usr/bin/cut"
18 TR="/usr/bin/tr"
19 PARTX="/usr/sbin/partx"
20 BLKID="/usr/sbin/blkid"
21 SED="/usr/bin/sed"
22
23 #------------------------------------------------
24 #       get partition id
25 #------------------------------------------------
26 get_partition_id() {
27     EMMC_DEVICE="/dev/mmcblk0"
28     RET_PARTX=$("$PARTX" -s ${EMMC_DEVICE})
29     TEST=$(echo "$RET_PARTX" | "$TR" -s ' ' | "$SED" -e '1d' -e 's/^ //' | "$CUT" -d ' ' -f 6)
30     if [ "z$TEST" == "z" ]; then
31         PART_ROOTFS=$("$BLKID" -L "rootfs" -o device)
32         PART_SYSTEM_DATA=$("$BLKID" -L "system-data" -o device)
33         PART_USER=$("$BLKID" -L "user" -o device)
34     else
35         PART_ROOTFS=${EMMC_DEVICE}p$(
36                         echo "$RET_PARTX" |
37                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
38                         "$GREP" "rootfs" | "$SED" 's/^ //' |
39                         "$CUT" -d ' ' -f 1)
40         PART_SYSTEM_DATA=${EMMC_DEVICE}p$(
41                         echo "$RET_PARTX" |
42                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
43                         "$GREP" "system-data" | "$SED" 's/^ //' |
44                         "$CUT" -d ' ' -f 1)
45         PART_USER=${EMMC_DEVICE}p$(
46                         echo "$RET_PARTX" |
47                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
48                         "$GREP" "user" | "$SED" 's/^ //' |
49                         "$CUT" -d ' ' -f 1)
50     fi
51 }
52
53 #------------------------------------------------
54 #       mount_blk_partitions
55 #------------------------------------------------
56 mount_blk_partitions() {
57     get_partition_id
58
59     echo "mount block device partitions"
60     "$MOUNT" -t ext4 ${PART_ROOTFS} ${FAKE_ROOT}
61     "$MOUNT" -t ext4 ${PART_SYSTEM_DATA} ${FAKE_ROOT}/opt
62     "$MOUNT" -t ext4 ${PART_USER} ${FAKE_ROOT}/opt/usr
63 }
64
65 #------------------------------------------------
66 #       mount_partitions
67 #------------------------------------------------
68 mount_partitions() {
69     "$MOUNT" -t proc none /proc
70     "$MOUNT" -t sysfs none /sys
71     "$MOUNT" -t smackfs smackfs /smack
72     "$MOUNT" -t tmpfs tmpfs /run -o rw,nosuid,nodev,mode=755
73     "$MOUNT" -t tmpfs tmpfs /tmp -o mode=1777,smackfsroot=*
74
75     "$MKDIR" /dev/pts
76     "$MOUNT" -t devpts devpts /dev/pts
77 }
78
79 #------------------------------------------------
80 #       do_reboot
81 #------------------------------------------------
82 do_reboot() {
83     echo "Reboot"
84     "$SYNC"
85     "$REBOOT"
86     while [ 1 ]
87     do
88         sleep 1
89         echo "."
90     done
91 }
92
93 #------------------------------------------------
94 #       Main Routine Start
95 #------------------------------------------------
96 echo "You entered into /sbin/init on initrd"
97
98 mount_partitions
99
100 "$CAT" /proc/cmdline
101
102 cd /
103
104 BOOT_MODE=$("$CAT" /proc/cmdline | "$TR" ' ' \\n | "$GREP" bootmode | "$CUT" -d= -f2)
105
106 if [ "z$BOOT_MODE" == "z" ]; then
107     echo "BOOT_MODE was NOT defined!!"
108     echo "Do reboot!!"
109     do_reboot
110 fi
111 echo "BOOTMODE is ${BOOT_MODE}"
112 exec /sbin/${BOOT_MODE}-init