Skip to content

Commit

Permalink
Fix optimize
Browse files Browse the repository at this point in the history
Fix a miscalculaton of end of partition as it is the last byte of the partition
which made parted fail when the partition wasn't shrunk.

Avoid calling parted if the partition isn't shrunk by resize2fs.

Fix a bug where cleanup_image script was not aborting in case of errors, thus
not revealing a corruption of generated image.

Signed-off-by: Paul Guyot <[email protected]>
  • Loading branch information
pguyot committed May 4, 2024
1 parent 7d172f0 commit c70011a
Showing 1 changed file with 12 additions and 7 deletions.
19 changes: 12 additions & 7 deletions cleanup_image.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
set -uo pipefail
set -euxo pipefail

loopdev=$1
mount=$2
Expand All @@ -12,18 +12,18 @@ rm "${mount}/usr/bin/qemu-arm-static"
rm "${mount}/usr/bin/qemu-aarch64-static0"
rm "${mount}/usr/bin/qemu-aarch64-static"
[ -e "${mount}/etc/_ld.so.preload" ] && mv "${mount}/etc/_ld.so.preload" "${mount}/etc/ld.so.preload"
mv "${mount}/etc/_resolv.conf" "${mount}/etc/resolv.conf"
[ -e "${mount}/etc/_resolv.conf" ] && mv "${mount}/etc/_resolv.conf" "${mount}/etc/resolv.conf"

[[ -f "${mount}/tmp/commands.sh" ]] && rm "${mount}/tmp/commands.sh"
if [[ -d "${mount}" ]]; then

if [[ "${optimize}x" == "x" || "${optimize}x" == "yesx" ]]; then
if [[ -d "${mount}/boot" ]]; then
echo "Zero-filling unused blocks on boot filesystem..."
cat /dev/zero >"${mount}/boot/zero.fill" 2>/dev/null; sync; rm -f "${mount}/boot/zero.fill"
(cat /dev/zero >"${mount}/boot/zero.fill" 2>/dev/null || true); sync; rm -f "${mount}/boot/zero.fill"
fi
echo "Zero-filling unused blocks on root filesystem..."
cat /dev/zero >"${mount}/zero.fill" 2>/dev/null; sync; rm -f "${mount}/zero.fill"
(cat /dev/zero >"${mount}/zero.fill" 2>/dev/null || true); sync; rm -f "${mount}/zero.fill"
fi

umount "${mount}/dev/pts" || true
Expand All @@ -46,11 +46,16 @@ if [[ -d "${mount}" ]]; then
echo "Resizing rootfs partition."
rootfs_partstart=$(parted -m --script "${loopdev}" unit B print | grep "^${rootfs_partnum}:" | awk -F ":" '{print $2}' | tr -d 'B')
rootfs_partsize=$((${rootfs_blockcount} * ${rootfs_blocksize}))
rootfs_partend=$((${rootfs_partstart} + ${rootfs_partsize}))
rootfs_partend=$((${rootfs_partstart} + ${rootfs_partsize} - 1))
rootfs_partoldend=$(parted -m --script "${loopdev}" unit B print | grep "^${rootfs_partnum}:" | awk -F ":" '{print $3}' | tr -d 'B')
# parted --script "${loopdev}" unit B resizepart "${rootfs_partnum}" "${rootfs_partend}"
# Can't use resizepart for shrinking with --script (parted bug#22167) => must rm then mkpart
parted --script "${loopdev}" rm "${rootfs_partnum}"
parted --script "${loopdev}" unit B mkpart primary "${rootfs_partstart}" "${rootfs_partend}"
if [ "$rootfs_partoldend" -ge "$rootfs_partend" ]; then
parted --script "${loopdev}" rm "${rootfs_partnum}"
parted --script "${loopdev}" unit B mkpart primary "${rootfs_partstart}" "${rootfs_partend}"
else
echo "Rootfs partition not resized as it was not shrunk"
fi

free_space=$(parted -m --script "${loopdev}" unit B print free | tail -1)
if [[ "${free_space}" =~ "free" ]]; then
Expand Down

0 comments on commit c70011a

Please sign in to comment.