working.
This commit is contained in:
parent
0a19e56497
commit
5921f67307
66
rebuild.sh
Executable file
66
rebuild.sh
Executable file
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
IMG="$HOME/Documents/toes-image-builder/toes-ubuntu-base.img"
|
||||||
|
USBBOOT="$HOME/apps/forks/usbboot"
|
||||||
|
|
||||||
|
list_external_disks() {
|
||||||
|
diskutil list external physical 2>/dev/null | awk '/^\/dev\/disk[0-9]+ / { sub("^/dev/", "", $1); print $1 }' | sort || true
|
||||||
|
}
|
||||||
|
|
||||||
|
disk_bytes() {
|
||||||
|
diskutil info "/dev/$1" | awk -F'[()]' '/Disk Size:/ { sub(/ Bytes.*/, "", $2); print $2; exit }'
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "${SKIP_BUILD:-0}" != 1 ]]; then
|
||||||
|
ssh toes-image-builder 'cd toes-image-builder && ./build.sh && cp build/toes-ubuntu-base.img /mnt/utm/toes-image-builder/'
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -f "$IMG" ]] || { echo "missing $IMG" >&2; exit 1; }
|
||||||
|
|
||||||
|
target="${DISK:-}"
|
||||||
|
if [[ -n "$target" ]]; then
|
||||||
|
target="${target#/dev/}"
|
||||||
|
target="${target#r}"
|
||||||
|
else
|
||||||
|
before="$(mktemp)"
|
||||||
|
after="$(mktemp)"
|
||||||
|
trap 'rm -f "$before" "$after"' EXIT
|
||||||
|
list_external_disks >"$before"
|
||||||
|
sudo "$USBBOOT/rpiboot" -d "$USBBOOT/mass-storage-gadget64"
|
||||||
|
|
||||||
|
for _ in {1..30}; do
|
||||||
|
list_external_disks >"$after"
|
||||||
|
new="$(comm -13 "$before" "$after")"
|
||||||
|
[[ -n "$new" ]] && { sleep 2; list_external_disks >"$after"; new="$(comm -13 "$before" "$after")"; break; }
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
[[ -n "${new:-}" ]] || { echo "no new disks" >&2; exit 1; }
|
||||||
|
|
||||||
|
echo "New disks:"
|
||||||
|
target_size=0
|
||||||
|
for disk in $new; do
|
||||||
|
bytes="$(disk_bytes "$disk")"
|
||||||
|
echo " /dev/$disk ${bytes:-?} bytes"
|
||||||
|
[[ "$bytes" =~ ^[0-9]+$ ]] && (( bytes > target_size )) && { target="$disk"; target_size="$bytes"; }
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ "${target:-}" =~ ^disk[0-9]+$ ]] || { echo "bad disk: ${target:-}" >&2; exit 1; }
|
||||||
|
|
||||||
|
target_size="$(disk_bytes "$target")"
|
||||||
|
image_size="$(stat -f %z "$IMG")"
|
||||||
|
[[ "$target_size" =~ ^[0-9]+$ ]] || { echo "could not size /dev/$target" >&2; exit 1; }
|
||||||
|
(( target_size >= image_size )) || { echo "/dev/$target is smaller than $IMG" >&2; exit 1; }
|
||||||
|
|
||||||
|
echo "Selected /dev/$target"
|
||||||
|
echo "Image: $IMG"
|
||||||
|
diskutil info "/dev/$target"
|
||||||
|
printf 'Type FLASH to erase /dev/%s: ' "$target"
|
||||||
|
read -r answer
|
||||||
|
[[ "$answer" == FLASH ]] || { echo "aborted"; exit 1; }
|
||||||
|
|
||||||
|
diskutil unmountDisk "/dev/$target"
|
||||||
|
sudo dd if="$IMG" of="/dev/r$target" bs=16m status=progress conv=fsync
|
||||||
|
sync
|
||||||
|
diskutil eject "/dev/$target"
|
||||||
Loading…
Reference in New Issue
Block a user