2025-12-01 13:50:11 +01:00

249 lines
7.2 KiB
Markdown

# install.func Documentation
## Overview
The `install.func` file provides container installation workflow orchestration and fundamental operations for applications deployed inside LXC containers. It handles network setup, OS configuration, connectivity verification, and installation mechanics.
## Purpose and Use Cases
- **Container Setup**: Initialize new container with proper configuration
- **Network Verification**: Verify IPv4 and IPv6 connectivity
- **OS Configuration**: Update OS, apply system settings
- **Installation Workflow**: Orchestrate application installation steps
- **Error Handling**: Comprehensive signal trapping and error recovery
## Quick Reference
### Key Function Groups
- **Initialization**: `setting_up_container()` - Setup message and environment
- **Network**: `network_check()`, `verb_ip6()` - Connectivity verification
- **OS Configuration**: `update_os()` - OS updates and package management
- **Installation**: `motd_ssh()`, `customize()` - Container customization
- **Cleanup**: `cleanup_lxc()` - Final container cleanup
### Dependencies
- **External**: `curl`, `apt-get`, `ping`, `dns` utilities
- **Internal**: Uses functions from `core.func`, `error_handler.func`, `tools.func`
### Integration Points
- Used by: All install/*.sh scripts at startup
- Uses: Environment variables from build.func and core.func
- Provides: Container initialization and management services
## Documentation Files
### 📊 [INSTALL_FUNC_FLOWCHART.md](./INSTALL_FUNC_FLOWCHART.md)
Visual execution flows showing initialization, network checks, and installation workflows.
### 📚 [INSTALL_FUNC_FUNCTIONS_REFERENCE.md](./INSTALL_FUNC_FUNCTIONS_REFERENCE.md)
Complete alphabetical reference of all functions with parameters, dependencies, and usage details.
### 💡 [INSTALL_FUNC_USAGE_EXAMPLES.md](./INSTALL_FUNC_USAGE_EXAMPLES.md)
Practical examples showing how to use installation functions and common patterns.
### 🔗 [INSTALL_FUNC_INTEGRATION.md](./INSTALL_FUNC_INTEGRATION.md)
How install.func integrates with other components and provides installation services.
## Key Features
### Container Initialization
- **Environment Setup**: Prepare container variables and functions
- **Message System**: Display installation progress with colored output
- **Error Handlers**: Setup signal trapping for proper cleanup
### Network & Connectivity
- **IPv4 Verification**: Ping external hosts to verify internet access
- **IPv6 Support**: Optional IPv6 enablement and verification
- **DNS Checking**: Verify DNS resolution is working
- **Retry Logic**: Automatic retries for transient failures
### OS Configuration
- **Package Updates**: Safely update OS package lists
- **System Optimization**: Disable unnecessary services (wait-online)
- **Timezone**: Validate and set container timezone
- **SSH Setup**: Configure SSH daemon and keys
### Container Customization
- **MOTD**: Create custom login message
- **Auto-Login**: Optional passwordless root login
- **Update Script**: Register application update function
- **Customization Hooks**: Application-specific setup
## Function Categories
### 🔹 Core Functions
- `setting_up_container()` - Display setup message and set environment
- `network_check()` - Verify network connectivity
- `update_os()` - Update OS packages with retry logic
- `verb_ip6()` - Enable IPv6 (optional)
### 🔹 Configuration Functions
- `motd_ssh()` - Setup MOTD and SSH configuration
- `customize()` - Apply container customizations
- `cleanup_lxc()` - Final cleanup before completion
### 🔹 Utility Functions
- `create_update_script()` - Register application update function
- `set_timezone()` - Configure container timezone
- `disable_wait_online()` - Disable systemd-networkd-wait-online
## Execution Flow
```
Container Started
source $FUNCTIONS_FILE_PATH
setting_up_container() ← Display "Setting up container..."
network_check() ← Verify internet connectivity
update_os() ← Update package lists
[Application-Specific Installation]
motd_ssh() ← Configure SSH/MOTD
customize() ← Apply customizations
cleanup_lxc() ← Final cleanup
Installation Complete
```
## Common Usage Patterns
### Basic Container Setup
```bash
#!/usr/bin/env bash
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
setting_up_container
network_check
update_os
# ... application installation ...
motd_ssh
customize
cleanup_lxc
```
### With Optional IPv6
```bash
#!/usr/bin/env bash
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
setting_up_container
verb_ip6 # Enable IPv6
network_check
update_os
# ... installation ...
motd_ssh
customize
cleanup_lxc
```
### With Custom Update Script
```bash
#!/usr/bin/env bash
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
setting_up_container
network_check
update_os
# ... installation ...
# Register update function
function update_script() {
# Update logic here
}
export -f update_script
motd_ssh
customize
cleanup_lxc
```
## Best Practices
### ✅ DO
- Call `setting_up_container()` at the start
- Check `network_check()` output before main installation
- Use `$STD` variable for silent operations
- Call `cleanup_lxc()` at the very end
- Test network connectivity before critical operations
### ❌ DON'T
- Skip network verification
- Assume internet is available
- Hardcode container paths
- Use `echo` instead of `msg_*` functions
- Forget to call cleanup at the end
## Environment Variables
### Available Variables
- `$FUNCTIONS_FILE_PATH` - Path to core functions (set by build.func)
- `$CTID` - Container ID number
- `$NSAPP` - Normalized application name (lowercase)
- `$APP` - Application display name
- `$STD` - Output suppression (`silent` or empty)
- `$VERBOSE` - Verbose output mode (`yes` or `no`)
### Setting Container Variables
```bash
CONTAINER_TIMEZONE="UTC"
CONTAINER_HOSTNAME="myapp-container"
CONTAINER_FQDN="myapp.example.com"
```
## Troubleshooting
### "Network check failed"
```bash
# Container may not have internet access
# Check:
ping 8.8.8.8 # External connectivity
nslookup example.com # DNS resolution
ip route show # Routing table
```
### "Package update failed"
```bash
# APT may be locked by another process
ps aux | grep apt # Check for running apt
# Or wait for existing apt to finish
sleep 30
update_os
```
### "Cannot source functions"
```bash
# $FUNCTIONS_FILE_PATH may not be set
# This variable is set by build.func before running install script
# If missing, the install script was not called properly
```
## Related Documentation
- **[tools.func/](../tools.func/)** - Package and tool installation
- **[core.func/](../core.func/)** - Utility functions and messaging
- **[error_handler.func/](../error_handler.func/)** - Error handling
- **[alpine-install.func/](../alpine-install.func/)** - Alpine-specific setup
- **[UPDATED_APP-install.md](../../UPDATED_APP-install.md)** - Application script guide
## Recent Updates
### Version 2.0 (Dec 2025)
- ✅ Improved network connectivity checks
- ✅ Enhanced OS update error handling
- ✅ Added IPv6 support with verb_ip6()
- ✅ Better timezone validation
- ✅ Streamlined cleanup procedures
---
**Last Updated**: December 2025
**Maintainers**: community-scripts team
**License**: MIT