Some checks failed
Bump build.func Revision / bump-revision (push) Has been cancelled
12 KiB
12 KiB
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 checkingdpkg
: Architecture detectionps
: Process and shell detectionid
: User ID checkingcurl
: Header file downloadingswapon
: Swap status checkingdd
: Swap file creationmkswap
: Swap file formatting
Optional Commands
tput
: Terminal control (installed if missing)apk
: Alpine package managerapt-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
# build.func uses core.func for system checks
source core.func
pve_check
arch_check
shell_check
root_check
User Interface
# build.func uses core.func for UI elements
msg_info "Creating container..."
msg_ok "Container created successfully"
msg_error "Container creation failed"
Silent Execution
# build.func uses core.func for command execution
silent pct create "$CTID" "$TEMPLATE" \
--hostname "$HOSTNAME" \
--memory "$MEMORY" \
--cores "$CORES"
With tools.func
Utility Functions
# 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
# 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
# api.func uses core.func for system checks
source core.func
pve_check
root_check
API Operations
# 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
# 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
# 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
# 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
# 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
# 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
# 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 displayAPP_TYPE
: Application type (ct/vm) for header pathsVERBOSE
: Verbose mode settingvar_os
: OS type for Alpine detectionPCT_OSTYPE
: Alternative OS type variablevar_verbose
: Alternative verbose settingvar_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
andSPINNER_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 validationarch_check()
: Architecture validationshell_check()
: Shell validationroot_check()
: Privilege validationssh_check()
: SSH connection warning
User Interface
msg_info()
: Informational messagesmsg_ok()
: Success messagesmsg_error()
: Error messagesmsg_warn()
: Warning messagesmsg_custom()
: Custom messagesmsg_debug()
: Debug messages
Spinner Control
spinner()
: Start spinner animationstop_spinner()
: Stop spinner and cleanupclear_line()
: Clear current terminal line
Silent Execution
silent()
: Execute commands with error handling
Utility Functions
is_alpine()
: Alpine Linux detectionis_verbose_mode()
: Verbose mode detectionfatal()
: Fatal error handlingensure_tput()
: Terminal control setup
Header Management
get_header()
: Download application headersheader_info()
: Display header information
System Management
check_or_create_swap()
: Swap file management
Internal Functions
Initialization
load_functions()
: Function loadercolor()
: Color setupformatting()
: Formatting setupicons()
: Icon setupdefault_vars()
: Default variablesset_std_mode()
: Standard mode setup
Color Management
color_spinner()
: Spinner colors
Global Variables
Color Variables
YW
,YWB
,BL
,RD
,BGN
,GN
,DGN
,CL
: Color codesCS_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 settingsSTD
: Standard mode settingSILENT_LOGFILE
: Log file path
State Variables
_CORE_FUNC_LOADED
: Loading prevention__FUNCTIONS_LOADED
: Function loading preventionSPINNER_PID
,SPINNER_MSG
: Spinner stateMSG_INFO_SHOWN
: Message tracking
Integration Patterns
Standard Integration Pattern
#!/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
#!/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
#!/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