From bc58e2d84198a0a79bfd6d9a40d385990a165ef8 Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Sun, 2 Jul 2023 09:43:51 +0300 Subject: [PATCH] [202012][mlnx-ffb.sh] Update issu-version location (#14927) BACKPORT OF https://github.com/sonic-net/sonic-buildimage/pull/14925 #### Why I did it ISSU version check fails due to inability to mount squashfs from 202211 on 201911 #### How I did it Put ISSU version file under platform directory #### How to verify it 202012 (with [202012][mlnx-ffb.sh] Update issu-version location #14927) to master --- .../build_templates/sonic_debian_extension.j2 | 3 +- platform/mellanox/mlnx-ffb.sh | 70 ++++++++++--------- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 9aa19a9c3f..606f466ed3 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -823,7 +823,8 @@ for fw_file_name in ${!FW_FILE_MAP[@]}; do # Link old FW location to not break existing automation/scripts sudo ln -s /host/image-$SONIC_IMAGE_VERSION/$PLATFORM_DIR/fw/asic/${FW_FILE_MAP[$fw_file_name]} $FILESYSTEM_ROOT/etc/mlnx/${FW_FILE_MAP[$fw_file_name]} done -sudo cp $files_path/$ISSU_VERSION_FILE $FILESYSTEM_ROOT/etc/mlnx/issu-version +sudo cp $files_path/$ISSU_VERSION_FILE $FILESYSTEM_ROOT/$PLATFORM_DIR/fw/asic/issu-version +sudo ln -s /host/image-$SONIC_IMAGE_VERSION/$PLATFORM_DIR/fw/asic/issu-version $FILESYSTEM_ROOT/etc/mlnx/issu-version sudo cp $files_path/$MLNX_FFB_SCRIPT $FILESYSTEM_ROOT/usr/bin/mlnx-ffb.sh sudo cp $files_path/$MLNX_ONIE_FW_UPDATE $FILESYSTEM_ROOT/usr/bin/$MLNX_ONIE_FW_UPDATE sudo cp $files_path/$MLNX_SSD_FW_UPDATE $FILESYSTEM_ROOT/usr/bin/$MLNX_SSD_FW_UPDATE diff --git a/platform/mellanox/mlnx-ffb.sh b/platform/mellanox/mlnx-ffb.sh index d0bef9d577..c7a89d4d39 100755 --- a/platform/mellanox/mlnx-ffb.sh +++ b/platform/mellanox/mlnx-ffb.sh @@ -33,41 +33,47 @@ check_sdk_upgrade() return "${FFB_SUCCESS}" fi - while :; do - mkdir -p "${FS_MOUNTPOINT}" - mount -t squashfs "${FS_PATH}" "${FS_MOUNTPOINT}" || { - >&2 echo "Failed to mount next SONiC image" + ISSU_VERSION_FILE_PATH="/etc/mlnx/issu-version" + CURRENT_ISSU_VERSION="$(cat ${ISSU_VERSION_FILE_PATH})" + NEXT_ISSU_VERSION="Unknown" + + # /host/image-/platform/fw/asic/issu-version is now the new location for ISSU version. + NEXT_IMAGE_ISSU_VERSION_FILE_PATH="/host/image-${NEXT_SONIC_IMAGE#SONiC-OS-}/platform/fw/asic/issu-version" + + if [ -f "${NEXT_IMAGE_ISSU_VERSION_FILE_PATH}" ]; then + NEXT_ISSU_VERSION="$(cat ${NEXT_IMAGE_ISSU_VERSION_FILE_PATH})" + else + while :; do + mkdir -p "${FS_MOUNTPOINT}" + mount -t squashfs "${FS_PATH}" "${FS_MOUNTPOINT}" || { + >&2 echo "Failed to mount next SONiC image" + break + } + + [ -f "${ISSU_VERSION_FILE_PATH}" ] || { + >&2 echo "No ISSU version file found ${ISSU_VERSION_FILE_PATH}" + break + } + + [ -f "${FS_MOUNTPOINT}/${ISSU_VERSION_FILE_PATH}" ] || { + >&2 echo "No ISSU version file found ${ISSU_VERSION_FILE_PATH} in ${NEXT_SONIC_IMAGE}" + break + } + NEXT_ISSU_VERSION="$(cat ${FS_MOUNTPOINT}/${ISSU_VERSION_FILE_PATH})" break - } + done - ISSU_VERSION_FILE_PATH="/etc/mlnx/issu-version" + umount -rf "${FS_MOUNTPOINT}" 2> /dev/null || true + rm -rf "${FS_MOUNTPOINT}" 2> /dev/null || true + fi - [ -f "${ISSU_VERSION_FILE_PATH}" ] || { - >&2 echo "No ISSU version file found ${ISSU_VERSION_FILE_PATH}" - break - } - - [ -f "${FS_MOUNTPOINT}/${ISSU_VERSION_FILE_PATH}" ] || { - >&2 echo "No ISSU version file found ${ISSU_VERSION_FILE_PATH} in ${NEXT_SONIC_IMAGE}" - break - } - - CURRENT_ISSU_VERSION="$(cat ${ISSU_VERSION_FILE_PATH})" - NEXT_ISSU_VERSION="$(cat ${FS_MOUNTPOINT}/${ISSU_VERSION_FILE_PATH})" - - if [[ "${CURRENT_ISSU_VERSION}" == "${NEXT_ISSU_VERSION}" ]]; then - CHECK_RESULT="${FFB_SUCCESS}" - else - >&2 echo "Current and next ISSU version do not match:" - >&2 echo "Current ISSU version: ${CURRENT_ISSU_VERSION}" - >&2 echo "Next ISSU version: ${NEXT_ISSU_VERSION}" - fi - - break - done - - umount -rf "${FS_MOUNTPOINT}" 2> /dev/null || true - rm -rf "${FS_MOUNTPOINT}" 2> /dev/null || true + if [[ "${CURRENT_ISSU_VERSION}" == "${NEXT_ISSU_VERSION}" ]]; then + CHECK_RESULT="${FFB_SUCCESS}" + else + >&2 echo "Current and next ISSU version do not match:" + >&2 echo "Current ISSU version: ${CURRENT_ISSU_VERSION}" + >&2 echo "Next ISSU version: ${NEXT_ISSU_VERSION}" + fi return "${CHECK_RESULT}" }