#!/bin/bash # Default configuration for bootc image creation # This file sets default values that can be overridden by user configuration # Container configuration export CONTAINER_IMAGE="${CONTAINER_IMAGE:-localhost/debian-bootc:ostree-transformed-v2}" export CONTAINER_TAG="${CONTAINER_TAG:-latest}" # Output configuration export OUTPUT_DIR="${OUTPUT_DIR:-./output}" export IMAGE_SIZE_GB="${IMAGE_SIZE_GB:-10}" export IMAGE_NAME="${IMAGE_NAME:-debian-bootc}" # Build configuration export BUILD_TYPE="${BUILD_TYPE:-container}" # container or chroot export USE_APT_CACHER="${USE_APT_CACHER:-true}" export APT_CACHER_URL="${APT_CACHER_URL:-http://localhost:3142}" # OSTree configuration export OSTREE_BRANCH="${OSTREE_BRANCH:-debian/trixie/x86_64}" export OSTREE_SUBJECT="${OSTREE_SUBJECT:-Debian trixie system}" export OSTREE_MODE="${OSTREE_MODE:-bare-user}" # Bootloader configuration export BOOTLOADER_TYPE="${BOOTLOADER_TYPE:-grub}" # grub or systemd-boot export KERNEL_VERSION="${KERNEL_VERSION:-6.12.41+deb13-amd64}" export CONSOLE_OPTIONS="${CONSOLE_OPTIONS:-console=tty0 console=ttyS0,115200n8}" # User configuration export DEFAULT_USER="${DEFAULT_USER:-debian}" export DEFAULT_PASSWORD="${DEFAULT_PASSWORD:-debian123}" export USER_UID="${USER_UID:-1000}" export USER_GID="${USER_GID:-1000}" # Network configuration export ENABLE_SSH="${ENABLE_SSH:-true}" export ENABLE_NETWORK="${ENABLE_NETWORK:-true}" # Output formats export OUTPUT_FORMATS="${OUTPUT_FORMATS:-qcow2}" # qcow2, iso, img, vmdk, vdi, all export KEEP_RAW="${KEEP_RAW:-true}" # Performance configuration export PARALLEL_JOBS="${PARALLEL_JOBS:-$(nproc)}" export COMPRESSION_LEVEL="${COMPRESSION_LEVEL:-6}" # Validation configuration export VERIFY_IMAGE="${VERIFY_IMAGE:-true}" export VERIFY_FILESYSTEM="${VERIFY_FILESYSTEM:-true}" export VERIFY_BOOTLOADER="${VERIFY_BOOTLOADER:-true}" # Cleanup configuration export CLEANUP_WORK_DIR="${CLEANUP_WORK_DIR:-true}" export CLEANUP_TEMP_FILES="${CLEANUP_TEMP_FILES:-true}" # Logging configuration export LOG_LEVEL="${LOG_LEVEL:-info}" # debug, info, warn, error export VERBOSE="${VERBOSE:-false}" # Security configuration export SIGN_IMAGES="${SIGN_IMAGES:-false}" export GPG_KEY="${GPG_KEY:-}" # Architecture configuration export TARGET_ARCH="${TARGET_ARCH:-amd64}" export TARGET_DEBIAN_RELEASE="${TARGET_DEBIAN_RELEASE:-trixie}" # Package configuration export BASE_PACKAGES="${BASE_PACKAGES:-systemd systemd-sysv linux-image-amd64 grub-pc ostree ostree-boot openssh-server sudo}" export ADDITIONAL_PACKAGES="${ADDITIONAL_PACKAGES:-curl wget vim less man-db}" # Debian release configuration export DEBIAN_RELEASE="${DEBIAN_RELEASE:-trixie}" # Default to trixie (Debian 13) export DEBIAN_RELEASES="trixie forky sid" export DEBIAN_RELEASE_NAMES="trixie=Debian 13 forky=Debian 14 sid=Debian Unstable" export DEBIAN_RELEASE_DESCRIPTIONS="trixie=Debian 13 (Trixie) - Testing forky=Debian 14 (Forky) - Unstable sid=Debian Sid - Always Unstable" # Set TARGET_DEBIAN_RELEASE based on DEBIAN_RELEASE export TARGET_DEBIAN_RELEASE="$DEBIAN_RELEASE" # Timeout configuration export BUILD_TIMEOUT="${BUILD_TIMEOUT:-3600}" # 1 hour export EXTRACTION_TIMEOUT="${EXTRACTION_TIMEOUT:-1800}" # 30 minutes export CONVERSION_TIMEOUT="${CONVERSION_TIMEOUT:-900}" # 15 minutes # Print configuration print_config() { echo "=== Bootc Image Creation Configuration ===" echo "Container: $CONTAINER_IMAGE" echo "Build Type: $BUILD_TYPE" echo "Output Directory: $OUTPUT_DIR" echo "Image Size: ${IMAGE_SIZE_GB}GB" echo "Output Formats: $OUTPUT_FORMATS" echo "Bootloader: $BOOTLOADER_TYPE" echo "Kernel: $KERNEL_VERSION" echo "User: $DEFAULT_USER:$DEFAULT_PASSWORD" echo "Architecture: $TARGET_ARCH" echo "Debian Release: $DEBIAN_RELEASE ($(get_debian_release_description "$DEBIAN_RELEASE"))" echo "OSTree Branch: $OSTREE_BRANCH" echo "Use apt-cacher: $USE_APT_CACHER" echo "Enable SSH: $ENABLE_SSH" echo "Verify Image: $VERIFY_IMAGE" echo "Log Level: $LOG_LEVEL" echo "==========================================" } # Validate Debian release validate_debian_release() { local release="$1" for valid_release in $DEBIAN_RELEASES; do if [ "$release" = "$valid_release" ]; then return 0 fi done return 1 } # Get Debian release description get_debian_release_description() { local release="$1" echo "$DEBIAN_RELEASE_DESCRIPTIONS" | tr ' ' '\n' | grep "^$release=" | cut -d'=' -f2 } # Validate configuration validate_config() { local errors=() # Check required values if [ -z "$CONTAINER_IMAGE" ]; then errors+=("CONTAINER_IMAGE is required") fi if [ -z "$OUTPUT_DIR" ]; then errors+=("OUTPUT_DIR is required") fi if [ -z "$IMAGE_SIZE_GB" ] || ! [[ "$IMAGE_SIZE_GB" =~ ^[0-9]+$ ]]; then errors+=("IMAGE_SIZE_GB must be a positive integer") fi if [ -z "$BUILD_TYPE" ] || ! [[ "$BUILD_TYPE" =~ ^(container|chroot)$ ]]; then errors+=("BUILD_TYPE must be 'container' or 'chroot'") fi if [ -z "$BOOTLOADER_TYPE" ] || ! [[ "$BOOTLOADER_TYPE" =~ ^(grub|systemd-boot)$ ]]; then errors+=("BOOTLOADER_TYPE must be 'grub' or 'systemd-boot'") fi if [ -z "$TARGET_ARCH" ]; then errors+=("TARGET_ARCH is required") fi # Validate Debian release if [ -z "$DEBIAN_RELEASE" ]; then errors+=("DEBIAN_RELEASE is required") elif ! validate_debian_release "$DEBIAN_RELEASE"; then errors+=("DEBIAN_RELEASE must be one of: $DEBIAN_RELEASES") fi # Report errors if [ ${#errors[@]} -gt 0 ]; then echo "Configuration validation failed:" >&2 for error in "${errors[@]}"; do echo " - $error" >&2 done return 1 fi return 0 }