System Components
The architecture consists of three primary layers:Host Scripts
Scripts executed on Proxmox VE host for container/VM creation
Function Libraries
Shared utilities providing core functionality
Install Scripts
Application-specific setup running inside containers
Architecture Diagram
Function Libraries
The system relies on several specialized function libraries:Core Libraries (Sourced from GitHub)
build.func - Container Build & Configuration
build.func - Container Build & Configuration
The primary library for LXC container creation. Located at
misc/build.func, it provides:- Variable initialization (
variables()) - Normalizes app names, generates session IDs - Storage management - Handles storage selection for containers and templates
- Configuration system - Loads user defaults from
.varsfiles - Container creation (
build_container()) - Orchestrates the entire build process - Resource allocation - CPU, RAM, disk configuration with precedence logic
install.func - In-Container Installation
install.func - In-Container Installation
Executes inside containers after creation. Located at
misc/install.func, it handles:- Network connectivity verification (IPv4/IPv6)
- OS updates -
update_os()refreshes package lists - DNS resolution checks
- MOTD configuration - Sets up message of the day
- SSH setup - Configures SSH access if enabled
- Service configuration - Post-installation setup
core.func - Shared Utilities
core.func - Shared Utilities
api.func - API Integration & Telemetry
api.func - API Integration & Telemetry
Handles communication with external services:
- Telemetry reporting (with user consent)
- Update checks
- Session tracking
- Progress reporting
error_handler.func - Error Management
error_handler.func - Error Management
Provides robust error handling:
- Trap handlers for script failures
- Cleanup on exit
- Detailed error reporting
- Log management
Data Flow
Container Creation Flow
Variable Precedence System
Configuration values follow a strict precedence order:Environment Variables (Highest Priority)
Variables set in the shell environment before running the script:
For resource allocation (CPU, RAM, disk), if the app script declares higher values than user defaults, the app values take precedence. This ensures applications get the resources they need to run properly.
Security Model
The architecture implements multiple security layers:Safe Configuration Parsing
Instead,load_vars_file() implements safe parsing:
Input Validation
- Whitelist validation - Only approved variable names accepted
-
Value sanitization - Blocks command injection patterns:
$(command)- Command substitution`command`- Backtick execution;- Command chaining&- Background execution<(...)- Process substitution
- Type validation - Numeric values validated against regex patterns
Secure Defaults
- Containers run unprivileged by default (
var_unprivileged=1) - Limited resource allocation prevents resource exhaustion
- SSH access requires explicit user consent
- Firewall features available for network isolation
Extension Points
Developers can extend the system through:Custom Function Libraries
Specialized libraries for specific scenarios:alpine-install.func- Alpine Linux supportalpine-tools.func- Alpine-specific utilitiescloud-init.func- Cloud-init integration for VMsvm-core.func- Virtual machine creation
Update Scripts
Every app script includes anupdate_script() function:
Logging and Diagnostics
The architecture includes comprehensive logging:- Build logs:
/tmp/create-lxc-${SESSION_ID}.log(on host) - Combined logs:
/tmp/${NSAPP}-${CTID}-${SESSION_ID}.log - Persistent logs:
/var/log/community-scripts/(when DEV_MODE_LOGS enabled) - Session tracking: Unique session IDs for troubleshooting
Resource Management
The system intelligently manages storage and resources:Storage Selection
- Auto-detection: If only one storage exists, auto-select it
- Validation: Checks available space before allocation
- Separation: Container and template storage can differ
- User control: Advanced mode allows manual selection
Resource Allocation Logic
Next Steps
Containers vs VMs
Learn the differences between LXC containers and virtual machines
Script Structure
Deep dive into how scripts are organized and executed