# Justfile for Debian Atomic Desktop - Phase 1 # Build and manage the minimal bootable Debian image # Default recipe default: @just --list # Build the container image build-image: podman build -t debian-atomic:latest . # Build with a specific tag build-image-tag tag: podman build -t debian-atomic:{{tag}} . # Clean up container images clean: podman rmi debian-atomic:latest || true # Clean all debian-atomic images clean-all: podman rmi debian-atomic:latest || true podman rmi debian-atomic:dev || true # Test the image by running it interactively test-image: podman run -it --rm debian-atomic:latest # Test the image with systemd (requires privileged mode) test-image-systemd: podman run -it --rm --privileged --systemd=always debian-atomic:latest # List all debian-atomic images list-images: podman images debian-atomic # Show image details inspect-image: podman inspect debian-atomic:latest # ============================================================================= # BOOTC DEPLOYMENT TESTING RECIPES # ============================================================================= # Test bootc deployment to loop device (requires root) test-bootc-loop: # Create a test disk image @echo "Creating test disk image..." qemu-img create -f raw test-disk.img 10G # Set up loop device @echo "Setting up loop device..." sudo losetup -f test-disk.img LOOP_DEV=$$(sudo losetup -j test-disk.img | cut -d: -f1) @echo "Using loop device: $$LOOP_DEV" # Run bootc install with proper environment @echo "Running bootc install to-disk..." sudo env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ podman run --rm --privileged --pid=host --volume /dev:/dev \ --env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ --env LANG=C.UTF-8 \ --env LC_ALL=C.UTF-8 \ localhost/debian-atomic:latest \ /usr/bin/bootc install to-disk $$LOOP_DEV --filesystem ext4 # Clean up @echo "Cleaning up..." sudo losetup -d $$LOOP_DEV rm -f test-disk.img # Test bootc deployment with wipe option test-bootc-wipe: # Create a test disk image @echo "Creating test disk image..." qemu-img create -f raw test-disk-wipe.img 10G # Set up loop device @echo "Setting up loop device..." sudo losetup -f test-disk-wipe.img LOOP_DEV=$$(sudo losetup -j test-disk-wipe.img | cut -d: -f1) @echo "Using loop device: $$LOOP_DEV" # Run bootc install with wipe option @echo "Running bootc install to-disk with wipe..." sudo env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ podman run --rm --privileged --pid=host --volume /dev:/dev \ --env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ --env LANG=C.UTF-8 \ --env LC_ALL=C.UTF-8 \ localhost/debian-atomic:latest \ /usr/bin/bootc install to-disk $$LOOP_DEV --filesystem ext4 --wipe # Clean up @echo "Cleaning up..." sudo losetup -d $$LOOP_DEV rm -f test-disk-wipe.img # Test bootc deployment with verbose output test-bootc-verbose: # Create a test disk image @echo "Creating test disk image..." qemu-img create -f raw test-disk-verbose.img 10G # Set up loop device @echo "Setting up loop device..." sudo losetup -f test-disk-verbose.img LOOP_DEV=$$(sudo losetup -j test-disk-verbose.img | cut -d: -f1) @echo "Using loop device: $$LOOP_DEV" # Run bootc install with verbose output @echo "Running bootc install to-disk with verbose output..." sudo env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ podman run --rm --privileged --pid=host --volume /dev:/dev \ --env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ --env LANG=C.UTF-8 \ --env LC_ALL=C.UTF-8 \ localhost/debian-atomic:latest \ /usr/bin/bootc install to-disk $$LOOP_DEV --filesystem ext4 --verbose # Clean up @echo "Cleaning up..." sudo losetup -d $$LOOP_DEV rm -f test-disk-verbose.img # Test bootc deployment with debug output test-bootc-debug: # Create a test disk image @echo "Creating test disk image..." qemu-img create -f raw test-disk-debug.img 10G # Set up loop device @echo "Setting up loop device..." sudo losetup -f test-disk-debug.img LOOP_DEV=$$(sudo losetup -j test-disk-debug.img | cut -d: -f1) @echo "Using loop device: $$LOOP_DEV" # Run bootc install with debug output @echo "Running bootc install to-disk with debug output..." sudo env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ podman run --rm --privileged --pid=host --volume /dev:/dev \ --env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ --env LANG=C.UTF-8 \ --env LC_ALL=C.UTF-8 \ --env RUST_LOG=debug \ localhost/debian-atomic:latest \ /usr/bin/bootc install to-disk $$LOOP_DEV --filesystem ext4 --verbose # Clean up @echo "Cleaning up..." sudo losetup -d $$LOOP_DEV rm -f test-disk-debug.img # Test bootc deployment to specific device (interactive) test-bootc-device device: @echo "Testing bootc deployment to device: {{device}}" @echo "WARNING: This will overwrite the specified device!" @echo "Press Ctrl+C to cancel or any key to continue..." @read # Run bootc install to specified device sudo env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ podman run --rm --privileged --pid=host --volume /dev:/dev \ --env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ --env LANG=C.UTF-8 \ --env LC_ALL=C.UTF-8 \ localhost/debian-atomic:latest \ /usr/bin/bootc install to-disk {{device}} --filesystem ext4 # Test bootc deployment with custom image test-bootc-custom-image image: # Create a test disk image @echo "Creating test disk image..." qemu-img create -f raw test-disk-custom.img 10G # Set up loop device @echo "Setting up loop device..." sudo losetup -f test-disk-custom.img LOOP_DEV=$$(sudo losetup -j test-disk-custom.img | cut -d: -f1) @echo "Using loop device: $$LOOP_DEV" # Run bootc install with custom image @echo "Running bootc install to-disk with custom image: {{image}}" sudo env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ podman run --rm --privileged --pid=host --volume /dev:/dev \ --env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ --env LANG=C.UTF-8 \ --env LC_ALL=C.UTF-8 \ {{image}} \ /usr/bin/bootc install to-disk $$LOOP_DEV --filesystem ext4 # Clean up @echo "Cleaning up..." sudo losetup -d $$LOOP_DEV rm -f test-disk-custom.img # Test bootc deployment in VM environment test-bootc-vm: @echo "Testing bootc deployment in VM environment..." # This would be run inside a VM with proper disk utilities sudo env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ podman run --rm --privileged --pid=host --volume /dev:/dev \ --env PATH="/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin" \ --env LANG=C.UTF-8 \ --env LC_ALL=C.UTF-8 \ localhost/debian-atomic:latest \ /usr/bin/bootc install to-disk /dev/vda --filesystem ext4 # Verify disk utilities in container verify-disk-utils: @echo "Verifying disk utilities in container..." podman run --rm localhost/debian-atomic:latest \ bash -c "which sfdisk parted mkfs.ext4 mkfs.fat grub-install efibootmgr && \ echo 'All disk utilities found!' && \ sfdisk --version && \ parted --version" # Check kernel files in container check-kernel-files: @echo "Checking kernel files in container..." podman run --rm localhost/debian-atomic:latest \ bash -c "echo '=== /boot contents ===' && ls -la /boot/ && \ echo '=== /usr/lib/modules contents ===' && ls -la /usr/lib/modules/ && \ echo '=== /usr/lib/ostree-boot contents ===' && ls -la /usr/lib/ostree-boot/ 2>/dev/null || echo 'ostree-boot directory not found'" # Test bootc status and info test-bootc-info: @echo "Testing bootc info commands..." podman run --rm localhost/debian-atomic:latest \ bash -c "bootc --version && bootc --help" # Clean up all test files clean-test-files: @echo "Cleaning up test files..." rm -f test-disk*.img # Clean up any remaining loop devices @echo "Cleaning up loop devices..." for dev in $$(losetup -j test-disk*.img 2>/dev/null | cut -d: -f1); do \ sudo losetup -d $$dev 2>/dev/null || true; \ done # Show all available test commands test-help: @echo "Available bootc testing commands:" @echo " just test-bootc-loop - Test deployment to loop device" @echo " just test-bootc-wipe - Test deployment with wipe option" @echo " just test-bootc-verbose - Test deployment with verbose output" @echo " just test-bootc-debug - Test deployment with debug output" @echo " just test-bootc-device /dev/sdX - Test deployment to specific device" @echo " just test-bootc-custom-image image:tag - Test with custom image" @echo " just test-bootc-vm - Test deployment in VM environment" @echo " just verify-disk-utils - Verify disk utilities in container" @echo " just check-kernel-files - Check kernel files in container" @echo " just test-bootc-info - Test bootc info commands" @echo " just clean-test-files - Clean up test files" # Help help: @echo "Available recipes:" @echo " Build commands:" @echo " just build-image - Build the container image" @echo " just build-image-tag - Build with specific tag" @echo " Test commands:" @echo " just test-image - Test image interactively" @echo " just test-image-systemd - Test image with systemd" @echo " just test-bootc-loop - Test bootc deployment to loop device" @echo " just test-bootc-wipe - Test bootc deployment with wipe" @echo " just test-bootc-verbose - Test bootc deployment with verbose output" @echo " just test-bootc-debug - Test bootc deployment with debug output" @echo " just test-bootc-device - Test bootc deployment to specific device" @echo " just test-bootc-custom-image - Test with custom image" @echo " just test-bootc-vm - Test bootc deployment in VM" @echo " just verify-disk-utils - Verify disk utilities in container" @echo " just check-kernel-files - Check kernel files in container" @echo " just test-bootc-info - Test bootc info commands" @echo " Utility commands:" @echo " just list-images - List all debian-atomic images" @echo " just inspect-image - Show image details" @echo " just clean - Clean up container images" @echo " just clean-all - Clean all debian-atomic images" @echo " just clean-test-files - Clean up test files" @echo " just test-help - Show all test commands"