diff --git a/packages/initramfs/sysutils/busybox-initramfs/config/busybox-initramfs.conf b/packages/initramfs/sysutils/busybox-initramfs/config/busybox-initramfs.conf index 073c50ec04..05322796d6 100644 --- a/packages/initramfs/sysutils/busybox-initramfs/config/busybox-initramfs.conf +++ b/packages/initramfs/sysutils/busybox-initramfs/config/busybox-initramfs.conf @@ -209,7 +209,7 @@ CONFIG_CP=y # CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set # CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set # CONFIG_FEATURE_DD_IBS_OBS is not set -# CONFIG_DF is not set +CONFIG_DF=y # CONFIG_FEATURE_DF_FANCY is not set # CONFIG_DIRNAME is not set # CONFIG_DOS2UNIX is not set @@ -273,7 +273,7 @@ CONFIG_SLEEP=y # CONFIG_FEATURE_SORT_BIG is not set # CONFIG_SPLIT is not set # CONFIG_FEATURE_SPLIT_FANCY is not set -# CONFIG_STAT is not set +CONFIG_STAT=y # CONFIG_FEATURE_STAT_FORMAT is not set # CONFIG_STTY is not set # CONFIG_SUM is not set diff --git a/packages/initramfs/sysutils/busybox-initramfs/scripts/init b/packages/initramfs/sysutils/busybox-initramfs/scripts/init index 51dab2d243..e8d9344412 100755 --- a/packages/initramfs/sysutils/busybox-initramfs/scripts/init +++ b/packages/initramfs/sysutils/busybox-initramfs/scripts/init @@ -39,8 +39,10 @@ REBOOT="0" MD5_FAILED="0" MD5_NOCHECK="0" + SIZE_FAILED="0" NBD_DEVS="0" + FLASH_FREE_MIN="5" INSTALLED_MEMORY=`cat /proc/meminfo | grep 'MemTotal:' | awk '{print $2}'` SYSTEM_TORAM_LIMIT=1024000 @@ -444,21 +446,53 @@ MD5_FAILED="1" fi - # update if md5 check is ok or .nocheck exists - if [ "$MD5_FAILED" -eq "0" -o "$MD5_NOCHECK" -eq "1" ] ; then - update "Kernel" "$UPDATE_KERNEL" "/flash/$IMAGE_KERNEL" - update "System" "$UPDATE_SYSTEM" "/flash/$IMAGE_SYSTEM" - update_bootloader - REBOOT="1" + # get sizes + FLASH_FREE=$(/bin/busybox df /flash/ | awk '/[0-9]%/{print $4}') + FLASH_FREE=$(( $FLASH_FREE * 1024 )) + OLD_KERNEL=$(/bin/busybox stat -t "/flash/$IMAGE_KERNEL" | awk '{print $2}') + OLD_SYSTEM=$(/bin/busybox stat -t "/flash/$IMAGE_SYSTEM" | awk '{print $2}') + NEW_KERNEL=$(/bin/busybox stat -t "$UPDATE_DIR/$UPDATE_KERNEL" | awk '{print $2}') + NEW_SYSTEM=$(/bin/busybox stat -t "$UPDATE_DIR/$UPDATE_SYSTEM" | awk '{print $2}') + + # old KERNEL+SYSTEM+free space - new KERNEL+SYSTEM must be higher then 5MB + # at least 5MB free after update + + TMP_SIZE=$(($OLD_KERNEL+$OLD_SYSTEM+$FLASH_FREE-$NEW_KERNEL-$NEW_SYSTEM)) + FLASH_FREE_MIN=$(($FLASH_FREE_MIN*1024*1024)) + + if [ $TMP_SIZE -ge $FLASH_FREE_MIN ]; then + echo "Checking size: OK" + else + echo "Checking size: FAILED" + SIZE_FAILED="1" + fi + + # update if size check is ok + if [ "$SIZE_FAILED" -eq "0" ] ; then + # update if md5 check is ok or .nocheck exists + if [ "$MD5_FAILED" -eq "0" -o "$MD5_NOCHECK" -eq "1" ] ; then + update "Kernel" "$UPDATE_KERNEL" "/flash/$IMAGE_KERNEL" + update "System" "$UPDATE_SYSTEM" "/flash/$IMAGE_SYSTEM" + update_bootloader + REBOOT="1" + else + /bin/busybox rm "$UPDATE_DIR/$UPDATE_KERNEL" + /bin/busybox rm "$UPDATE_DIR/$UPDATE_SYSTEM" + echo "md5 check failed. normal startup in 30s..." + /bin/busybox sync + /bin/busybox usleep 30000000 + fi + /bin/busybox rm "$UPDATE_DIR/${UPDATE_KERNEL}.md5" &>/dev/null + /bin/busybox rm "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" &>/dev/null else /bin/busybox rm "$UPDATE_DIR/$UPDATE_KERNEL" /bin/busybox rm "$UPDATE_DIR/$UPDATE_SYSTEM" - echo "md5 check failed. normal startup in 30s..." + /bin/busybox rm "$UPDATE_DIR/${UPDATE_KERNEL}.md5" &>/dev/null + /bin/busybox rm "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" &>/dev/null + echo "size check failed. normal startup in 30s..." /bin/busybox sync /bin/busybox usleep 30000000 fi - /bin/busybox rm "$UPDATE_DIR/${UPDATE_KERNEL}.md5" &>/dev/null - /bin/busybox rm "$UPDATE_DIR/${UPDATE_SYSTEM}.md5" &>/dev/null fi if test "$REBOOT" -eq "1"; then