Run systemd directly
[platform/core/system/initrd-fota.git] / scripts / fus_rw-init.sh
1 #!/bin/bash
2 PATH=/bin:/usr/bin:/sbin:/usr/sbin
3
4 WITH_USR_PART=
5
6 FAKE_ROOT=/run/upgrade-sysroot
7
8 SYNC="/bin/sync"
9 REBOOT="/sbin/reboot"
10
11 INT_LOG_DIR=${FAKE_ROOT}/opt/data/update
12 INT_LOG_FILE=${INT_LOG_DIR}/fota_internal.log
13
14 CAT="/bin/cat"
15 MOUNT="/bin/mount"
16 GREP="/bin/grep"
17 BLKID="/usr/sbin/blkid"
18
19 #------------------------------------------------
20 #       get partition id
21 #------------------------------------------------
22 get_partition_id() {
23     P_SLOT=$([[ $(</proc/cmdline) =~ partition_ab=([ab]) ]]; echo ${BASH_REMATCH[1]})
24     P_SUFFIX=""
25
26     if [ "${P_SLOT}" != "" ]; then
27         P_SUFFIX="_${P_SLOT}"
28         echo "Using A/B slot: ${P_SLOT}"
29     fi
30
31     PART_ROOTFS=`/sbin/blkid -t PARTLABEL=rootfs${P_SUFFIX} -o device`
32     if [ x$PART_ROOTFS = "x" ]
33     then
34         PART_ROOTFS=`/sbin/blkid -L rootfs`
35     fi
36
37     PART_SYSTEM_DATA=`/sbin/blkid -t PARTLABEL=system-data -o device`
38     if [ x$PART_SYSTEM_DATA = "x" ]
39     then
40         PART_SYSTEM_DATA=`/sbin/blkid -L system-data`
41     fi
42
43     PART_RAMDISK=`/sbin/blkid -t PARTLABEL=ramdisk${P_SUFFIX} -o device`
44     if [ x$PART_RAMDISK = "x" ]
45     then
46         PART_RAMDISK=`/sbin/blkid -L ramdisk`
47     fi
48
49     PART_HAL=`/sbin/blkid -t PARTLABEL=hal${P_SUFFIX} -o device`
50     if [ x$PART_HAL = "x" ]
51     then
52         PART_HAL=`/sbin/blkid -L hal`
53     fi
54
55     PART_USER=$("$BLKID" --match-token PARTLABEL=user -o device || "$BLKID" --match-token LABEL=user -o device)
56 }
57
58 #------------------------------------------------
59 #       mount_rootfs
60 #------------------------------------------------
61 mount_rootfs()
62 {
63         /usr/bin/verityctl create rootfs "${PART_ROOTFS}" "${FAKE_ROOT}"
64         case $? in
65             0)
66                 echo "verifyboot: disabled"
67                 # do nothing
68                 ;;
69             1)
70                 echo "verityboot: enabled";
71                 return
72                 ;;
73             2)
74                 echo "verifyboot: enabled but corrupted"
75                 # should deal with the error like reboot.
76                 ;;
77             3)
78                 echo "verifyboot: disabling"
79                 ;;
80         esac
81         "$MOUNT" -o ro "${PART_ROOTFS}" "${FAKE_ROOT}"
82 }
83
84 #------------------------------------------------
85 #       mount_partitions
86 #------------------------------------------------
87 mount_partitions() {
88     get_partition_id
89
90     mount_rootfs
91     "$MOUNT" -t proc none ${FAKE_ROOT}/proc
92     "$MOUNT" -t sysfs none ${FAKE_ROOT}/sys
93     "$MOUNT" -t devtmpfs devtmpfs ${FAKE_ROOT}/dev
94     "$MOUNT" -t devpts devpts ${FAKE_ROOT}/dev/pts
95     "$MOUNT" -t tmpfs tmpfs ${FAKE_ROOT}/tmp
96 }
97
98 #------------------------------------------------
99 #       do_reboot
100 #------------------------------------------------
101 do_reboot() {
102         echo "Reboot"
103         "$SYNC"
104         "$REBOOT"
105         while [ 1 ]
106         do
107                 sleep 1
108                 echo "."
109         done
110 }
111
112 #------------------------------------------------
113 #       do_rw_update
114 #------------------------------------------------
115 do_rw_update() {
116         echo "Change into rw update mode" >> ${INT_LOG_FILE}
117
118         /sbin/progress_restart RW &
119         # Go to system-update.target
120         if [ $$ = 1 ]; then
121                 cd ${FAKE_ROOT}
122                 exec /bin/chroot . /usr/lib/systemd/systemd --unit=system-update.target $@
123         fi
124         do_reboot
125 }
126
127 #------------------------------------------------
128 #       Main Routine Start
129 #------------------------------------------------
130 mount_partitions
131
132 echo "rw update mode start ..." >> ${INT_LOG_FILE}
133 "$SYNC"
134
135 do_rw_update
136