diff --git a/lib/debootstrap.sh b/lib/debootstrap.sh index ed7bc91e0c..3a9c3f41ac 100644 --- a/lib/debootstrap.sh +++ b/lib/debootstrap.sh @@ -383,7 +383,7 @@ prepare_partitions() # stage: create blank image display_alert "Creating blank image for rootfs" "$sdsize MiB" "info" # truncate --size=${sdsize}M ${SDCARD}.raw # sometimes results in fs corruption, revert to previous know to work solution - dd if=/dev/zero bs=1M status=none count=$sdsize | pv -p -b -r -s $(( $sdsize * 1024 * 1024 )) | dd status=none of=${SDCARD}.raw + dd if=/dev/zero bs=1M status=none count=$sdsize | pv -p -b -r -s $(( $sdsize * 1024 * 1024 )) -N "[ .... ] dd" | dd status=none of=${SDCARD}.raw # stage: calculate boot partition size local bootstart=$(($OFFSET * 2048)) @@ -635,14 +635,31 @@ create_image() [[ $(type -t post_build_image) == function ]] && post_build_image "$DEST/images/${version}.img" # write image to SD card - if [[ $(lsblk "$CARD_DEVICE" 2>/dev/null) && -f $DEST/images/${version}.img && $COMPRESS_OUTPUTIMAGE != yes ]]; then - display_alert "Writing image" "$CARD_DEVICE" "info" - balena-etcher $DEST/images/${version}.img -d $CARD_DEVICE -y - if [ $? -eq 0 ]; then - display_alert "Writing succeeded" "${version}.img" "info" + if [[ $(lsblk "$CARD_DEVICE" 2>/dev/null) && -f $DEST/images/${version}.img ]]; then + + # make sha256sum if it does not exists. we need it for comparisson + if [[ -f "$DEST/images/${version}".img.sha ]]; then + local ifsha=$(cat $DEST/images/${version}.img.sha | awk '{print $1}') + else + local ifsha=$(sha256sum -b "$DEST/images/${version}".img | awk '{print $1}') + fi + + display_alert "Writing image" "$CARD_DEVICE ${readsha}" "info" + + # write to SD card + pv -p -b -r -c -N "[ .... ] dd" $DEST/images/${version}.img | dd of=$CARD_DEVICE bs=1M iflag=fullblock oflag=direct status=none + + # read and compare + display_alert "Verifying. Please wait!" + local ofsha=$(dd if=$CARD_DEVICE count=$(du -b $DEST/images/${version}.img | cut -f1) status=none iflag=count_bytes oflag=direct | sha256sum | awk '{print $1}') + if [[ $ifsha == $ofsha ]]; then + display_alert "Writing verified" "${version}.img" "info" else display_alert "Writing failed" "${version}.img" "err" fi + elif [[ `systemd-detect-virt` == 'docker' && -n $CARD_DEVICE ]]; then + # display warning when we want to write sd card under Docker + display_alert "Can't write to $CARD_DEVICE" "Enable docker privileged mode in config-docker.conf" "wrn" fi } ############################################################################# diff --git a/lib/general.sh b/lib/general.sh index 6c26346141..ab143b38d3 100644 --- a/lib/general.sh +++ b/lib/general.sh @@ -19,7 +19,6 @@ # prepare_host # webseed # download_and_verify -# download_etcher_cli # cleaning # @@ -735,9 +734,6 @@ prepare_host() fi done - # download etcher CLI utility - download_etcher_cli - [[ ! -f $USERPATCHES_PATH/customize-image.sh ]] && cp $SRC/config/templates/customize-image.sh.template $USERPATCHES_PATH/customize-image.sh if [[ ! -f $USERPATCHES_PATH/README ]]; then @@ -913,41 +909,6 @@ download_and_verify() } -download_etcher_cli() -{ - local url="https://github.com/balena-io/etcher/releases/download/v1.4.8/balena-etcher-cli-1.4.8-linux-x64.tar.gz" - local hash="9befa06b68bb5846bcf5a9516785d48d6aaa9364d80a5802deb5b6a968bf5404" - - local filename=${url##*/} - local dirname=${filename/.tar.gz/-dist} - - export PATH="$PATH:$SRC/cache/utility/$dirname" - - if [[ -f $SRC/cache/utility/$dirname/.download-complete ]]; then - return - fi - - cd $SRC/cache/utility/ - - display_alert "Downloading" "$dirname" - curl -Lf --progress-bar $url -o $filename - - local verified=false - local b=$(sha256sum $filename) - - display_alert "Verifying" - - [[ "$hash" == "$(sha256sum $filename | cut -d ' ' -f 1)" ]] && verified=true - - if [[ $verified == true ]]; then - display_alert "Extracting" - tar --no-same-owner --overwrite -xf $filename && touch $SRC/cache/utility/$dirname/.download-complete && rm $filename - display_alert "Download complete" "" "info" - else - display_alert "Verification failed" "" "wrn" - fi -} - show_developer_warning()