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.
7.9 KiB
tools.func Documentation
Overview
The tools.func file provides a comprehensive collection of helper functions for robust package management, repository management, and tool installation in Debian/Ubuntu-based systems. It is the central hub for installing services, databases, programming languages, and development tools in containers.
Purpose and Use Cases
- Package Management: Robust APT/DPKG operations with retry logic
- Repository Setup: Prepare and configure package repositories safely
- Tool Installation: Install 30+ tools (Node.js, PHP, databases, etc.)
- Dependency Handling: Manage complex installation workflows
- Error Recovery: Automatic recovery from network failures
Quick Reference
Key Function Groups
- Package Helpers:
pkg_install(),pkg_update(),pkg_remove()- APT operations with retry - Repository Setup:
setup_deb822_repo()- Modern repository configuration - Tool Installation:
setup_nodejs(),setup_php(),setup_mariadb(), etc. - 30+ tool functions - System Utilities:
disable_wait_online(),customize()- System optimization - Container Setup:
setting_up_container(),motd_ssh()- Container initialization
Dependencies
- External:
curl,wget,apt-get,gpg - Internal: Uses functions from
core.func,install.func,error_handler.func
Integration Points
- Used by: All install scripts for dependency installation
- Uses: Environment variables from build.func and core.func
- Provides: Tool installation, package management, and repository services
Documentation Files
📊 TOOLS_FUNC_FLOWCHART.md
Visual execution flows showing package management, tool installation, and repository setup workflows.
📚 TOOLS_FUNC_FUNCTIONS_REFERENCE.md
Complete alphabetical reference of all 30+ functions with parameters, dependencies, and usage details.
💡 TOOLS_FUNC_USAGE_EXAMPLES.md
Practical examples showing how to use tool installation functions and common patterns.
🔗 TOOLS_FUNC_INTEGRATION.md
How tools.func integrates with other components and provides package/tool services.
🔧 TOOLS_FUNC_ENVIRONMENT_VARIABLES.md
Complete reference of environment variables and configuration options.
Key Features
Robust Package Management
- Automatic Retry Logic: 3 attempts with backoff for transient failures
- Silent Mode: Suppress output with
$STDvariable - Error Recovery: Automatic cleanup of broken packages
- Atomic Operations: Ensure consistent state even on failure
Tool Installation Coverage
- Node.js Ecosystem: Node.js, npm, yarn, pnpm
- PHP Stack: PHP-FPM, PHP-CLI, Composer
- Databases: MariaDB, PostgreSQL, MongoDB
- Development Tools: Git, build-essential, Docker
- Monitoring: Grafana, Prometheus, Telegraf
- And 20+ more...
Repository Management
- Deb822 Format: Modern standardized repository format
- Keyring Handling: Automatic GPG key management
- Cleanup: Removes legacy repositories and keyrings
- Validation: Verifies repository accessibility before use
Common Usage Patterns
Installing a Tool
setup_nodejs "20" # Install Node.js v20
setup_php "8.2" # Install PHP 8.2
setup_mariadb "11" # Install MariaDB 11
Safe Package Operations
pkg_update # Update package lists with retry
pkg_install curl wget # Install packages safely
pkg_remove old-tool # Remove package cleanly
Setting Up Repositories
setup_deb822_repo "ppa:example/ppa" "example-app" "jammy" "http://example.com" "release"
Function Categories
🔹 Core Package Functions
pkg_install()- Install packages with retry logicpkg_update()- Update package lists safelypkg_remove()- Remove packages completely
🔹 Repository Functions
setup_deb822_repo()- Add repository in deb822 formatcleanup_repo_metadata()- Clean GPG keys and old reposcheck_repository()- Verify repository is accessible
🔹 Tool Installation Functions (30+)
Programming Languages:
setup_nodejs()- Node.js with npmsetup_php()- PHP-FPM and CLIsetup_python()- Python 3 with pipsetup_ruby()- Ruby with gemsetup_golang()- Go programming language
Databases:
setup_mariadb()- MariaDB serversetup_postgresql()- PostgreSQL databasesetup_mongodb()- MongoDB NoSQLsetup_redis()- Redis cache
Web Servers & Proxies:
setup_nginx()- Nginx web serversetup_apache()- Apache HTTP serversetup_caddy()- Caddy web serversetup_traefik()- Traefik reverse proxy
Containers & Virtualization:
setup_docker()- Docker container runtimesetup_podman()- Podman container runtime
Development & System Tools:
setup_git()- Git version controlsetup_docker_compose()- Docker Composesetup_composer()- PHP dependency managersetup_build_tools()- C/C++ compilation tools
Monitoring & Logging:
setup_grafana()- Grafana dashboardssetup_prometheus()- Prometheus monitoringsetup_telegraf()- Telegraf metrics collector
🔹 System Configuration Functions
setting_up_container()- Container initialization messagenetwork_check()- Verify network connectivityupdate_os()- Update OS packages safelycustomize()- Apply container customizationsmotd_ssh()- Configure SSH and MOTDcleanup_lxc()- Final container cleanup
Best Practices
✅ DO
- Use
$STDto suppress output in production scripts - Chain multiple tool installations together
- Check for tool availability before using
- Use version parameters when available
- Test new repositories before production use
❌ DON'T
- Mix package managers (apt and apk in same script)
- Hardcode tool versions directly
- Skip error checking on package operations
- Use
apt-get install -ywithout$STD - Leave temporary files after installation
Recent Updates
Version 2.0 (Dec 2025)
- ✅ Added
setup_deb822_repo()for modern repository format - ✅ Improved error handling with automatic cleanup
- ✅ Added 5 new tool installation functions
- ✅ Enhanced package retry logic with backoff
- ✅ Standardized tool version handling
Integration with Other Functions
tools.func
├── Uses: core.func (messaging, colors)
├── Uses: error_handler.func (exit codes, trapping)
├── Uses: install.func (network_check, update_os)
│
└── Used by: All install/*.sh scripts
├── For: Package installation
├── For: Tool setup
└── For: Repository management
Troubleshooting
"Package manager is locked"
# Wait for apt lock to release
sleep 10
pkg_update
"GPG key not found"
# Repository setup will handle this automatically
# If manual fix needed:
cleanup_repo_metadata
setup_deb822_repo ...
"Tool installation failed"
# Enable verbose output
export var_verbose="yes"
setup_nodejs "20"
Contributing
When adding new tool installation functions:
- Follow the
setup_TOOLNAME()naming convention - Accept version as first parameter
- Check if tool already installed
- Use
$STDfor output suppression - Set version file:
/opt/TOOLNAME_version.txt - Document in TOOLS_FUNC_FUNCTIONS_REFERENCE.md
Related Documentation
- build.func/ - Container creation orchestrator
- core.func/ - Utility functions and messaging
- install.func/ - Installation workflow management
- error_handler.func/ - Error handling and recovery
- UPDATED_APP-install.md - Application script guide
Last Updated: December 2025 Maintainers: community-scripts team License: MIT