From d17cdade6d2ff7aa665119964b53c932a68dc9ed Mon Sep 17 00:00:00 2001 From: Clemens Arth Date: Fri, 18 Sep 2020 14:58:21 +0200 Subject: [PATCH 1/3] script with universal mmcblkX call, and use of postboot hooks for dietPi (should still work with rc-local stuff) --- pishrink.sh | 47 +++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 16 deletions(-) mode change 100755 => 100644 pishrink.sh diff --git a/pishrink.sh b/pishrink.sh old mode 100755 new mode 100644 index dbf6b09..a58e998 --- a/pishrink.sh +++ b/pishrink.sh @@ -78,30 +78,42 @@ function set_autoexpand() { return fi - if [[ -f "$mountdir/etc/rc.local" ]] && [[ "$(md5sum "$mountdir/etc/rc.local" | cut -d ' ' -f 1)" != "1c579c7d5b4292fd948399b6ece39009" ]]; 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 + if ([[ -f "$mountdir/etc/rc.local" ]] && [[ "$(md5sum "$mountdir/etc/rc.local" | cut -d ' ' -f 1)" != "1c579c7d5b4292fd948399b6ece39009" ]]); then + echo "Creating new /etc/rc.local" + isok=1 + rclocal=1 + boothook=/etc/rc.local + if [ -f "$mountdir/etc/rc.local" ]; then + mv "$mountdir/etc/rc.local" "$mountdir/etc/rc.local.bak" + fi + elif [[ -d "$mountdir/var/lib/dietpi/postboot.d" ]]; then + echo "Using postboot hooks..." + isok=1 + rclocal=0 + boothook=/var/lib/dietpi/postboot.d/inflatefs.sh + fi + + if [ "$isok" -eq "1" ]; then #####Do not touch the following lines##### -cat <<\EOF1 > "$mountdir/etc/rc.local" +cat <<\EOF1 > "$mountdir$boothook" #!/bin/bash do_expand_rootfs() { ROOT_PART=$(mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p') + DEV_PART=$(echo "$ROOT_PART" | cut -f1 -d"p") - PART_NUM=${ROOT_PART#mmcblk0p} + PART_NUM=${ROOT_PART#"${DEV_PART}p"} 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=$(parted /dev/${DEV_PART} -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 && +cat < $boothook && #!/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 +rm -f $boothook EOF reboot @@ -140,14 +152,16 @@ sleep 5 do_expand_rootfs echo "ERROR: Expanding failed..." sleep 5 -if [[ -f /etc/rc.local.bak ]]; then - cp -f /etc/rc.local.bak /etc/rc.local - /etc/rc.local +if [ "$rclocal" -eq "1" ]; then + if [[ -f /etc/rc.local.bak ]]; then + cp -f /etc/rc.local.bak /etc/rc.local + /etc/rc.local + fi fi exit 0 EOF1 - #####End no touch zone##### - chmod +x "$mountdir/etc/rc.local" + #####End no touch zone##### + chmod +x "$mountdir$boothook" fi umount "$mountdir" } @@ -421,3 +435,4 @@ aftersize=$(ls -lh "$img" | cut -d ' ' -f 5) logVariables $LINENO aftersize info "Shrunk $img from $beforesize to $aftersize" + From 058cfc339bcfcac59fee635b7be2657b87a09bf6 Mon Sep 17 00:00:00 2001 From: Clemens Arth Date: Fri, 18 Sep 2020 21:31:21 +0200 Subject: [PATCH 2/3] fix for dietpi (final) --- pishrink.sh | 59 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/pishrink.sh b/pishrink.sh index a58e998..90f8ee5 100644 --- a/pishrink.sh +++ b/pishrink.sh @@ -79,7 +79,7 @@ function set_autoexpand() { fi if ([[ -f "$mountdir/etc/rc.local" ]] && [[ "$(md5sum "$mountdir/etc/rc.local" | cut -d ' ' -f 1)" != "1c579c7d5b4292fd948399b6ece39009" ]]); then - echo "Creating new /etc/rc.local" + info "Creating new /etc/rc.local" isok=1 rclocal=1 boothook=/etc/rc.local @@ -87,7 +87,7 @@ function set_autoexpand() { mv "$mountdir/etc/rc.local" "$mountdir/etc/rc.local.bak" fi elif [[ -d "$mountdir/var/lib/dietpi/postboot.d" ]]; then - echo "Using postboot hooks..." + info "Using postboot hooks..." isok=1 rclocal=0 boothook=/var/lib/dietpi/postboot.d/inflatefs.sh @@ -95,25 +95,25 @@ function set_autoexpand() { if [ "$isok" -eq "1" ]; then - #####Do not touch the following lines##### + #####Do not touch the following lines##### cat <<\EOF1 > "$mountdir$boothook" #!/bin/bash do_expand_rootfs() { - ROOT_PART=$(mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p') - DEV_PART=$(echo "$ROOT_PART" | cut -f1 -d"p") +ROOT_PART=$(mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p') +DEV_PART=$(echo "$ROOT_PART" | cut -f1 -d"p") - PART_NUM=${ROOT_PART#"${DEV_PART}p"} - if [ "$PART_NUM" = "$ROOT_PART" ]; then - echo "$ROOT_PART is not an SD card. Don't know how to expand" - return 0 - fi +PART_NUM=${ROOT_PART#"${DEV_PART}p"} +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/${DEV_PART} -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/${DEV_PART} < $boothook && +cat < BOOTHOOKFILE && #!/bin/sh echo "Expanding /dev/$ROOT_PART" resize2fs /dev/$ROOT_PART -rm -f $boothook - EOF +if [ "RCLOCAL" -eq "1" ]; then + echo "rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local" >> BOOTHOOKFILE +else + echo "rm -f BOOTHOOKFILE" >> BOOTHOOKFILE +fi reboot exit } + raspi_config_expand() { /usr/bin/env raspi-config --expand-rootfs if [[ $? != 0 ]]; then @@ -146,21 +150,25 @@ else exit fi } + raspi_config_expand echo "WARNING: Using backup expand..." sleep 5 do_expand_rootfs echo "ERROR: Expanding failed..." sleep 5 -if [ "$rclocal" -eq "1" ]; then - if [[ -f /etc/rc.local.bak ]]; then - cp -f /etc/rc.local.bak /etc/rc.local - /etc/rc.local - fi +if [ "RCLOCAL" -eq "1" ]; then + if [[ -f /etc/rc.local.bak ]]; then + cp -f /etc/rc.local.bak /etc/rc.local + /etc/rc.local + fi fi exit 0 EOF1 - #####End no touch zone##### + +sed -i "s#BOOTHOOKFILE#$boothook#g; s#RCLOCAL#$rclocal#g" $mountdir$boothook +cat $mountdir$boothook | grep RCLOCAL + #####End no touch zone##### chmod +x "$mountdir$boothook" fi umount "$mountdir" @@ -435,4 +443,3 @@ aftersize=$(ls -lh "$img" | cut -d ' ' -f 5) logVariables $LINENO aftersize info "Shrunk $img from $beforesize to $aftersize" - From f1da427a1bcd678083f7afbedeac650f05dadddf Mon Sep 17 00:00:00 2001 From: Clemens Arth Date: Fri, 18 Sep 2020 21:32:22 +0200 Subject: [PATCH 3/3] final --- pishrink.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/pishrink.sh b/pishrink.sh index 90f8ee5..6a543bf 100644 --- a/pishrink.sh +++ b/pishrink.sh @@ -167,7 +167,6 @@ exit 0 EOF1 sed -i "s#BOOTHOOKFILE#$boothook#g; s#RCLOCAL#$rclocal#g" $mountdir$boothook -cat $mountdir$boothook | grep RCLOCAL #####End no touch zone##### chmod +x "$mountdir$boothook" fi