# core.func Integration Guide ## Overview This document describes how `core.func` integrates with other components in the Proxmox Community Scripts project, including dependencies, data flow, and API surface. ## Dependencies ### External Dependencies #### Required Commands - **`pveversion`**: Proxmox VE version checking - **`dpkg`**: Architecture detection - **`ps`**: Process and shell detection - **`id`**: User ID checking - **`curl`**: Header file downloading - **`swapon`**: Swap status checking - **`dd`**: Swap file creation - **`mkswap`**: Swap file formatting #### Optional Commands - **`tput`**: Terminal control (installed if missing) - **`apk`**: Alpine package manager - **`apt-get`**: Debian package manager ### Internal Dependencies #### error_handler.func - **Purpose**: Provides error code explanations for silent execution - **Usage**: Automatically loaded when `silent()` encounters errors - **Integration**: Called via `explain_exit_code()` function - **Data Flow**: Error code → explanation → user display ## Integration Points ### With build.func #### System Validation ```bash # build.func uses core.func for system checks source core.func pve_check arch_check shell_check root_check ``` #### User Interface ```bash # build.func uses core.func for UI elements msg_info "Creating container..." msg_ok "Container created successfully" msg_error "Container creation failed" ``` #### Silent Execution ```bash # build.func uses core.func for command execution silent pct create "$CTID" "$TEMPLATE" \ --hostname "$HOSTNAME" \ --memory "$MEMORY" \ --cores "$CORES" ``` ### With tools.func #### Utility Functions ```bash # tools.func uses core.func utilities source core.func # System checks pve_check root_check # UI elements msg_info "Running maintenance tasks..." msg_ok "Maintenance completed" ``` #### Error Handling ```bash # tools.func uses core.func for error handling if silent systemctl restart service; then msg_ok "Service restarted" else msg_error "Service restart failed" fi ``` ### With api.func #### System Validation ```bash # api.func uses core.func for system checks source core.func pve_check root_check ``` #### API Operations ```bash # api.func uses core.func for API calls msg_info "Connecting to Proxmox API..." if silent curl -k -H "Authorization: PVEAPIToken=$API_TOKEN" \ "$API_URL/api2/json/nodes/$NODE/lxc"; then msg_ok "API connection successful" else msg_error "API connection failed" fi ``` ### With error_handler.func #### Error Explanations ```bash # error_handler.func provides explanations for core.func explain_exit_code() { local code="$1" case "$code" in 1) echo "General error" ;; 2) echo "Misuse of shell builtins" ;; 126) echo "Command invoked cannot execute" ;; 127) echo "Command not found" ;; 128) echo "Invalid argument to exit" ;; *) echo "Unknown error code" ;; esac } ``` ### With install.func #### Installation Process ```bash # install.func uses core.func for installation source core.func # System checks pve_check root_check # Installation steps msg_info "Installing packages..." silent apt-get update silent apt-get install -y package msg_ok "Installation completed" ``` ### With alpine-install.func #### Alpine-Specific Operations ```bash # alpine-install.func uses core.func for Alpine operations source core.func # Alpine detection if is_alpine; then msg_info "Detected Alpine Linux" silent apk add --no-cache package else msg_info "Detected Debian-based system" silent apt-get install -y package fi ``` ### With alpine-tools.func #### Alpine Utilities ```bash # alpine-tools.func uses core.func for Alpine tools source core.func # Alpine-specific operations if is_alpine; then msg_info "Running Alpine-specific operations..." # Alpine tools logic msg_ok "Alpine operations completed" fi ``` ### With passthrough.func #### Hardware Passthrough ```bash # passthrough.func uses core.func for hardware operations source core.func # System checks pve_check root_check # Hardware operations msg_info "Configuring GPU passthrough..." if silent lspci | grep -i nvidia; then msg_ok "NVIDIA GPU detected" else msg_warn "No NVIDIA GPU found" fi ``` ### With vm-core.func #### VM Operations ```bash # vm-core.func uses core.func for VM management source core.func # System checks pve_check root_check # VM operations msg_info "Creating virtual machine..." silent qm create "$VMID" \ --name "$VMNAME" \ --memory "$MEMORY" \ --cores "$CORES" msg_ok "Virtual machine created" ``` ## Data Flow ### Input Data #### Environment Variables - **`APP`**: Application name for header display - **`APP_TYPE`**: Application type (ct/vm) for header paths - **`VERBOSE`**: Verbose mode setting - **`var_os`**: OS type for Alpine detection - **`PCT_OSTYPE`**: Alternative OS type variable - **`var_verbose`**: Alternative verbose setting - **`var_full_verbose`**: Debug mode setting #### Command Parameters - **Function arguments**: Passed to individual functions - **Command arguments**: Passed to `silent()` function - **User input**: Collected via `read` commands ### Processing Data #### System Information - **Proxmox version**: Parsed from `pveversion` output - **Architecture**: Retrieved from `dpkg --print-architecture` - **Shell type**: Detected from process information - **User ID**: Retrieved from `id -u` - **SSH connection**: Detected from `SSH_CLIENT` environment #### UI State - **Message tracking**: `MSG_INFO_SHOWN` associative array - **Spinner state**: `SPINNER_PID` and `SPINNER_MSG` variables - **Terminal state**: Cursor position and display mode #### Error Information - **Exit codes**: Captured from command execution - **Log output**: Redirected to temporary log files - **Error explanations**: Retrieved from error_handler.func ### Output Data #### User Interface - **Colored messages**: ANSI color codes for terminal output - **Icons**: Symbolic representations for different message types - **Spinners**: Animated progress indicators - **Formatted text**: Consistent message formatting #### System State - **Exit codes**: Returned from functions - **Log files**: Created for silent execution - **Configuration**: Modified system settings - **Process state**: Spinner processes and cleanup ## API Surface ### Public Functions #### System Validation - **`pve_check()`**: Proxmox VE version validation - **`arch_check()`**: Architecture validation - **`shell_check()`**: Shell validation - **`root_check()`**: Privilege validation - **`ssh_check()`**: SSH connection warning #### User Interface - **`msg_info()`**: Informational messages - **`msg_ok()`**: Success messages - **`msg_error()`**: Error messages - **`msg_warn()`**: Warning messages - **`msg_custom()`**: Custom messages - **`msg_debug()`**: Debug messages #### Spinner Control - **`spinner()`**: Start spinner animation - **`stop_spinner()`**: Stop spinner and cleanup - **`clear_line()`**: Clear current terminal line #### Silent Execution - **`silent()`**: Execute commands with error handling #### Utility Functions - **`is_alpine()`**: Alpine Linux detection - **`is_verbose_mode()`**: Verbose mode detection - **`fatal()`**: Fatal error handling - **`ensure_tput()`**: Terminal control setup #### Header Management - **`get_header()`**: Download application headers - **`header_info()`**: Display header information #### System Management - **`check_or_create_swap()`**: Swap file management ### Internal Functions #### Initialization - **`load_functions()`**: Function loader - **`color()`**: Color setup - **`formatting()`**: Formatting setup - **`icons()`**: Icon setup - **`default_vars()`**: Default variables - **`set_std_mode()`**: Standard mode setup #### Color Management - **`color_spinner()`**: Spinner colors ### Global Variables #### Color Variables - **`YW`**, **`YWB`**, **`BL`**, **`RD`**, **`BGN`**, **`GN`**, **`DGN`**, **`CL`**: Color codes - **`CS_YW`**, **`CS_YWB`**, **`CS_CL`**: Spinner colors #### Formatting Variables - **`BFR`**, **`BOLD`**, **`HOLD`**, **`TAB`**, **`TAB3`**: Formatting helpers #### Icon Variables - **`CM`**, **`CROSS`**, **`INFO`**, **`OS`**, **`OSVERSION`**, etc.: Message icons #### Configuration Variables - **`RETRY_NUM`**, **`RETRY_EVERY`**: Retry settings - **`STD`**: Standard mode setting - **`SILENT_LOGFILE`**: Log file path #### State Variables - **`_CORE_FUNC_LOADED`**: Loading prevention - **`__FUNCTIONS_LOADED`**: Function loading prevention - **`SPINNER_PID`**, **`SPINNER_MSG`**: Spinner state - **`MSG_INFO_SHOWN`**: Message tracking ## Integration Patterns ### Standard Integration Pattern ```bash #!/usr/bin/env bash # Standard integration pattern # 1. Source core.func first source core.func # 2. Run system checks pve_check arch_check shell_check root_check # 3. Set up error handling trap 'stop_spinner' EXIT INT TERM # 4. Use UI functions msg_info "Starting operation..." # 5. Use silent execution silent command # 6. Show completion msg_ok "Operation completed" ``` ### Minimal Integration Pattern ```bash #!/usr/bin/env bash # Minimal integration pattern source core.func pve_check root_check msg_info "Running operation..." silent command msg_ok "Operation completed" ``` ### Advanced Integration Pattern ```bash #!/usr/bin/env bash # Advanced integration pattern source core.func # System validation pve_check arch_check shell_check root_check ssh_check # Error handling trap 'stop_spinner' EXIT INT TERM # Verbose mode handling if is_verbose_mode; then msg_info "Verbose mode enabled" fi # OS-specific operations if is_alpine; then msg_info "Alpine Linux detected" # Alpine-specific logic else msg_info "Debian-based system detected" # Debian-specific logic fi # Operation execution msg_info "Starting operation..." if silent command; then msg_ok "Operation succeeded" else msg_error "Operation failed" exit 1 fi ``` ## Error Handling Integration ### Silent Execution Error Flow ``` silent() command ├── Execute command ├── Capture output to log ├── Check exit code ├── If error: │ ├── Load error_handler.func │ ├── Get error explanation │ ├── Display error details │ ├── Show log excerpt │ └── Exit with error code └── If success: Continue ``` ### System Check Error Flow ``` System Check Function ├── Check system state ├── If valid: Return 0 └── If invalid: ├── Display error message ├── Show fix instructions ├── Sleep for user to read └── Exit with error code ``` ## Performance Considerations ### Loading Optimization - **Single Loading**: `_CORE_FUNC_LOADED` prevents multiple loading - **Function Loading**: `__FUNCTIONS_LOADED` prevents multiple function loading - **Lazy Loading**: Functions loaded only when needed ### Memory Usage - **Minimal Footprint**: Core functions use minimal memory - **Variable Reuse**: Global variables reused across functions - **Cleanup**: Spinner processes cleaned up on exit ### Execution Speed - **Fast Checks**: System checks are optimized for speed - **Efficient Spinners**: Spinner animation uses minimal CPU - **Quick Messages**: Message functions optimized for performance ## Security Considerations ### Privilege Escalation - **Root Check**: Ensures script runs with sufficient privileges - **Shell Check**: Validates shell environment - **Process Validation**: Checks parent process for sudo usage ### Input Validation - **Parameter Checking**: Functions validate input parameters - **Error Handling**: Proper error handling prevents crashes - **Safe Execution**: Silent execution with proper error handling ### System Protection - **Version Validation**: Ensures compatible Proxmox version - **Architecture Check**: Prevents execution on unsupported systems - **SSH Warning**: Warns about external SSH usage ## Future Integration Considerations ### Extensibility - **Function Groups**: Easy to add new function groups - **Message Types**: Easy to add new message types - **System Checks**: Easy to add new system checks ### Compatibility - **Version Support**: Easy to add new Proxmox versions - **OS Support**: Easy to add new operating systems - **Architecture Support**: Easy to add new architectures ### Performance - **Optimization**: Functions can be optimized for better performance - **Caching**: Results can be cached for repeated operations - **Parallelization**: Operations can be parallelized where appropriate