8.5 KiB
8.5 KiB
alpine-install.func Documentation
Overview
The alpine-install.func file provides Alpine Linux-specific installation and configuration functions for LXC containers. It complements the standard install.func with Alpine-specific operations using the apk package manager instead of apt.
Purpose and Use Cases
- Alpine Container Setup: Initialize Alpine Linux containers with proper configuration
- IPv6 Management: Enable or disable IPv6 in Alpine with persistent configuration
- Network Verification: Verify connectivity in Alpine environments
- SSH Configuration: Setup SSH daemon on Alpine
- Auto-Login Setup: Configure passwordless root login for Alpine containers
- Package Management: Safe apk operations with error handling
Quick Reference
Key Function Groups
- Initialization:
setting_up_container()- Alpine setup message - Network:
verb_ip6(),network_check()- IPv6 and connectivity - OS Configuration:
update_os()- Alpine package updates - SSH/MOTD:
motd_ssh()- SSH and login message setup - Container Customization:
customize(),cleanup_lxc()- Final setup
Dependencies
- External:
apk,curl,wget,ping - Internal: Uses functions from
core.func,error_handler.func
Integration Points
- Used by: Alpine-based install scripts (alpine.sh, alpine-ntfy.sh, etc.)
- Uses: Environment variables from build.func
- Provides: Alpine-specific installation and management services
Documentation Files
📊 ALPINE_INSTALL_FUNC_FLOWCHART.md
Visual execution flows showing Alpine container initialization and setup workflows.
📚 ALPINE_INSTALL_FUNC_FUNCTIONS_REFERENCE.md
Complete alphabetical reference of all functions with parameters and usage details.
💡 ALPINE_INSTALL_FUNC_USAGE_EXAMPLES.md
Practical examples showing how to use Alpine installation functions.
🔗 ALPINE_INSTALL_FUNC_INTEGRATION.md
How alpine-install.func integrates with standard install workflows.
Key Features
Alpine-Specific Functions
- apk Package Manager: Alpine package operations (instead of apt-get)
- OpenRC Support: Alpine uses OpenRC init instead of systemd
- Lightweight Setup: Minimal dependencies appropriate for Alpine
- IPv6 Configuration: Persistent IPv6 settings via
/etc/network/interfaces
Network & Connectivity
- IPv6 Toggle: Enable/disable with persistent configuration
- Connectivity Check: Verify internet access in Alpine
- DNS Verification: Resolve domain names correctly
- Retry Logic: Automatic recovery from transient failures
SSH & Auto-Login
- SSH Daemon: Setup and start sshd on Alpine
- Root Keys: Configure root SSH access
- Auto-Login: Optional automatic login without password
- MOTD: Custom login message on Alpine
Function Categories
🔹 Core Functions
setting_up_container()- Alpine container setup messageupdate_os()- Update Alpine packages via apkverb_ip6()- Enable/disable IPv6 persistentlynetwork_check()- Verify network connectivity
🔹 SSH & Configuration Functions
motd_ssh()- Configure SSH daemon on Alpinecustomize()- Apply Alpine-specific customizationscleanup_lxc()- Final cleanup
🔹 Service Management (OpenRC)
rc-update- Enable/disable services for Alpinerc-service- Start/stop services on Alpine- Service configuration files in
/etc/init.d/
Differences from Debian Install
| Feature | Debian (install.func) | Alpine (alpine-install.func) |
|---|---|---|
| Package Manager | apt-get | apk |
| Init System | systemd | OpenRC |
| SSH Service | systemctl | rc-service |
| Config Files | /etc/systemd/ | /etc/init.d/ |
| Network Config | /etc/network/ or Netplan | /etc/network/interfaces |
| IPv6 Setup | netplan files | /etc/network/interfaces |
| Auto-Login | getty override | /etc/inittab or shell config |
| Size | ~200MB | ~100MB |
Execution Flow for Alpine
Alpine Container Started
↓
source $FUNCTIONS_FILE_PATH
↓
setting_up_container() ← Alpine setup message
↓
update_os() ← apk update
↓
verb_ip6() ← IPv6 configuration (optional)
↓
network_check() ← Verify connectivity
↓
[Application-Specific Installation]
↓
motd_ssh() ← Configure SSH/MOTD
customize() ← Apply customizations
↓
cleanup_lxc() ← Final cleanup
↓
Alpine Installation Complete
Common Usage Patterns
Basic Alpine Setup
#!/usr/bin/env bash
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
setting_up_container
update_os
# Install Alpine-specific packages
apk add --no-cache curl wget git
# ... application installation ...
motd_ssh
customize
cleanup_lxc
With IPv6 Enabled
#!/usr/bin/env bash
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
setting_up_container
verb_ip6
update_os
network_check
# ... application installation ...
motd_ssh
customize
cleanup_lxc
Installing Services
#!/usr/bin/env bash
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
setting_up_container
update_os
# Install via apk
apk add --no-cache nginx
# Enable and start service on Alpine
rc-update add nginx
rc-service nginx start
motd_ssh
customize
cleanup_lxc
Best Practices
✅ DO
- Use
apk add --no-cacheto reduce image size - Enable IPv6 if application needs it (
verb_ip6) - Use
rc-servicefor service management on Alpine - Check
/etc/network/interfacesfor IPv6 persistence - Test network connectivity before critical operations
- Use
$STDfor output suppression in production
❌ DON'T
- Use
apt-getcommands (Alpine doesn't have apt) - Use
systemctl(Alpine uses OpenRC, not systemd) - Use
servicecommand (it may not exist on Alpine) - Assume systemd exists on Alpine
- Forget to add
--no-cacheflag toapk add - Hardcode paths from Debian (different on Alpine)
Alpine-Specific Considerations
Package Names
Some packages have different names on Alpine:
# Debian → Alpine
# curl → curl (same)
# wget → wget (same)
# python3 → python3 (same)
# libpq5 → postgresql-client
# libmariadb3 → mariadb-client
Service Management
# Debian (systemd) → Alpine (OpenRC)
systemctl start nginx → rc-service nginx start
systemctl enable nginx → rc-update add nginx
systemctl status nginx → rc-service nginx status
Network Configuration
# Debian (Netplan) → Alpine (/etc/network/interfaces)
/etc/netplan/01-*.yaml → /etc/network/interfaces
netplan apply → Configure directly in interfaces
# Enable IPv6 persistently on Alpine:
# Add to /etc/network/interfaces:
# iface eth0 inet6 static
# address <IPv6_ADDRESS>
Troubleshooting
"apk command not found"
- This is Alpine Linux, not Debian
- Install packages with
apk addinstead ofapt-get install - Example:
apk add --no-cache curl wget
"IPv6 not persisting after reboot"
- IPv6 must be configured in
/etc/network/interfaces - The
verb_ip6()function handles this automatically - Verify:
cat /etc/network/interfaces
"Service won't start on Alpine"
- Alpine uses OpenRC, not systemd
- Use
rc-service nginx startinstead ofsystemctl start nginx - Enable service:
rc-update add nginx - Check logs:
/var/log/orrc-service nginx status
"Container too large"
- Alpine should be much smaller than Debian
- Verify using
apk add --no-cache(removes package cache) - Example:
apk add --no-cache nginx(notapk add nginx)
Related Documentation
- alpine-tools.func/ - Alpine tool installation
- install.func/ - Standard installation functions
- core.func/ - Utility functions
- error_handler.func/ - Error handling
- UPDATED_APP-install.md - Application script guide
Recent Updates
Version 2.0 (Dec 2025)
- ✅ Enhanced IPv6 persistence configuration
- ✅ Improved OpenRC service management
- ✅ Better apk error handling
- ✅ Added Alpine-specific best practices documentation
- ✅ Streamlined SSH setup for Alpine
Last Updated: December 2025 Maintainers: community-scripts team License: MIT