From 9ce5d7b4089c19310446714201477adc01fbf6ff Mon Sep 17 00:00:00 2001 From: Antoni Adaszkiewicz Date: Mon, 31 Oct 2022 13:24:37 +0100 Subject: [PATCH] Ensure that files vital for upgrade process are extracted from images even when partitions where these files are located are not used for delta generation Change-Id: I1c20c567f8cf5a70412640e8cc95bdbdb7212d7f --- mk_delta/common/bin/mk_delta.sh | 114 +++++++++++++++++++++++++++-------- mk_delta/common/bin/mk_part_delta.sh | 12 ++-- 2 files changed, 94 insertions(+), 32 deletions(-) diff --git a/mk_delta/common/bin/mk_delta.sh b/mk_delta/common/bin/mk_delta.sh index aac874f..b1d0e10 100755 --- a/mk_delta/common/bin/mk_delta.sh +++ b/mk_delta/common/bin/mk_delta.sh @@ -100,11 +100,12 @@ fn_set_default_params() BUILD_STRING_PATH=./data/${BUILD_STRING_FILE} EXTRACTED_FILES_DIR=${STARTING_DIR}"/data" - HAL_TARG_NAME=${EXTRACTED_FILES_DIR}"/hal-model-conf.xml" - ROOTFS_TARG_NAME=${EXTRACTED_FILES_DIR}"/rootfs-model-config.xml" - TIZEN_TARG_NAME=${EXTRACTED_FILES_DIR}"/tizen-build.conf" - BINA_TARG_NAME=${EXTRACTED_FILES_DIR}"/upgrade-support" - BINB_TARG_NAME=${EXTRACTED_FILES_DIR}"/upgrade-apply" + + HAL_TARG_NAME=${EXTRACTED_FILES_DIR}/"hal-model-conf.xml" + ROOTFS_TARG_NAME=${EXTRACTED_FILES_DIR}/"rootfs-model-config.xml" + TIZEN_TARG_NAME=${EXTRACTED_FILES_DIR}/"tizen-build.conf" + UPGRADE_SUPPORT_DIR="upgrade-support" + UPGRADE_APPLY_BIN="upgrade-apply" # Getting date and minor version MONDATE=$(date +%m%d) i=1 @@ -164,7 +165,6 @@ fn_print_update_cfg() # fn_build_update_info() { - echo "PWD=${PWD}" sudo python3 "${UPDATE_INFO_BUILDER_PATH}" "${HAL_TARG_NAME}" "${ROOTFS_TARG_NAME}" "${TIZEN_TARG_NAME}" ${UPDATE_INFO_PATH} rm -f "${HAL_TARG_NAME}" "${ROOTFS_TARG_NAME}" "${TIZEN_TARG_NAME}" @@ -214,34 +214,85 @@ fn_process_extra_delta() fn_get_tar_file_names() { BIN_TO_FIND=$1 + TAR_DIR=$2 - cd ${DATA_DIR}/${OLD_TAR_DIR} - OLD_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null` - cd ${CUR_DIR} - - cd ${DATA_DIR}/${NEW_TAR_DIR} - NEW_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null` - cd ${CUR_DIR} + cd "${DATA_DIR}"/${TAR_DIR} + TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null` + cd "${CUR_DIR}" #--- find which tar contains the binary --- - for tar_file in ${OLD_TAR_LIST} + for tar_file in ${TAR_LIST} do - result=`tar -tvf ${DATA_DIR}/${OLD_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"` + result=`tar -tvf ${DATA_DIR}/${TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"` if [ "$?" = "0" ]; then - OLD_TAR_FILE=${tar_file} + TAR_FILE_FOUND=${tar_file} break fi done +} - for tar_file in ${NEW_TAR_LIST} - do - result=`tar -tvf ${DATA_DIR}/${NEW_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"` - if [ "$?" = "0" ]; then - NEW_TAR_FILE=${tar_file} - break +#------------------------------------------------------------------------------ +# Function : +# fn_extract_files +# +# Description : +# extract crucial files form images in case there were not exctacted previously +# +fn_extract_files_from_partition() +{ + IMAGE=$1 + CUR_DIR=${PWD} + MNT_PNT="TMP_MNT" + mkdir -p ${MNT_PNT} + + fn_get_tar_file_names "$IMAGE" "${OLD_TAR_DIR}" + tar xvf "${DATA_DIR}"/${OLD_TAR_DIR}/"${TAR_FILE_FOUND}" "${IMAGE}" + if [ "$?" != "0" ]; then + return 1; + fi + + sudo mount -o loop "${IMAGE}" ${MNT_PNT} + if [ "$?" != "0" ]; then + return 1; + fi + + if [ "$IMAGE" == "hal.img" ]; then + local HAL_MODEL_CONFIG_PATH=${MNT_PNT}"/etc/config/model-config.xml" + cp "${HAL_MODEL_CONFIG_PATH}" "$HAL_TARG_NAME" + + elif [ "$IMAGE" == "rootfs.img" ]; then + local ROOTFS_MODEL_CONFIG_PATH=${MNT_PNT}"/etc/config/model-config.xml" + local TIZEN_BUILD_CONFIG_PATH=${MNT_PNT}"/etc/tizen-build.conf" + + cp "${ROOTFS_MODEL_CONFIG_PATH}" "${ROOTFS_TARG_NAME}" + cp "${TIZEN_BUILD_CONFIG_PATH}" "${TIZEN_TARG_NAME}" + + sudo umount ${MNT_PNT} + sudo rm -f "${IMAGE}" + + fn_get_tar_file_names "$IMAGE" "${NEW_TAR_DIR}" + tar xvf "${DATA_DIR}"/${NEW_TAR_DIR}/"${TAR_FILE_FOUND}" "${IMAGE}" + if [ "$?" != "0" ]; then + return 1; fi - done + sudo mount -o loop "${IMAGE}" ${MNT_PNT} + if [ "$?" != "0" ]; then + return 1; + fi + + local UPGRADE_SUPPORT_PATH=${MNT_PNT}"/usr/libexec/"${UPGRADE_SUPPORT_DIR} + local UPGRADE_APPLY_PATH=${MNT_PNT}"/usr/bin/"${UPGRADE_APPLY_BIN} + + cp "${UPGRADE_SUPPORT_PATH}"/* . + cp "${UPGRADE_APPLY_PATH}" "${UPGRADE_APPLY_BIN}" + + # TODO buildstring? + fi + + sudo umount ${MNT_PNT} + sudo rm -rf ${MNT_PNT} + sudo rm -f "${IMAGE}" } @@ -251,6 +302,7 @@ fn_get_tar_file_names() #================== STARTING_DIR=${PWD} +DATA_DIR=${STARTING_DIR}/data COMMON_BINDIR=${STARTING_DIR}/../common/bin fn_set_default_params @@ -357,10 +409,20 @@ fi cd ${DELTA_DIR} sudo cp ${COMMON_BINDIR}/unpack.sh ./ -# Ensure essential files are at beginning of archive (metadata, scripts and binaries to perform upgrade) +if [ ! -r "${EXTRACTED_FILES_DIR}"/${UPGRADE_APPLY_BIN} ]; then + fn_extract_files_from_partition rootfs.img +else + cp "${EXTRACTED_FILES_DIR}"/${UPGRADE_APPLY_BIN} . + cp "${EXTRACTED_FILES_DIR}"/${UPGRADE_SUPPORT_DIR}/* . +fi + + +if [ ! -r "${HAL_TARG_NAME}" ]; then + fn_extract_files_from_partition hal.img +fi + fn_build_update_info -cp "${BINB_TARG_NAME}" . -cp "${BINA_TARG_NAME}"/* . +# Ensure essential files are at beginning of archive (metadata, scripts and binaries to perform upgrade) touch *.txt *.cfg *.ini *.sh *.ua sha1sum * > checksum.SHA1 sudo tar --overwrite -cpf ../delta.tar $(ls -1td *) diff --git a/mk_delta/common/bin/mk_part_delta.sh b/mk_delta/common/bin/mk_part_delta.sh index d899c88..39c8d8f 100755 --- a/mk_delta/common/bin/mk_part_delta.sh +++ b/mk_delta/common/bin/mk_part_delta.sh @@ -79,13 +79,13 @@ fn_extract_needed_files() # TODO names + export local ROOTFS_TARG_NAME="rootfs-model-config.xml" local TIZEN_TARG_NAME="tizen-build.conf" - local BINA_TARG_NAME="upgrade-support" - local BINB_TARG_NAME="upgrade-apply" + local UPGRADE_SUPPORT="upgrade-support" + local UPGRADE_APPLY="upgrade-apply" local ROOTFS_MODEL_CONFIG_PATH=${MNT_PNT_OLD}"/etc/config/model-config.xml" local TIZEN_BUILD_CONFIG_PATH=${MNT_PNT_OLD}"/etc/tizen-build.conf" - local BINARY_A_PATH=${MNT_PNT_OLD}"/usr/libexec/"${BINA_TARG_NAME} - local BINARY_B_PATH=${MNT_PNT_OLD}"/usr/bin/"${BINB_TARG_NAME} + local UPGRADE_SUPPORT_PATH=${MNT_PNT_NEW}"/usr/libexec/"${UPGRADE_SUPPORT} + local UPGRADE_APPLY_PATH=${MNT_PNT_NEW}"/usr/bin/"${UPGRADE_APPLY} # build string building echo "===== Start writing image versions =====" @@ -99,8 +99,8 @@ fn_extract_needed_files() # extract files/binaries cp "${ROOTFS_MODEL_CONFIG_PATH}" ./${ROOTFS_TARG_NAME} cp "${TIZEN_BUILD_CONFIG_PATH}" ./${TIZEN_TARG_NAME} - cp -r "${BINARY_A_PATH}" ./${BINA_TARG_NAME} - cp "${BINARY_B_PATH}" ./${BINB_TARG_NAME} + cp -r "${UPGRADE_SUPPORT_PATH}" ./${UPGRADE_SUPPORT} + cp "${UPGRADE_APPLY_PATH}" ./${UPGRADE_APPLY} fi } -- 2.7.4