Files
SparkOS/scripts/build-image.sh
2025-12-29 17:35:07 +00:00

68 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# Build SparkOS disk image using Docker
# This script builds a .img file without requiring root on the host
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
OUTPUT_DIR="$PROJECT_ROOT/release"
echo "SparkOS Disk Image Builder (Docker)"
echo "===================================="
echo ""
# Clean previous build
if [ -f "$OUTPUT_DIR/sparkos.img.gz" ]; then
echo "Cleaning previous image..."
rm -f "$OUTPUT_DIR/sparkos.img.gz"
fi
mkdir -p "$OUTPUT_DIR"
echo "Building disk image using Docker..."
echo "This may take a few minutes..."
echo ""
# Build the image builder container
cd "$PROJECT_ROOT"
docker buildx build \
--file Dockerfile.image \
--target image-builder \
--tag sparkos:image-builder \
--load \
.
# Extract the image
echo ""
echo "Extracting disk image..."
CONTAINER_ID=$(docker create sparkos:image-builder)
docker cp "$CONTAINER_ID:/output/sparkos.img.gz" "$OUTPUT_DIR/sparkos.img.gz"
docker rm "$CONTAINER_ID" > /dev/null
echo ""
echo "SUCCESS! Disk image created:"
echo " Location: $OUTPUT_DIR/sparkos.img.gz"
echo " Size: $(du -h "$OUTPUT_DIR/sparkos.img.gz" | cut -f1)"
echo ""
# Show decompressed size
echo "Decompressed size:"
DECOMPRESSED_SIZE=$(gunzip -l "$OUTPUT_DIR/sparkos.img.gz" | tail -1 | awk '{print $2}')
echo " $(numfmt --to=iec-i --suffix=B $DECOMPRESSED_SIZE)"
echo ""
echo "To write to a USB drive:"
echo " gunzip $OUTPUT_DIR/sparkos.img.gz"
echo " sudo dd if=$OUTPUT_DIR/sparkos.img of=/dev/sdX bs=4M status=progress"
echo ""
echo "WARNING: Replace /dev/sdX with your actual USB device!"
echo " This will DESTROY all data on the target drive!"
echo ""
echo "To inspect the image:"
echo " gunzip -c $OUTPUT_DIR/sparkos.img.gz > /tmp/sparkos.img"
echo " sudo mount -o loop /tmp/sparkos.img /mnt"
echo " ls -la /mnt"
echo " sudo umount /mnt"