]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
base-files: add gzip-compressed tar support to emmc_upgrade_tar()
authorINAGAKI Hiroshi <musashino.open@gmail.com>
Sun, 4 Aug 2024 09:14:43 +0000 (18:14 +0900)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 22 Jun 2025 20:17:19 +0000 (22:17 +0200)
Add support for the tar archive compressed by gzip to emmc_upgrade_tar()
function.

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/16904
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
package/base-files/files/lib/upgrade/emmc.sh

index 78e398d6d55a458de3de5044b6dcd415362273aa..42450582b58b14fb9fc05eae1f7d89112152a059 100644 (file)
@@ -10,11 +10,15 @@ emmc_upgrade_tar() {
        [ "$CI_DATAPART" -a -z "$EMMC_DATA_DEV" ] && export EMMC_DATA_DEV="$(find_mmc_part $CI_DATAPART $CI_ROOTDEV)"
        local has_kernel
        local has_rootfs
-       local board_dir=$(tar tf "$tar_file" | grep -m 1 '^sysupgrade-.*/$')
+       local gz
+       local board_dir
+       [ "$(identify_magic_long $(get_magic_long "$tar_file" cat))" = "gzip" ] && \
+               gz="z"
+       board_dir=$(tar t${gz}f "$tar_file" | grep -m 1 '^sysupgrade-.*/$')
        board_dir=${board_dir%/}
 
-       tar tf "$tar_file" ${board_dir}/kernel 1>/dev/null 2>/dev/null && has_kernel=1
-       tar tf "$tar_file" ${board_dir}/root 1>/dev/null 2>/dev/null && has_rootfs=1
+       tar t${gz}f "$tar_file" ${board_dir}/kernel 1>/dev/null 2>/dev/null && has_kernel=1
+       tar t${gz}f "$tar_file" ${board_dir}/root 1>/dev/null 2>/dev/null && has_rootfs=1
 
        [ "$has_rootfs" = 1 -a "$EMMC_ROOT_DEV" ] && {
                # Invalidate kernel image while rootfs is being written
@@ -23,14 +27,14 @@ emmc_upgrade_tar() {
                        sync
                }
 
-               export EMMC_ROOTFS_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/root -O | dd of="$EMMC_ROOT_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
+               export EMMC_ROOTFS_BLOCKS=$(($(tar x${gz}f "$tar_file" ${board_dir}/root -O | dd of="$EMMC_ROOT_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
                # Account for 64KiB ROOTDEV_OVERLAY_ALIGN in libfstools
                EMMC_ROOTFS_BLOCKS=$(((EMMC_ROOTFS_BLOCKS + 127) & ~127))
                sync
        }
 
        [ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] &&
-               export EMMC_KERNEL_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/kernel -O | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
+               export EMMC_KERNEL_BLOCKS=$(($(tar x${gz}f "$tar_file" ${board_dir}/kernel -O | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
 
        if [ -z "$UPGRADE_BACKUP" ]; then
                if [ "$EMMC_DATA_DEV" ]; then