Patch for GUI in RO update
[platform/core/system/initrd-fota.git] / scripts / fota-init.sh
1 #!/bin/bash
2
3 MODULE_MOUNT_FLAG=@MODULE_MOUNT_FLAG@
4 WITH_USR_PART=
5
6
7 FAKE_ROOT=/system
8
9 UPI_NO_DELTA_ERROR=fdfa
10 UPI_NO_UA_ERROR=fdfb
11
12 STATUS_DIR=${FAKE_ROOT}/opt/data/recovery
13 STATUS_FILE=${STATUS_DIR}/RW.STATUS
14 DELTA_PATH_FILE=${STATUS_DIR}/DELTA.PATH
15 INT_LOG_DIR=${STATUS_DIR}
16 INT_LOG_FILE=${INT_LOG_DIR}/fota_internal.log
17
18 FOTA_LOG_DIR=/opt/data/fota
19 FOTA_RESULT_DIR=${FOTA_LOG_DIR}
20 FOTA_TEMP_DIR=${FOTA_LOG_DIR}
21
22 PART_TBL_FILE="part_tbl.txt"
23 PART_TBL_PATH=${FOTA_TEMP_DIR}/${PART_TBL_FILE}
24
25 CAT="/bin/cat"
26 SYNC="/bin/sync"
27 MKDIR="/bin/mkdir"
28 REBOOT="/sbin/reboot"
29 MOUNT="/bin/mount"
30 UMOUNT="/bin/umount"
31 GREP="/bin/grep"
32 CUT="/usr/bin/cut"
33 TR="/usr/bin/tr"
34 PARTX="/usr/sbin/partx"
35 BLKID="/usr/sbin/blkid"
36 SORT="/usr/bin/sort"
37 SED="/usr/bin/sed"
38 WC="/usr/bin/wc"
39
40 FOTA_GUI="/usr/bin/fota_gui"
41 FOTA_GUI_ENABLE=
42
43 SYSTEM_DATA_MNT=opt
44 USER_MNT=opt/usr
45
46 #------------------------------------------------
47 #       get partition id
48 #------------------------------------------------
49 get_partition_id() {
50         EMMC_DEVICE="/dev/mmcblk0"
51         RET_PARTX=$("$PARTX" -s ${EMMC_DEVICE})
52         TEST=$(echo "$RET_PARTX" | "$TR" -s ' ' | "$SED" -e '1d' -e 's/^ //' | "$CUT" -d ' ' -f 6)
53         if [ "z$TEST" == "z" ]; then
54                 PART_ROOTFS=$("$BLKID" -L "rootfs" -o device)
55                 PART_SYSTEM_DATA=$("$BLKID" -L "system-data" -o device)
56                 PART_USER=$("$BLKID" -L "user" -o device)
57         else
58                 PART_ROOTFS=${EMMC_DEVICE}p$(
59                         echo "$RET_PARTX" |
60                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
61                         "$GREP" "rootfs" | "$SED" 's/^ //' |
62                         "$CUT" -d ' ' -f 1)
63                 PART_SYSTEM_DATA=${EMMC_DEVICE}p$(
64                         echo "$RET_PARTX" |
65                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
66                         "$GREP" "system-data" | "$SED" 's/^ //' |
67                         "$CUT" -d ' ' -f 1)
68                 PART_USER=${EMMC_DEVICE}p$(
69                         echo "$RET_PARTX" |
70                         "$TR" -s ' ' | "$TR" '[:upper:]' '[:lower:]' |
71                         "$GREP" "user" | "$SED" 's/^ //' |
72                         "$CUT" -d ' ' -f 1)
73         fi
74 }
75
76 #------------------------------------------------
77 #       check_user_partition
78 #------------------------------------------------
79 check_user_partition() {
80         RET=$("$CAT" ${FAKE_ROOT}/etc/fstab | "$GREP" "user")
81         if [ "z$RET" = "z" ]; then
82                 return 0
83         fi
84         return 1
85 }
86
87 #------------------------------------------------
88 #       mount_partitions
89 #------------------------------------------------
90 mount_partitions() {
91         get_partition_id
92
93         "$MOUNT" -t ext4 -o ro ${PART_ROOTFS} ${FAKE_ROOT}
94         "$MOUNT" -t ext4 ${PART_SYSTEM_DATA} ${FAKE_ROOT}/${SYSTEM_DATA_MNT}
95
96         check_user_partition
97         WITH_USR_PART=$?
98         if [ "$WITH_USR_PART" = "1" ]; then
99                 "$MOUNT" -t ext4 ${PART_USER} ${FAKE_ROOT}/${USER_MNT}
100         fi
101
102         "$MOUNT" -t proc none ${FAKE_ROOT}/proc
103         "$MOUNT" -t sysfs none ${FAKE_ROOT}/sys
104         "$MOUNT" -t devtmpfs devtmpfs ${FAKE_ROOT}/dev
105         "$MOUNT" -t devpts devpts ${FAKE_ROOT}/dev/pts
106 }
107
108 #------------------------------------------------
109 #       umount_partitions
110 #------------------------------------------------
111 umount_partitions() {
112
113         "$UMOUNT" ${FAKE_ROOT}/dev/pts
114         "$UMOUNT" ${FAKE_ROOT}/dev
115         "$UMOUNT" ${FAKE_ROOT}/sys
116         "$UMOUNT" ${FAKE_ROOT}/proc
117
118         if [ "$WITH_USR_PART" = "1" ]; then
119                 "$UMOUNT" ${FAKE_ROOT}/${USER_MNT}
120         fi
121         "$UMOUNT" ${FAKE_ROOT}/${SYSTEM_DATA_MNT}
122         "$UMOUNT" ${FAKE_ROOT}
123 }
124
125 #------------------------------------------------
126 #       handle_no_delta
127 #------------------------------------------------
128 handle_no_delta() {
129         echo "delta does not exist ..." >> ${INT_LOG_FILE}
130
131         echo "${UPI_NO_DELTA_ERROR}" > ${RESULT_FILE}
132 }
133
134 #------------------------------------------------
135 #       handle_no_ua
136 #------------------------------------------------
137 handle_no_ua() {
138         echo "ua does not exist ..." >> ${INT_LOG_FILE}
139
140         echo "${UPI_NO_UA_ERROR}" > ${RESULT_FILE}
141 }
142
143 #------------------------------------------------
144 #       do_create_part_table
145 #------------------------------------------------
146 do_create_part_table() {
147
148         EMMC_DEVICE="/dev/mmcblk0"
149         RET_PARTX=$("$PARTX" -s ${EMMC_DEVICE})
150         TEST=$(echo "$RET_PARTX" | "$TR" -s ' ' | "$SED" -e '1d' -e 's/^ //' | "$CUT" -d ' ' -f 6)
151         if [ "z$TEST" == "z" ]; then
152                 RET_PARTX=$("$BLKID" -o full | "$GREP" ${EMMC_DEVICE}p |
153                                 "$SED" -e 's/\/dev\/mmcblk0p//g' -e 's/\ .*LABEL=\"\(.*\).*$/\1/' |
154                                 "$CUT" -d '"' -f 1 | "$SED" 's/\:/\ /' |
155                                 "$TR" '[:lower:]' '[:upper:]' |
156                                 "$SORT" -k 1 -n)
157         else
158                 RET_PARTX=$("$PARTX" -s ${EMMC_DEVICE} | "$SED" -e '1d' -e 's/^ //' |
159                                 "$TR" -s ' ' | "$CUT" -d ' ' -f 1,6 |
160                                 "$TR" '[:lower:]' '[:upper:]')
161         fi
162         PART_NUM=$(echo "$RET_PARTX" | "$WC" -l)
163
164         echo "$PART_NUM" > ${PART_TBL_PATH}
165         echo "$RET_PARTX" >> ${PART_TBL_PATH}
166         "$SYNC"
167 }
168
169 #------------------------------------------------
170 #       do_fota_update
171 #------------------------------------------------
172 do_fota_update() {
173         echo "fota update start ..." >> ${INT_LOG_FILE}
174
175         DELTA_DIR=`cat ${DELTA_PATH_FILE}`
176         echo "DELTA_DIR = ${DELTA_DIR}" >> ${INT_LOG_FILE}
177
178         RESULT_FILE=${FAKE_ROOT}${FOTA_RESULT_DIR}/result
179         if [ -e ${RESULT_FILE} ]; then
180                 rm -fr ${RESULT_FILE}
181         fi
182
183         UA=${DELTA_DIR}/delta.ua
184         if [ ! -s ${UA} ]; then
185                 handle_no_ua
186                 return 1
187         fi
188
189         /bin/chmod +x ${UA}
190
191         DELTA=${DELTA_DIR}/delta.tar
192         if [ ! -s ${DELTA} ]; then
193                 handle_no_delta
194                 return 1
195         fi
196
197         do_create_part_table
198         if [ ! -e ${PART_TBL_PATH} ]; then
199                 echo "No partition table" >> ${INT_LOG_FILE}
200                 return 1
201         fi
202
203         if [ "$FOTA_GUI_ENABLE" = "1" ]; then
204                 ${UA} ${DELTA_DIR} ${FOTA_TEMP_DIR} 0
205         else
206                 ${UA} ${DELTA_DIR} ${FOTA_TEMP_DIR} 1
207         fi
208
209         if [ $? -ne 0 ]; then
210                 echo "update agent fail!!!" >> ${INT_LOG_FILE}
211                 return 1
212         else
213                 echo "update agent success"
214                 return 0
215         fi
216
217 }
218
219 #------------------------------------------------
220 #       init_internal_log
221 #------------------------------------------------
222 init_internal_log() {
223
224         if [ -e "${INT_LOG_FILE}" ]; then
225                 /bin/rm -fr ${INT_LOG_FILE}
226         fi
227 }
228
229
230 #------------------------------------------------
231 #       init_fota_dir
232 #------------------------------------------------
233 init_fota_dir() {
234
235         TEST_DIR=${FAKE_ROOT}${FOTA_LOG_DIR}
236         if [ ! -e ${TEST_DIR} ]; then
237                 "$MKDIR" -p ${TEST_DIR}
238                 if [ "$?" = "0" ]; then
239                         echo "success to create ${TEST_DIR}" >> ${INT_LOG_FILE}
240                 fi
241         fi
242
243         TEST_DIR=${FAKE_ROOT}${FOTA_RESULT_DIR}
244         if [ ! -e ${TEST_DIR} ]; then
245                 "$MKDIR" -p ${TEST_DIR}
246                 if [ "$?" = "0" ]; then
247                         echo "success to create ${TEST_DIR}" >> ${INT_LOG_FILE}
248                 fi
249         fi
250
251         TEST_DIR=${FAKE_ROOT}${FOTA_TEMP_DIR}
252         if [ ! -e ${TEST_DIR} ]; then
253                 "$MKDIR" -p ${TEST_DIR}
254                 if [ "$?" = "0" ]; then
255                         echo "success to create ${TEST_DIR}" >> ${INT_LOG_FILE}
256                 fi
257         fi
258
259 }
260
261 #------------------------------------------------
262 #       do_reboot
263 #------------------------------------------------
264 do_reboot() {
265         echo "Reboot"
266         "$SYNC"
267         "$REBOOT"
268         while [ 1 ]
269         do
270                 sleep 1
271                 echo "."
272         done
273 }
274
275 #------------------------------------------------
276 #       check_for_rw_power_fail
277 #------------------------------------------------
278 check_for_rw_power_fail() {
279         # Case : Power fail during RW update after RO update
280         if [ -r ${STATUS_FILE} ]; then
281                 echo "${STATUS_FILE} exists" >> ${INT_LOG_FILE}
282                 /bin/cat ${STATUS_FILE} >> ${INT_LOG_FILE}
283                 "$SYNC"
284                 umount_partitions
285                 exec /sbin/fus_rw-init
286         fi
287 }
288
289 #------------------------------------------------
290 #       check_for_fota_gui
291 #------------------------------------------------
292 check_for_fota_gui() {
293         if [ -r ${FOTA_GUI} ]; then
294                 echo "GUI Enabled" >> ${INT_LOG_FILE}
295                 FOTA_GUI_ENABLE=1
296         fi
297 }
298
299
300 #------------------------------------------------
301 #       Main Routine Start
302 #------------------------------------------------
303
304 mount_partitions
305
306 # For debugging - It should be deleted on Release (TODO : tty like ttyS0, S1 should be selected automatically)
307 /sbin/agetty -l /bin/bash -n --keep-baud 115200,38400,9600 ttyS0 linux &
308
309 init_internal_log
310
311 check_for_rw_power_fail
312
313 "$MOUNT" -o remount,rw ${FAKE_ROOT}
314 init_fota_dir
315
316 check_for_fota_gui
317 if [ "$FOTA_GUI_ENABLE" = "1" ]; then
318         export XDG_RUNTIME_DIR=/run
319         export TBM_DISPLAY_SERVER=1
320
321         /usr/bin/fota_gui &
322         /usr/bin/sleep 2
323 fi
324 do_fota_update
325 fota_result=$?
326 if [ "$FOTA_GUI_ENABLE" = "1" ]; then
327         /usr/bin/fota_gui_test -1
328 fi
329 umount_partitions
330
331 if [ "$fota_result" = "0" ]; then
332         exec /sbin/fus_rw-init
333 else
334         #do_reboot
335         # For debugging - It should be deleted on Release
336         echo "Upgrade FAILED"
337         while [ 1 ]
338         do
339                 sleep 10
340         done
341 fi