Fix fota-init.sh script: 68/257568/1
authorErnest Borowski <e.borowski@samsung.com>
Tue, 27 Apr 2021 12:12:25 +0000 (12:12 +0000)
committerErnest Borowski <e.borowski@samsung.com>
Tue, 27 Apr 2021 12:15:54 +0000 (12:15 +0000)
- Add missing ""
- Fix spelling in log messages
- Improve error handling
- Other script improvements
- Ensure that rm -rf newer expands to /*

Change-Id: I6c6a863886ec42e4affcd6ab7f41af01db9d4e6a
Signed-off-by: Ernest Borowski <e.borowski@samsung.com>
scripts/fota-init.sh

index 495d59ed870564e44cbe914022adc9205ecb37a8..0b9e2d900031c0c859430d9c5eebdddb096ef02d 100755 (executable)
@@ -57,17 +57,17 @@ get_partition_id() {
 mount_partitions() {
        get_partition_id
 
-       "$MOUNT" -o ro ${PART_ROOTFS} ${FAKE_ROOT}
-       "$MOUNT" ${PART_SYSTEM_DATA} ${FAKE_ROOT}/${SYSTEM_DATA_MNT}
+       "$MOUNT" -o ro "${PART_ROOTFS}" "${FAKE_ROOT}"
+       "$MOUNT" "${PART_SYSTEM_DATA}" "${FAKE_ROOT}/${SYSTEM_DATA_MNT}"
 
        if [ ! "z${PART_USER}" = "z" ]; then
-               "$MOUNT" ${PART_USER} ${FAKE_ROOT}/${USER_MNT}
+               "$MOUNT" "${PART_USER}" "${FAKE_ROOT}/${USER_MNT}"
        fi
 
-       "$MOUNT" -t proc none ${FAKE_ROOT}/proc
-       "$MOUNT" -t sysfs none ${FAKE_ROOT}/sys
-       "$MOUNT" -t devtmpfs devtmpfs ${FAKE_ROOT}/dev
-       "$MOUNT" -t devpts devpts ${FAKE_ROOT}/dev/pts
+       "$MOUNT" -t proc none "${FAKE_ROOT}/proc"
+       "$MOUNT" -t sysfs none "${FAKE_ROOT}/sys"
+       "$MOUNT" -t devtmpfs devtmpfs "${FAKE_ROOT}/dev"
+       "$MOUNT" -t devpts devpts "${FAKE_ROOT}/dev/pts"
 }
 
 #------------------------------------------------
@@ -75,34 +75,34 @@ mount_partitions() {
 #------------------------------------------------
 umount_partitions() {
 
-       "$UMOUNT" ${FAKE_ROOT}/dev/pts
-       "$UMOUNT" ${FAKE_ROOT}/dev
-       "$UMOUNT" ${FAKE_ROOT}/sys
-       "$UMOUNT" ${FAKE_ROOT}/proc
+       "$UMOUNT" "${FAKE_ROOT}/dev/pts"
+       "$UMOUNT" "${FAKE_ROOT}/dev"
+       "$UMOUNT" "${FAKE_ROOT}/sys"
+       "$UMOUNT" "${FAKE_ROOT}/proc"
 
        if [ ! "z${PART_USER}" = "z" ]; then
-               "$UMOUNT" ${FAKE_ROOT}/${USER_MNT}
+               "$UMOUNT" "${FAKE_ROOT}/${USER_MNT}"
        fi
-       "$UMOUNT" ${FAKE_ROOT}/${SYSTEM_DATA_MNT}
-       "$UMOUNT" ${FAKE_ROOT}
+       "$UMOUNT" "${FAKE_ROOT}/${SYSTEM_DATA_MNT}"
+       "$UMOUNT" "${FAKE_ROOT}"
 }
 
 #------------------------------------------------
 #      handle_no_delta
 #------------------------------------------------
 handle_no_delta() {
-       echo "delta does not exist ..." >> ${INT_LOG_FILE}
+       echo "delta does not exist ..." >> "${INT_LOG_FILE}"
 
-       echo "${UPI_NO_DELTA_ERROR}" > ${RESULT_FILE}
+       echo "${UPI_NO_DELTA_ERROR}" > "${RESULT_FILE}"
 }
 
 #------------------------------------------------
 #      handle_no_ua
 #------------------------------------------------
 handle_no_ua() {
-       echo "ua does not exist ..." >> ${INT_LOG_FILE}
+       echo "ua does not exist ..." >> "${INT_LOG_FILE}"
 
-       echo "${UPI_NO_UA_ERROR}" > ${RESULT_FILE}
+       echo "${UPI_NO_UA_ERROR}" > "${RESULT_FILE}"
 }
 
 #------------------------------------------------
@@ -111,15 +111,15 @@ handle_no_ua() {
 do_create_part_table() {
 
        EMMC_DEVICE="/dev/mmcblk0"
-       PART_LIST=$("$BLKID" -o full | "$GREP" ${EMMC_DEVICE}p |
+       PART_LIST=$("$BLKID" -o full | "$GREP" "${EMMC_DEVICE}p" |
                        "$SED" -e 's/\/dev\/mmcblk0p//g' -e 's/\ .*LABEL=\"\(.*\).*$/\1/' |
                        "$CUT" -d '"' -f 1 | "$SED" 's/\:/\ /' |
                        "$TR" '[:upper:]' '[:lower:]' |
                        "$SORT" -k 1 -n)
        PART_NUM=$(echo "$PART_LIST" | "$WC" -l)
 
-       echo "$PART_NUM" > ${PART_TBL_PATH}
-       echo "$PART_LIST" >> ${PART_TBL_PATH}
+       echo "$PART_NUM" > "${PART_TBL_PATH}"
+       echo "$PART_LIST" >> "${PART_TBL_PATH}"
        "$SYNC"
 }
 
@@ -127,57 +127,54 @@ do_create_part_table() {
 #      do_fota_update
 #------------------------------------------------
 do_fota_update() {
-       echo "fota update start ..." >> ${INT_LOG_FILE}
+       echo "fota update start ..." >> "${INT_LOG_FILE}"
 
-       DELTA_DIR=`cat ${DELTA_PATH_FILE}`
-       echo "DELTA_DIR = ${DELTA_DIR}" >> ${INT_LOG_FILE}
+       DELTA_DIR=$("$CAT" "${DELTA_PATH_FILE}")
+       echo "DELTA_DIR = ${DELTA_DIR}" >> "${INT_LOG_FILE}"
 
        RESULT_FILE=${FAKE_ROOT}${FOTA_RESULT_DIR}/result
-       if [ -e ${RESULT_FILE} ]; then
-               rm -fr ${RESULT_FILE}
+       if [ -e "${RESULT_FILE}" ]; then
+               rm -fr "${RESULT_FILE}"
        fi
 
        UA=${DELTA_DIR}/delta.ua
-       if [ ! -s ${UA} ]; then
+       if [ ! -s "${UA}" ]; then
                handle_no_ua
                return 1
        fi
 
-       /bin/chmod +x ${UA}
+       /bin/chmod +x "${UA}"
 
        DELTA=${DELTA_DIR}/delta.tar
-       if [ ! -s ${DELTA} ]; then
+       if [ ! -s "${DELTA}" ]; then
                handle_no_delta
                return 1
        fi
 
        do_create_part_table
-       if [ ! -e ${PART_TBL_PATH} ]; then
-               echo "No partition table" >> ${INT_LOG_FILE}
+       if [ ! -e "${PART_TBL_PATH}" ]; then
+               echo "No partition table" >> "${INT_LOG_FILE}"
                return 1
        fi
 
        VERIFY_TOOL=/usr/sbin/img-verifier
-       if [ -e ${VERIFY_TOOL} ]; then
-               ${VERIFY_TOOL} -i ${DELTA} -l "/opt/var/log/last_iv.log"
-               if [ $? -ne 0 ]; then
-                       echo "signature verification failed!" >> ${INT_LOG_FILE}
+       if [ -e "${VERIFY_TOOL}" ]; then
+               if ! "${VERIFY_TOOL}" -i "${DELTA}" -l "/opt/var/log/last_iv.log"; then
+                       echo "signature verification failed!" >> "${INT_LOG_FILE}"
                        return 1
                else
                        echo "update package verification success"
                fi
        else
-               echo "Warning: No signature verifier... Skip it" >> ${INT_LOG_FILE}
+               echo "Warning: No signature verifier... Skip it" >> "${INT_LOG_FILE}"
        fi
 
+       FOTA_ARG="1"
        if [ "$FOTA_GUI_ENABLE" = "1" ]; then
-               ${UA} ${DELTA_DIR} ${FOTA_TEMP_DIR} 0
-       else
-               ${UA} ${DELTA_DIR} ${FOTA_TEMP_DIR} 1
+               FOTA_ARG="0"
        fi
-
-       if [ $? -ne 0 ]; then
-               echo "update agent fail!!!" >> ${INT_LOG_FILE}
+       if ! "${UA}" "${DELTA_DIR}" "${FOTA_TEMP_DIR}" "$FOTA_ARG"; then
+               echo "update agent fail!!!" >> "${INT_LOG_FILE}"
                return 1
        else
                echo "update agent success"
@@ -192,7 +189,7 @@ do_fota_update() {
 init_internal_log() {
 
        if [ -e "${INT_LOG_FILE}" ]; then
-               /bin/rm -fr ${INT_LOG_FILE}
+               /bin/rm -fr "${INT_LOG_FILE}"
        fi
 }
 
@@ -202,30 +199,16 @@ init_internal_log() {
 #------------------------------------------------
 init_fota_dir() {
 
-       TEST_DIR=${FAKE_ROOT}${FOTA_LOG_DIR}
-       if [ ! -e ${TEST_DIR} ]; then
-               "$MKDIR" -p ${TEST_DIR}
-               if [ "$?" = "0" ]; then
-                       echo "success to create ${TEST_DIR}" >> ${INT_LOG_FILE}
-               fi
-       fi
-
-       TEST_DIR=${FAKE_ROOT}${FOTA_RESULT_DIR}
-       if [ ! -e ${TEST_DIR} ]; then
-               "$MKDIR" -p ${TEST_DIR}
-               if [ "$?" = "0" ]; then
-                       echo "success to create ${TEST_DIR}" >> ${INT_LOG_FILE}
-               fi
-       fi
-
-       TEST_DIR=${FAKE_ROOT}${FOTA_TEMP_DIR}
-       if [ ! -e ${TEST_DIR} ]; then
-               "$MKDIR" -p ${TEST_DIR}
-               if [ "$?" = "0" ]; then
-                       echo "success to create ${TEST_DIR}" >> ${INT_LOG_FILE}
+       TEST_DIRS=("${FAKE_ROOT}${FOTA_LOG_DIR}" "${FAKE_ROOT}${FOTA_RESULT_DIR}" "${FAKE_ROOT}${FOTA_TEMP_DIR}")
+       for TEST_DIR in "${TEST_DIRS[@]}"; do
+               if [ ! -e "${TEST_DIR}" ]; then
+                       if "$MKDIR" -p "${TEST_DIR}"; then
+                               echo "Successfully created <${TEST_DIR}>" >> "${INT_LOG_FILE}"
+                       else
+                               echo "Unable to create <${TEST_DIR}>"
+                       fi
                fi
-       fi
-
+       done
 }
 
 #------------------------------------------------
@@ -235,7 +218,7 @@ do_reboot() {
        echo "Reboot"
        "$SYNC"
        "$REBOOT"
-       while [ 1 ]
+       while true
        do
                sleep 1
                echo "."
@@ -247,9 +230,9 @@ do_reboot() {
 #------------------------------------------------
 check_for_rw_power_fail() {
        # Case : Power fail during RW update after RO update
-       if [ -r ${STATUS_FILE} ]; then
-               echo "${STATUS_FILE} exists" >> ${INT_LOG_FILE}
-               /bin/cat ${STATUS_FILE} >> ${INT_LOG_FILE}
+       if [ -r "${STATUS_FILE}" ]; then
+               echo "${STATUS_FILE} exists" >> "${INT_LOG_FILE}"
+               "$CAT" "${STATUS_FILE}" >> "${INT_LOG_FILE}"
                "$SYNC"
                umount_partitions
                exec /sbin/fus_rw-init
@@ -260,8 +243,8 @@ check_for_rw_power_fail() {
 #      check_for_fota_gui
 #------------------------------------------------
 check_for_fota_gui() {
-       if [ -r ${FOTA_GUI} ]; then
-               echo "GUI Enabled" >> ${INT_LOG_FILE}
+       if [ -r "${FOTA_GUI}" ]; then
+               echo "GUI Enabled" >> "${INT_LOG_FILE}"
                FOTA_GUI_ENABLE=1
        fi
 }
@@ -271,18 +254,18 @@ check_for_fota_gui() {
 #------------------------------------------------
 check_debug_mode() {
        DEBUG_MODE_FILE=${FAKE_ROOT}/opt/usr/.upgdebug_ro
-       if [ -f ${DEBUG_MODE_FILE} ]; then
-               DEBUG_MODE_FILE_OWNER=$(${LS} -l ${DEBUG_MODE_FILE} | ${CUT} -d " " -f 3)
+       if [ -f "${DEBUG_MODE_FILE}" ]; then
+               DEBUG_MODE_FILE_OWNER=$("${LS}" -l "${DEBUG_MODE_FILE}" | "${CUT}" -d " " -f 3)
                if [ "${DEBUG_MODE_FILE_OWNER}" = "0" ]; then
                        echo "Enter RO debug mode"
                        echo "If you want to continue FOTA, please remove ${DEBUG_MODE_FILE}"
                        # Wait until debug mode file is removed
-                       while [ -f ${DEBUG_MODE_FILE} ]; do
+                       while [ -f "${DEBUG_MODE_FILE}" ]; do
                                sleep 3
                        done
                        echo "Debug mode file is removed. Resume FOTA"
                else
-                       echo "Warning: somebody make non-root debug mode file... ignore it"
+                       echo "Warning: somebody made non-root debug mode file... ignore it"
                fi
        fi
 }
@@ -293,10 +276,9 @@ check_debug_mode() {
 remake_hash_table() {
        if [ -f "${VERITYCTL}" ]; then
                if [ -f "${VERITY_HANDLER}" ]; then
-                       "$MOUNT" -o remount,ro ${FAKE_ROOT}
+                       "$MOUNT" -o remount,ro "${FAKE_ROOT}"
 
-                       "${VERITY_HANDLER}" ${PART_ROOTFS}
-                       if [ $? -ne 0 ]; then
+                       if ! "${VERITY_HANDLER}" "${PART_ROOTFS}"; then
                                echo "verity-handler fail!!!"
                                return 1
                        else
@@ -304,11 +286,11 @@ remake_hash_table() {
                                return 0
                        fi
                else
-                       echo "Warning: ${VERITYCTL} exists but ${VERITY_HANDLER} not exists"
+                       echo "Warning: ${VERITYCTL} exists but ${VERITY_HANDLER} does not exists"
                        return 2
                fi
        else
-               echo "verityctl not exist. Skip hash remaking"
+               echo "verityctl does not exist. Skip hash remaking"
                return 0
        fi
 }
@@ -328,7 +310,7 @@ init_internal_log
 
 check_for_rw_power_fail
 
-"$MOUNT" -o remount,rw ${FAKE_ROOT}
+"$MOUNT" -o remount,rw "${FAKE_ROOT}"
 init_fota_dir
 
 check_for_fota_gui
@@ -342,15 +324,15 @@ fi
 do_fota_update
 fota_result=$?
 if [ "$fota_result" = "0" ]; then
-       /bin/rm -fr ${DELTA_DIR}/*
+       /bin/rm -fr "${DELTA_DIR:?}"/*
 fi
 
 remake_hash_table
 remake_result=$?
 
 RO_PROGRESS_FILE=/tmp/upgrade/ro_progress
-if [ -f ${RO_PROGRESS_FILE} ]; then
-       echo -1 > ${RO_PROGRESS_FILE}
+if [ -f "${RO_PROGRESS_FILE}" ]; then
+       echo -1 > "${RO_PROGRESS_FILE}"
 fi
 umount_partitions