From 26cd138b9b530151ae57ec7d50cc3e82ccb8ce02 Mon Sep 17 00:00:00 2001 From: Drew Bonasera Date: Mon, 27 Apr 2020 06:17:07 -0400 Subject: [PATCH] More verbose and earlier errors on incompatible images --- pishrink.sh | 161 +++++++++++++++++++++++++++++----------------------- 1 file changed, 90 insertions(+), 71 deletions(-) diff --git a/pishrink.sh b/pishrink.sh index 7e308aa..5e63751 100755 --- a/pishrink.sh +++ b/pishrink.sh @@ -66,6 +66,88 @@ fi } +function set_autoexpand() { + #Make pi expand rootfs on next boot + mountdir=$(mktemp -d) + mount "$loopback" "$mountdir" + + if [ ! -d "$mountdir/etc" ]; then + info "/etc not found, autoexpand will not be enabled" + umount "$mountdir" + return + fi + + if [ "$(md5sum "$mountdir/etc/rc.local" 2>/dev/null | cut -d ' ' -f 1)" != "0542054e9ff2d2e0507ea1ffe7d4fc87" ]; then + echo "Creating new /etc/rc.local" + if [ -f "$mountdir/etc/rc.local" ]; then + mv "$mountdir/etc/rc.local" "$mountdir/etc/rc.local.bak" + fi + + #####Do not touch the following lines##### +cat <<\EOF1 > "$mountdir/etc/rc.local" +#!/bin/bash +do_expand_rootfs() { + ROOT_PART=$(mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p') + + PART_NUM=${ROOT_PART#mmcblk0p} + if [ "$PART_NUM" = "$ROOT_PART" ]; then + echo "$ROOT_PART is not an SD card. Don't know how to expand" + return 0 + fi + + # Get the starting offset of the root partition + PART_START=$(parted /dev/mmcblk0 -ms unit s p | grep "^${PART_NUM}" | cut -f 2 -d: | sed 's/[^0-9]//g') + [ "$PART_START" ] || return 1 + # Return value will likely be error for fdisk as it fails to reload the + # partition table because the root fs is mounted + fdisk /dev/mmcblk0 < /etc/rc.local && +#!/bin/sh +echo "Expanding /dev/$ROOT_PART" +resize2fs /dev/$ROOT_PART +rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local + +EOF +reboot +exit +} +raspi_config_expand() { +/usr/bin/env raspi-config --expand-rootfs +if [[ $? != 0 ]]; then + return -1 +else + rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local + reboot + exit +fi +} +raspi_config_expand +echo "WARNING: Using backup expand..." +sleep 5 +do_expand_rootfs +echo "ERROR: Expanding failed..." +sleep 5 +rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local +exit 0 +EOF1 + #####End no touch zone##### + chmod +x "$mountdir/etc/rc.local" + fi + umount "$mountdir" +} + help() { local help read -r -d '' help << EOM @@ -189,6 +271,13 @@ partnum="$(echo "$parted_output" | tail -n 1 | cut -d ':' -f 1)" partstart="$(echo "$parted_output" | tail -n 1 | cut -d ':' -f 2 | tr -d 'B')" loopback="$(losetup -f --show -o "$partstart" "$img")" tune2fs_output="$(tune2fs -l "$loopback")" +rc=$? +if (( $rc )); then + echo "$tune2fs_output" + error $LINENO "tune2fs failed. Unable to shrink this type of image" + exit 7 +fi + currentsize="$(echo "$tune2fs_output" | grep '^Block count:' | tr -d ' ' | cut -d ':' -f 2)" blocksize="$(echo "$tune2fs_output" | grep '^Block size:' | tr -d ' ' | cut -d ':' -f 2)" @@ -196,77 +285,7 @@ logVariables $LINENO beforesize parted_output partnum partstart tune2fs_output c #Check if we should make pi expand rootfs on next boot if [ "$should_skip_autoexpand" = false ]; then - #Make pi expand rootfs on next boot - mountdir=$(mktemp -d) - mount "$loopback" "$mountdir" - - if [ "$(md5sum "$mountdir/etc/rc.local" | cut -d ' ' -f 1)" != "0542054e9ff2d2e0507ea1ffe7d4fc87" ]; then - echo "Creating new /etc/rc.local" - mv "$mountdir/etc/rc.local" "$mountdir/etc/rc.local.bak" - #####Do not touch the following lines##### - -cat <<\EOF1 > "$mountdir/etc/rc.local" -#!/bin/bash -do_expand_rootfs() { - ROOT_PART=$(mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p') - - PART_NUM=${ROOT_PART#mmcblk0p} - if [ "$PART_NUM" = "$ROOT_PART" ]; then - echo "$ROOT_PART is not an SD card. Don't know how to expand" - return 0 - fi - - # Get the starting offset of the root partition - PART_START=$(parted /dev/mmcblk0 -ms unit s p | grep "^${PART_NUM}" | cut -f 2 -d: | sed 's/[^0-9]//g') - [ "$PART_START" ] || return 1 - # Return value will likely be error for fdisk as it fails to reload the - # partition table because the root fs is mounted - fdisk /dev/mmcblk0 < /etc/rc.local && -#!/bin/sh -echo "Expanding /dev/$ROOT_PART" -resize2fs /dev/$ROOT_PART -rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local - -EOF -reboot -exit -} -raspi_config_expand() { -/usr/bin/env raspi-config --expand-rootfs -if [[ $? != 0 ]]; then - return -1 -else - rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local - reboot - exit -fi -} -raspi_config_expand -echo "WARNING: Using backup expand..." -sleep 5 -do_expand_rootfs -echo "ERROR: Expanding failed..." -sleep 5 -rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local -exit 0 -EOF1 - #####End no touch zone##### - chmod +x "$mountdir/etc/rc.local" - fi - umount "$mountdir" + set_autoexpand else echo "Skipping autoexpanding process..." fi