Introduced new and updated documentation files across the docs/ directory, including project structure guides, function library references, and standardized READMEs for ct, install, vm, tools, api, and misc. This update fully documents all nine function libraries, provides quick start and learning paths, and mirrors the project structure for easier navigation and contribution.
249 lines
7.2 KiB
Markdown
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
|