171 lines
5.7 KiB
Bash
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
|
|
}
|