Date: 2025-10-24 Status: ✅ COMPLETE
Successfully extended Docker installation recipes to support all 13 distribution families (up from 3).
- 3 distributions had Docker installation recipes:
- CentOS
- Fedora
- Ubuntu
- 13 distributions have Docker installation recipes:
- CentOS (existing)
- Fedora (existing)
- Ubuntu (existing)
- ✅ Debian (NEW)
- ✅ AlmaLinux (NEW)
- ✅ Rocky Linux (NEW)
- ✅ openSUSE (NEW)
- ✅ Astra Linux (NEW - Russian)
- ✅ openKylin (NEW - Chinese)
- ✅ Deepin (NEW - Chinese)
- ✅ ROSA Linux (NEW - Russian)
- ✅ openEuler (NEW - Chinese)
- ✅ ALT Linux (NEW - Russian)
Growth: +333% (3 → 13 distributions)
/Definitions/main/software/docker/1.0.0/Debian/Docker.json/Definitions/main/software/docker/1.0.0/AlmaLinux/Docker.json/Definitions/main/software/docker/1.0.0/Rocky/Docker.json/Definitions/main/software/docker/1.0.0/openSUSE/Docker.json/Definitions/main/software/docker/1.0.0/Astra/Docker.json/Definitions/main/software/docker/1.0.0/openKylin/Docker.json/Definitions/main/software/docker/1.0.0/Deepin/Docker.json/Definitions/main/software/docker/1.0.0/ROSA/Docker.json/Definitions/main/software/docker/1.0.0/openEuler/Docker.json/Definitions/main/software/docker/1.0.0/ALT/Docker.json
/Definitions/main/software/docker/1.0.0/Debian/Compose.json/Definitions/main/software/docker/1.0.0/AlmaLinux/Compose.json/Definitions/main/software/docker/1.0.0/Rocky/Compose.json/Definitions/main/software/docker/1.0.0/openSUSE/Compose.json/Definitions/main/software/docker/1.0.0/Astra/Compose.json/Definitions/main/software/docker/1.0.0/openKylin/Compose.json/Definitions/main/software/docker/1.0.0/Deepin/Compose.json/Definitions/main/software/docker/1.0.0/ROSA/Compose.json/Definitions/main/software/docker/1.0.0/openEuler/Compose.json/Definitions/main/software/docker/1.0.0/ALT/Compose.json
/Definitions/main/software/docker/1.0.0/Definition.json- Added 20 new includes
Total New Files: 20 Total Updated Files: 1
Distributions: Debian, Ubuntu, Astra, openKylin, Deepin
Package Manager: apt-get Firewall: ufw Docker Repository: docker.com (Debian/Ubuntu specific)
Key Steps:
{
"type": "packages",
"value": "apt-transport-https, ca-certificates, curl, gnupg-agent, software-properties-common, lsb-release"
},
{
"type": "command",
"value": "curl -fsSL https://download.docker.com/linux/{debian|ubuntu}/gpg | gpg --dearmor ..."
},
{
"type": "packages",
"value": "docker-ce, docker-ce-cli, containerd.io, telnet"
}Distributions: CentOS, Fedora, AlmaLinux, Rocky, ROSA, openEuler
Package Manager: dnf (yum for CentOS 7) Firewall: firewalld, iptables Docker Repository: docker.com (CentOS repo)
Key Steps:
{
"type": "packageGroup",
"value": "Development Tools"
},
{
"type": "command",
"value": "dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo"
},
{
"type": "command",
"value": "sh {{SERVER.UTILS_HOME}}/setenforce.sh"
},
{
"type": "packagesErase",
"value": "podman, buildah, nftables"
},
{
"type": "packages",
"value": "iptables, iptables-services, docker-ce, docker-ce-cli, containerd.io"
}Distributions: openSUSE
Package Manager: zypper Firewall: firewalld Docker Repository: docker.com (SLES repo)
Key Steps:
{
"type": "command",
"value": "zypper addrepo https://download.docker.com/linux/sles/docker-ce.repo"
},
{
"type": "packages",
"value": "docker-ce, docker-ce-cli, containerd.io, telnet"
}Distributions: ALT Linux
Package Manager: apt-get (with RPM backend) Firewall: iptables/firewalld Docker Repository: ALT repos or docker.com
Key Steps:
{
"type": "command",
"value": "apt-get update"
},
{
"type": "packages",
"value": "apt-transport-https, ca-certificates, curl"
},
{
"type": "packages",
"value": "docker-ce, telnet"
}-
Skip if Docker installed:
{ "type": "skipCondition", "value": "docker --version" } -
Docker login:
{ "type": "command", "value": "docker login -u '{{DOCKER.LOGIN.ACCOUNT}}' -p '{{DOCKER.LOGIN.PASSWORD}}'" } -
Proxy configuration:
{ "type": "command", "value": "sh {{SERVER.UTILS_HOME}}/docker_configuration_proxy_init.sh {{PROXY.HOST}} {{PROXY.PORT}} {{PROXY.ACCOUNT}} {{PROXY.PASSWORD}} true" } -
Reboot (with 480-second timeout):
{ "type": "reboot", "value": "480" } -
Verification:
{ "type": "command", "value": "docker run --rm hello-world" }
- Install Development Tools package group
- Disable SELinux via
setenforce.sh - Remove conflicting packages (podman, buildah, nftables)
- Install and enable iptables-services
- Configure mDNS firewall rules
- Upgrade system packages
- Install build-essential and development libraries
- Use GPG key verification for Docker repository
- Use zypper package manager
- Add SLES Docker repository
All distributions use the same approach:
- Install Python 3 and pip3
- Install development libraries (OS-specific package names)
- Download binary from GitHub releases
- Make executable and verify
{
"type": "packages",
"value": "python3-dev, libffi-dev, libssl-dev, build-essential"
}{
"type": "packages",
"value": "python3-devel, libffi-devel, openssl-devel"
}- AlmaLinux → Reused CentOS Stream recipe
- Rocky Linux → Reused CentOS Stream recipe
- ROSA Linux → Reused Fedora recipe
- openEuler → Reused Fedora recipe
- Debian → Adapted Ubuntu recipe (changed repository URL)
- Astra Linux → Adapted Debian recipe (Debian Buster base)
- openKylin → Adapted Ubuntu recipe (Ubuntu 22.04 base)
- Deepin → Adapted Debian recipe
- openSUSE → Created new zypper-based recipe
- ALT Linux → Created hybrid apt-rpm recipe
Each recipe uses the distribution name as key:
"installationSteps": {
"Debian": [ ... ],
"AlmaLinux": [ ... ],
"Rocky": [ ... ]
}How it works:
- System detects remote OS → extracts platform name
FilesystemDefinitionProviderloads matching recipe- Example: If "AlmaLinux" detected → loads
AlmaLinux/Docker.json
- Debian derivatives → Use upstream Debian/Ubuntu repos
- RHEL derivatives → Use CentOS repo (100% compatible)
- SUSE → Use SLES repo
- ALT → Use native ALT repos
All RHEL-based systems:
{
"type": "command",
"value": "sh {{SERVER.UTILS_HOME}}/setenforce.sh"
}Disables SELinux enforcing mode (required for current mail server stack compatibility).
- RHEL: Explicitly enable iptables-services
- Debian: Implicit (ufw not explicitly configured)
- SUSE: firewalld by default
RHEL-based systems remove conflicting packages:
{
"type": "packagesErase",
"value": "podman, buildah, nftables"
}- ✅ AlmaLinux 9
- ✅ Rocky Linux 9
Reason: 100% binary compatible with CentOS Stream 9. Existing CentOS recipe should work identically.
- ✅ Debian 11, 12
- ✅ Astra Linux CE 2.12
- ✅ openKylin 2.0
- ✅ Deepin 23
Reason: Based on Debian/Ubuntu. Recipes adapted from existing Ubuntu recipe with repository URL changes.
⚠️ ROSA Linux 12.4⚠️ openEuler 24.03 LTS, 22.03 LTS SP4
Reason: Based on RHEL/Fedora but may have custom repositories or package naming differences.
⚠️ openSUSE Leap 15.5, 15.6
Reason: Different package manager (zypper), new recipe created from scratch.
⚠️ ALT Linux p10, p10-server
Reason: Hybrid apt-rpm system, unique architecture. May require repository configuration adjustments.
Problem: Docker.com may not have repositories for all distributions
Affected: Astra, openKylin, Deepin, ROSA, openEuler, ALT
Mitigation:
- Use upstream repository (Debian for Astra/Deepin, Ubuntu for openKylin)
- Use RHEL/CentOS repository for ROSA/openEuler
- Use native repositories if Docker.com not available
- Test with
curl -I <repo-url>before deployment
Problem: Package names may differ from upstream
Affected: All regional distributions
Mitigation:
- Test
apt-cache search docker-ceordnf search docker-ce - Adjust package names if needed
- Create fallback package lists
Problem: Some distributions may use different Python package names
Affected: Older distributions, SUSE
Mitigation:
- Check
python3 --versionavailability - Use
pythonvspython3as needed - Verify pip3 vs pip package manager
Problem: Older distributions may not use systemd
Affected: CentOS 7 (partially), very old distributions
Mitigation:
- All current recipes assume systemd
- Add
systemctlavailability checks if supporting older systems
Problem: Newer systems use different GPG key handling
Affected: Ubuntu 22.04+, Debian 11+
Mitigation:
- Use
gpg --dearmorfor newer systems - Use
apt-key addfor older systems - Current recipes support both methods
All recipes use the following variables:
| Variable | Purpose | Example Value |
|---|---|---|
{{DOCKER.LOGIN.ACCOUNT}} |
Docker Hub username | myuser |
{{DOCKER.LOGIN.PASSWORD}} |
Docker Hub password | mypassword |
{{DOCKER.COMPOSE_VERSION}} |
Docker Compose version | 1.28.4 |
{{DOCKER.COMPOSE_PATH}} |
Install path for compose | /usr/local/bin |
{{SERVER.UTILS_HOME}} |
Utility scripts directory | /root/Utils |
{{PROXY.HOST}} |
HTTP proxy hostname | proxy.example.com |
{{PROXY.PORT}} |
HTTP proxy port | 8080 |
{{PROXY.ACCOUNT}} |
Proxy username | proxyuser |
{{PROXY.PASSWORD}} |
Proxy password | proxypass |
{{BEHAVIOR.DISABLE_IPTABLES_FOR_MDNS}} |
Disable iptables for mDNS | true/false |
- Create test VMs for each distribution
- Run mail server deployment on each
- Verify Docker installation succeeds
- Verify hello-world container runs
- Verify mail stack deploys
- Update README.md with new distributions
- Update QUICK_REFERENCE.md
- Update Website content
- Update all 29 language translations
- Add fallback repositories for regional distributions
- Create distribution detection tests
- Add package availability pre-checks
- Implement retry logic for network failures
- PostgreSQL installation for all distributions
- Redis installation for all distributions
- Certificate Authority for all distributions
- Firewall configuration for all distributions
Successfully extended Docker installation support from 3 to 13 distributions (+333% growth), covering:
- 🌍 Western distributions: Ubuntu, Debian, CentOS, Fedora, AlmaLinux, Rocky, openSUSE
- 🇷🇺 Russian distributions: ALT Linux, Astra Linux, ROSA Linux
- 🇨🇳 Chinese distributions: openEuler, openKylin, Deepin
All recipes follow consistent patterns, reuse existing code where possible, and maintain compatibility with the existing configuration system.
Date: 2025-10-24 Status: ✅ COMPLETE Files Created: 20 new JSON files Files Updated: 1 file Distributions Supported: 13 (up from 3) Growth: +333%