Image creation script added.
This commit is contained in:
69
image/write-image.sh
Executable file
69
image/write-image.sh
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
trap 'pkill -P $$' EXIT INT TERM
|
||||
|
||||
# Exit on error
|
||||
set -e
|
||||
|
||||
# Keep sudo session alive
|
||||
sudo -v
|
||||
( while true; do sleep 60; sudo -v; done ) &
|
||||
|
||||
# Kill it on exit or interrupt
|
||||
|
||||
# Check for source argument
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: $0 /dev/sdX"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sourceDevice="$1"
|
||||
# Check if the device exists
|
||||
if [ ! -b "$sourceDevice" ]; then
|
||||
echo "Error: $sourceDevice is not a valid block device."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ask for architecture
|
||||
while true; do
|
||||
read -p "Is this x86_64 or aarch64? (x/a): " architecture
|
||||
architecture="${architecture:0:1}"
|
||||
architecture="${architecture^^}"
|
||||
case "$architecture" in
|
||||
X) arch="x86_64"; break ;;
|
||||
A) arch="aarch64"; break ;;
|
||||
*) echo "Invalid choice. Please enter 'x' for x86_64 or 'a' for aarch64." ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Generate output file name with current date and architecture
|
||||
dateStamp=$(date +%Y.%m.%d)
|
||||
outFile="stormux_gaming_image-${dateStamp}-${arch}.img"
|
||||
|
||||
# Get last used sector from partition table
|
||||
lastSector=$(sudo parted -s "$sourceDevice" unit s print | awk '/^ / {print $3}' | sed 's/s//' | sort -n | tail -n 1)
|
||||
# Get sector size in bytes
|
||||
sectorSize=$(cat /sys/block/$(basename "$sourceDevice")/queue/hw_sector_size)
|
||||
# Calculate total bytes to copy
|
||||
usedBytes=$(( (lastSector + 1) * sectorSize ))
|
||||
# Round up to nearest multiple of bs (4 MiB)
|
||||
blockSizeBytes=$((4 * 1024 * 1024))
|
||||
roundedBytes=$(( (usedBytes + blockSizeBytes - 1) / blockSizeBytes * blockSizeBytes ))
|
||||
# Calculate count for dd (bs=4M)
|
||||
count=$((roundedBytes / blockSizeBytes))
|
||||
# Build the dd command
|
||||
ddCommand="sudo dd if=$sourceDevice of=$outFile bs=4M count=$count oflag=sync status=progress"
|
||||
# Show command and ask for confirmation
|
||||
echo "About to run the following command:"
|
||||
echo "$ddCommand"
|
||||
read -rp "Proceed? [y/N] " confirm
|
||||
confirm="${confirm:0:1}"
|
||||
if [[ "${confirm^}" == "Y" ]]; then
|
||||
eval "$ddCommand"
|
||||
else
|
||||
echo "Aborted."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -e "$outFile" ]]; then
|
||||
sudo xz -T0 -9 "$outFile"
|
||||
fi
|
||||
Reference in New Issue
Block a user