#!/bin/bash # Use bootc properly with qcow2 by mapping it as a block device # Based on https://bootc-dev.github.io/bootc/registries-and-offline.html set -e CONTAINER_IMAGE="git.raines.xyz/particle-os/debian-bootc:latest-with-fixes" QCOW2_FILE="debian-bootc-bootc-installed.qcow2" SIZE="10G" echo "๐Ÿ—๏ธ Using bootc with qcow2 as block device" echo "==========================================" echo "Container: $CONTAINER_IMAGE" echo "Output: $QCOW2_FILE" echo "Size: $SIZE" echo "" # Clean up rm -f "$QCOW2_FILE" echo "๐Ÿ’พ Creating qcow2 disk image..." qemu-img create -f qcow2 "$QCOW2_FILE" "$SIZE" echo "๐Ÿ”ง Setting up qcow2 as block device..." # Set up the qcow2 as a loopback device so bootc can see it as a real disk sudo losetup -f "$QCOW2_FILE" LOOP_DEV=$(sudo losetup -j "$QCOW2_FILE" | cut -d: -f1) echo "Loop device: $LOOP_DEV" echo "๐Ÿ“ฆ Running bootc install to the mapped disk..." # Use bootc install to install the container to the loopback device sudo podman run --privileged --rm \ -v /dev:/dev \ -v "$(pwd):/workspace" \ --device "$LOOP_DEV:$LOOP_DEV" \ "$CONTAINER_IMAGE" \ bootc install to-disk --source-imgref "$CONTAINER_IMAGE" "$LOOP_DEV" echo "๐Ÿงน Cleaning up loopback device..." sudo losetup -d "$LOOP_DEV" echo "โœ… Bootc installation completed!" echo "๐Ÿ“Š Image info:" qemu-img info "$QCOW2_FILE" echo "" echo "๐Ÿš€ To boot this image:" echo " qemu-system-x86_64 -m 2G -drive file=$QCOW2_FILE,format=qcow2 -netdev user,id=net0 -device e1000,netdev=net0 -nographic"