From 4a68d5facd06231979d091e1399ef8bdbac46a74 Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Sat, 2 Feb 2019 18:57:13 +0200 Subject: [PATCH] fwupdate: temporarily mount new boot while running pre-upgrade scripts --- board/common/overlay/sbin/fwupdate | 32 ++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/board/common/overlay/sbin/fwupdate b/board/common/overlay/sbin/fwupdate index d9097227eb..c4f14d8150 100755 --- a/board/common/overlay/sbin/fwupdate +++ b/board/common/overlay/sbin/fwupdate @@ -5,8 +5,8 @@ function exit_usage() { echo "Usage: fwupdate versions [-j] (lists available versions, optionally outputting json)" - echo " fwupdate current (shows the current version" - echo " fwupdate download (downloads a firmware version)" + echo " fwupdate current (shows the current version)" + echo " fwupdate download (downloads a firmware OS image)" echo " fwupdate extract (extracts the downloaded firmware archive)" echo " fwupdate flashboot (flashes the boot partition from extracted image)" echo " fwupdate flashreboot (prepares for reboot + root partititon flash)" @@ -42,6 +42,7 @@ OS_CONF_FILE=/etc/init.d/os_conf MIN_FREE_DISK=$((500*1024)) # 500 MB VER_FILE=version +BOOT_INFO_FILE=boot_info ROOT_INFO_FILE=root_info BOOT_READY_FILE=boot_flash_ready @@ -50,6 +51,9 @@ FW_FILE_GZ=firmware.img.gz FW_FILE_XZ=firmware.img.xz FW_FILE_EXTR=firmware.img +TMP_BOOT_DIR=/tmp/fwupdate_boot +TMP_ROOT_DIR=/tmp/fwupdate_root + CURL_LOG_FILE=curl.log CURL_PID_FILE=curl.pid @@ -213,14 +217,19 @@ function download_status() { function run_pre_upgrade() { which losetup &>/dev/null || return 0 + boot_start=$(cat ${FW_DIR}/${BOOT_INFO_FILE} | cut -d ' ' -f 1) root_start=$(cat ${FW_DIR}/${ROOT_INFO_FILE} | cut -d ' ' -f 1) - tmp_mnt="/tmp/fwupdate_root" - loop="/dev/loop4" - pre_upgrade="${tmp_mnt}/usr/share/pre-upgrade/*" + boot_loop="/dev/loop3" + root_loop="/dev/loop4" + pre_upgrade="${TMP_ROOT_DIR}/usr/share/pre-upgrade/*" + + mkdir -p ${TMP_BOOT_DIR} + mkdir -p ${TMP_ROOT_DIR} + losetup -o $((boot_start * 1024 * 1024)) ${boot_loop} ${FW_DIR}/${FW_FILE_EXTR} + losetup -o $((root_start * 1024 * 1024)) ${root_loop} ${FW_DIR}/${FW_FILE_EXTR} + mount ${boot_loop} ${TMP_BOOT_DIR} + mount ${root_loop} ${TMP_ROOT_DIR} - mkdir -p ${tmp_mnt} - losetup -o $((root_start * 1024 * 1024)) ${loop} ${FW_DIR}/${FW_FILE_EXTR} - mount ${loop} ${tmp_mnt} if [[ -d ${pre_upgrade} ]]; then for script in ${pre_upgrade}/*.sh; do echo "running pre-upgrade script $(basename ${script})" @@ -234,8 +243,10 @@ function run_pre_upgrade() { done fi - umount ${tmp_mnt} - losetup -d ${loop} + umount ${TMP_BOOT_DIR} + umount ${TMP_ROOT_DIR} + losetup -d ${boot_loop} + losetup -d ${root_loop} } function do_extract() { @@ -370,6 +381,7 @@ function do_flash_boot() { root_start=$((${root_info[1]} / 2048)) # in MB root_size=$((${root_info[3]} / 1048576)) # in MB + echo ${boot_start} ${boot_size} > ${FW_DIR}/${BOOT_INFO_FILE} echo ${root_start} ${root_size} > ${FW_DIR}/${ROOT_INFO_FILE} reallocate_boot_part