summaryrefslogtreecommitdiff
path: root/scripts/recovery-init.in
blob: 280c96856312337266df7f1e517d3cca8a14d1e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin
SYSTEM_RECOVERY="@SYSTEM_RECOVERY_LIBEXEC_DIR@/system-recovery"
SYSTEM_RECOVERY_GUI="/usr/bin/system-recovery_gui"

MOUNT="/usr/bin/mount"
BLKID="/usr/sbin/blkid"
REBOOT="@INITRD_RECOVERY_LIBEXEC_DIR@/minireboot"
SYNC="/usr/bin/sync"
UMOUNT="/usr/bin/umount"
CUT="/usr/bin/cut"
LS="/usr/bin/ls"
MKDIR="/usr/bin/mkdir"
RMDIR="/usr/bin/rmdir"
TR="/usr/bin/tr"

#------------------------------------------------
#       mount_usb_partitions
#------------------------------------------------
USB_MOUNTPOINT_PREFIX=@USB_MOUNTPOINT_ROOT@/@USB_MOUNTPOINT_PREFIX@
mount_usb_partitions() {
    echo "mount USB partitions"
    DEVICE_TYPE_LIST=(
        ext4
        vfat
    )

    LAST_MOUNTED_DEVICE=""
    for DEVICE_TYPE in ${DEVICE_TYPE_LIST[@]}
    do
        DEVICES=""
        for ((i=0; i<10; i++))
        do
            DEVICES=$("$BLKID" /dev/sd* -t TYPE="${DEVICE_TYPE}" -o device)
            if [ ! -z "${DEVICES}" ]
            then
                for DEVICE in ${DEVICES}
                do
                    USB_MOUNTPOINT_INDEX=$(echo ${DEVICE} | "$CUT" -b 8- | "$TR" '[:lower:]' '[:upper:]')
                    USB_MOUNTPOINT=${USB_MOUNTPOINT_PREFIX}${USB_MOUNTPOINT_INDEX}
                    "$MKDIR" -p ${USB_MOUNTPOINT}
                    "$MOUNT" -t ${DEVICE_TYPE} ${DEVICE} ${USB_MOUNTPOINT}

                    LAST_MOUNTED_DEVICE=${DEVICE}
                done
                break
            fi

            sleep 1
        done
    done

    if [ -z "${LAST_MOUNTED_DEVICE}" ]
    then
        echo "WARNING : USB not mounted"
    fi
}

#------------------------------------------------
#       umount_usb_partitions
#------------------------------------------------
umount_usb_partitions() {
    echo "umount USB partitions"
    USB_MOUNTPOINTS=$("$LS" -d ${USB_MOUNTPOINT_PREFIX}*)
    for USB_MOUNTPOINT in ${USB_MOUNTPOINTS}
    do
        "$UMOUNT" ${USB_MOUNTPOINT}
        "$RMDIR" ${USB_MOUNTPOINT}
    done
}

#------------------------------------------------
#       do_reboot
#------------------------------------------------
do_reboot() {
    echo "Reboot"
    "$SYNC"
    "$REBOOT"
    while [ 1 ]
    do
        sleep 1
        echo "."
    done
}

#------------------------------------------------
#       system-recovery initrc
#------------------------------------------------
echo "Starting system recovery."
mount_usb_partitions

# For debugging - It should be deleted on Release
/sbin/agetty -l /bin/sh -n --keep-baud 115200,38400,9600 ttyS1 linux &

[ -x "${SYSTEM_RECOVERY_GUI}" ] && "${SYSTEM_RECOVERY_GUI}" &
[ -x "${SYSTEM_RECOVERY}" ] && "${SYSTEM_RECOVERY}"

umount_usb_partitions
do_reboot