debian-bootc-simple/config/defaults.sh
2025-08-21 07:31:52 -07:00

171 lines
5.7 KiB
Bash

#!/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
}