Mount USB storage
[platform/core/system/system-recovery.git] / src / system-recovery / recovery-init.in
1 #!/bin/sh
2
3 SYSTEM_RECOVERY_GUI="@SYSTEM_RECOVERY_LIBEXEC_DIR@/system-recovery.gui"
4 SYSTEM_RECOVERY_NON_GUI="@SYSTEM_RECOVERY_LIBEXEC_DIR@/system-recovery.non_gui"
5 FAKE_ROOT=/system
6
7 MOUNT="/usr/bin/mount"
8 BLKID="/usr/sbin/blkid"
9 REBOOT="@INITRD_RECOVERY_LIBEXEC_DIR@/minireboot"
10 SYNC="/usr/bin/sync"
11 UMOUNT="/usr/bin/umount"
12 CUT="/usr/bin/cut"
13 LS="/usr/bin/ls"
14 MKDIR="/usr/bin/mkdir"
15 RMDIR="/usr/bin/rmdir"
16 TR="/usr/bin/tr"
17
18 #------------------------------------------------
19 #       get partition id
20 #------------------------------------------------
21 get_partition_id() {
22     PART_ROOTFS=$("$BLKID" --match-token PARTLABEL=ROOTFS -o device || "$BLKID" --match-token LABEL=rootfs -o device)
23     PART_SYSTEM_DATA=$("$BLKID" --match-token PARTLABEL=SYSTEM-DATA -o device || "$BLKID" --match-token LABEL=system-data -o device)
24     PART_USER=$("$BLKID" --match-token PARTLABEL=USER -o device || "$BLKID" --match-token LABEL=user -o device)
25 }
26
27 #------------------------------------------------
28 #       mount_usb_partitions
29 #------------------------------------------------
30 USB_MOUNTPOINT_PREFIX=${FAKE_ROOT}/opt/media/USBDrive
31 mount_usb_partitions() {
32     echo "mount USB partitions"
33     DEVICE_TYPE_LIST=(
34         ext4
35         vfat
36     )
37
38     for DEVICE_TYPE in ${DEVICE_TYPE_LIST[@]}
39     do
40         DEVICES=$("$BLKID" /dev/sd?? -t TYPE="${DEVICE_TYPE}" -o device)
41         for DEVICE in ${DEVICES}
42         do
43             USB_MOUNTPOINT_INDEX=$(echo ${DEVICE} | "$CUT" -b 8- | "$TR" '[:lower:]' '[:upper:]')
44             USB_MOUNTPOINT=${USB_MOUNTPOINT_PREFIX}${USB_MOUNTPOINT_INDEX}
45             "$MKDIR" ${USB_MOUNTPOINT}
46             "$MOUNT" -t ${DEVICE_TYPE} ${DEVICE} ${USB_MOUNTPOINT}
47         done
48     done
49 }
50
51 #------------------------------------------------
52 #       mount_partitions
53 #------------------------------------------------
54 mount_partitions() {
55     echo "mount partitions"
56     get_partition_id
57
58     "$MOUNT" -t ext4 ${PART_ROOTFS} ${FAKE_ROOT} -o ro
59     "$MOUNT" -t ext4 ${PART_SYSTEM_DATA} ${FAKE_ROOT}/opt
60     "$MOUNT" -t ext4 ${PART_USER} ${FAKE_ROOT}/opt/usr
61
62     "$MOUNT" -t proc none ${FAKE_ROOT}/proc
63     "$MOUNT" -t sysfs none ${FAKE_ROOT}/sys
64     "$MOUNT" -t smackfs smackfs ${FAKE_ROOT}/sys/fs/smackfs
65     "$MOUNT" -t devtmpfs devtmpfs ${FAKE_ROOT}/dev
66     "$MOUNT" -t devpts devpts ${FAKE_ROOT}/dev/pts
67     "$MOUNT" -t tmpfs tmpfs ${FAKE_ROOT}/tmp -o mode=1777,smackfsroot=*
68
69     mount_usb_partitions
70 }
71
72 #------------------------------------------------
73 #       umount_usb_partitions
74 #------------------------------------------------
75 umount_usb_partitions() {
76     echo "umount USB partitions"
77     USB_MOUNTPOINTS=$("$LS" -d ${USB_MOUNTPOINT_PREFIX}*)
78     for USB_MOUNTPOINT in ${USB_MOUNTPOINTS}
79     do
80         "$UMOUNT" ${USB_MOUNTPOINT}
81         "$RMDIR" ${USB_MOUNTPOINT}
82     done
83 }
84
85 #------------------------------------------------
86 #       umount_partitions
87 #------------------------------------------------
88 umount_partitions() {
89     echo "umount partitions"
90    "$SYNC"
91
92     umount_usb_partitions
93
94     "$UMOUNT" ${FAKE_ROOT}/opt/usr
95     "$UMOUNT" ${FAKE_ROOT}/opt
96     "$UMOUNT" ${FAKE_ROOT}
97 }
98
99 #------------------------------------------------
100 #       do_reboot
101 #------------------------------------------------
102 do_reboot() {
103     echo "Reboot"
104     "$SYNC"
105     "$REBOOT"
106     while [ 1 ]
107     do
108         sleep 1
109         echo "."
110     done
111 }
112
113 #------------------------------------------------
114 #       system-recovery initrc
115 #------------------------------------------------
116 echo "Starting system recovery."
117 mount_partitions
118
119 # For debugging - It should be deleted on Release
120 /sbin/agetty -l /bin/sh -n --keep-baud 115200,38400,9600 ttyS1 linux &
121
122 [ -x "${SYSTEM_RECOVERY_GUI}" ] && "${SYSTEM_RECOVERY_GUI}" || "${SYSTEM_RECOVERY_NON_GUI}"
123
124 umount_partitions
125 do_reboot