#!/bin/bash # Wrapper script for Debian Trixie ostree backport # This script calls the main backport script with trixie as the target # Options: --podman, --vm, --help set -e # Default values USE_PODMAN=false USE_VM=false VM_NAME="ostree-trixie-test" CONTAINER_NAME="ostree-trixie-backport" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Function to show usage show_usage() { echo -e "${BLUE}=== Debian Trixie (12) ostree Backport ===${NC}" echo "" echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " --podman Run in Podman container (recommended for testing)" echo " --vm Run in virsh VM (requires KVM/libvirt)" echo " --help Show this help message" echo "" echo "Examples:" echo " $0 # Run directly on host (not recommended)" echo " $0 --podman # Run in isolated Podman container" echo " $0 --vm # Run in isolated VM" echo "" echo "Safety:" echo " - Podman containers are isolated and safe" echo " - VMs provide full isolation but require more resources" echo " - Direct host execution may affect your system" } # Function to check if command exists command_exists() { command -v "$1" >/dev/null 2>&1 } # Function to create and run Podman container run_in_podman() { echo -e "${BLUE}=== Setting up Podman container for Debian Trixie backport ===${NC}" if ! command_exists podman; then echo -e "${RED}Error: Podman is not installed. Please install podman first.${NC}" exit 1 fi echo "Creating Debian Trixie container..." # Create container with necessary privileges podman run --rm -it \ --name "$CONTAINER_NAME" \ --privileged \ --security-opt label=disable \ -v "$(pwd):/workspace:Z" \ -w /workspace \ debian:testing \ bash -c " echo '=== Setting up container environment ===' apt update -y apt install -y git curl wget sudo git clone https://git.raines.xyz/robojerk/libostree-dev.git /tmp/libostree-dev cp -r /tmp/libostree-dev/* /workspace/ cp -r /tmp/libostree-dev/.* /workspace/ 2>/dev/null || true chmod +x /workspace/*.sh echo '=== Container ready, running backport ===' cd /workspace # Create a non-root user for running the script useradd -m -s /bin/bash backport-user # Don't change ownership of host files - only workspace content chown -R backport-user:backport-user /workspace/*.sh chown -R backport-user:backport-user /workspace/ostree-backport.sh echo 'backport-user ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers # Create build directory inside container mkdir -p /home/backport-user/build chown -R backport-user:backport-user /home/backport-user su - backport-user -c 'cd /workspace && BACKPORT_DIR=/home/backport-user/build/ostree-backport-trixie ./ostree-backport.sh trixie' # Copy built packages to host builds directory echo '=== Copying built packages to host builds/ directory ===' mkdir -p /workspace/builds cp -r /home/backport-user/build/ostree-backport-trixie/*.deb /workspace/builds/ 2>/dev/null || echo 'No .deb files found' cp -r /home/backport-user/build/ostree-backport-trixie/*.dsc /workspace/builds/ 2>/dev/null || echo 'No .dsc files found' cp -r /home/backport-user/build/ostree-backport-trixie/*.tar.* /workspace/builds/ 2>/dev/null || echo 'No source tarballs found' echo '=== Build complete. Check builds/ directory for packages ===' " } # Function to create and run VM run_in_vm() { echo -e "${BLUE}=== Setting up VM for Debian Trixie backport ===${NC}" if ! command_exists virsh; then echo -e "${RED}Error: virsh is not installed. Please install libvirt-clients first.${NC}" echo "On Bazzite, try: ujust install libvirt-clients" exit 1 fi # Check for virt-install (may not be available on immutable distros) if ! command_exists virt-install; then echo -e "${YELLOW}Warning: virt-install not found. This is common on immutable distros like Bazzite.${NC}" echo "" echo "Alternative VM creation methods:" echo "1. Use virt-manager (Flatpak) - GUI interface" echo "2. Use virt-install via toolbox/distrobox" echo "3. Use Podman containers instead (recommended)" echo "" echo "For virt-manager (Flatpak):" echo " flatpak run org.virt_manager.virt-manager" echo "" echo "For toolbox/distrobox with virt-install:" echo " toolbox create --distro fedora" echo " toolbox enter" echo " sudo dnf install virt-install" echo "" echo "For Podman container (recommended):" echo " $0 --podman" echo "" read -p "Would you like to try Podman container instead? (Y/n): " -n 1 -r echo if [[ ! $REPLY =~ ^[Nn]$ ]]; then echo "Switching to Podman container..." run_in_podman return else echo "Continuing with VM setup..." fi fi echo "Creating Debian Trixie VM..." # Check if VM already exists if virsh list --all --name | grep -q "$VM_NAME"; then echo -e "${YELLOW}VM $VM_NAME already exists. Starting it...${NC}" virsh start "$VM_NAME" virsh console "$VM_NAME" else echo "Creating new VM: $VM_NAME" # Try to create VM with virt-install if available if command_exists virt-install; then # Create VM with Debian Trixie virt-install \ --name "$VM_NAME" \ --memory 4096 \ --vcpus 2 \ --disk size=20 \ --network default \ --os-variant debian12 \ --location http://deb.debian.org/debian/dists/bookworm/main/installer-amd64/ \ --extra-args "console=ttyS0,115200n8 serial" \ --graphics none \ --noautoconsole else echo -e "${YELLOW}virt-install not available. Please create VM manually:${NC}" echo "" echo "1. Open virt-manager (Flatpak):" echo " flatpak run org.virt_manager.virt-manager" echo "" echo "2. Create new VM with these settings:" echo " - Name: $VM_NAME" echo " - Memory: 4096 MB" echo " - CPUs: 2" echo " - Disk: 20 GB" echo " - OS: Debian 12 (Bookworm)" echo " - Network: Default" echo "" echo "3. Once VM is created and running, connect to it and run:" echo " git clone https://git.raines.xyz/robojerk/libostree-dev.git" echo " cd libostree-dev" echo " ./backport-trixie.sh" echo "" echo "Alternatively, use Podman container:" echo " $0 --podman" return fi echo -e "${GREEN}VM created successfully. You can connect to it with:${NC}" echo "virsh console $VM_NAME" echo "" echo "Once connected, run:" echo "git clone https://git.raines.xyz/robojerk/libostree-dev.git" echo "cd libostree-dev" echo "./backport-trixie.sh" fi } # Parse command line arguments while [[ $# -gt 0 ]]; do case $1 in --podman) USE_PODMAN=true shift ;; --vm) USE_VM=true shift ;; --help|-h) show_usage exit 0 ;; *) echo -e "${RED}Error: Unknown option $1${NC}" show_usage exit 1 ;; esac done # Check for conflicting options if [ "$USE_PODMAN" = true ] && [ "$USE_VM" = true ]; then echo -e "${RED}Error: Cannot use both --podman and --vm options${NC}" exit 1 fi # Main execution logic if [ "$USE_PODMAN" = true ]; then run_in_podman elif [ "$USE_VM" = true ]; then run_in_vm else echo -e "${YELLOW}=== Debian Trixie (12) ostree Backport ===${NC}" echo "Source: Debian sid" echo "Target: Debian Trixie" echo "" echo -e "${YELLOW}Warning: Running directly on host. Consider using --podman or --vm for safety.${NC}" echo "" read -p "Continue anyway? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Aborted. Use --podman or --vm for safe testing." exit 0 fi # Call the main backport script with trixie as the target ./ostree-backport.sh trixie fi