Files
Juan Denis ab27c7b058 fix(distro): patch all 6 failing distro-compatibility probes
- Harness: bootstrap find/awk in distro-compatibility.py (AL2023,
  Tumbleweed, SLES BCI minimal images lack them; the source-level
  suites legitimately use both)
- Python gate 3.11-3.14: Arch/Manjaro rolling ship only python 3.14
  with no versioned fallback packages (same trap as Debian 13/#99);
  align scripts/update.sh, which had drifted to a 3.11-3.12 gate
- Gentoo: add emerge as a supported installer package-manager path
  (install.sh, scripts/lib/pkg.sh, distro.py family, deps manifest);
  provision via slotted dev-lang/python:3.13 -> 3.12
- Tests: move out-of-range stubs above the new ceiling, shadow all
  locate_python candidate names (real python3.14/3.13 in Manjaro/
  Gentoo images were winning over fixtures), cover the 7th manager
- Catalog: Gentoo is no longer a documented expected failure

Verified: test_lib 32/32, test_install 124/124, test_update 76/76,
pytest test_serverkit_installer 46/46, and all 6 previously failing
images now pass both quick and provision container probes (12/12).
2026-08-28 23:31:36 -04:00

104 lines
4.8 KiB
YAML

# ServerKit dependency manifest
# ============================================================================
# Declarative source of truth for the per-distro-family packages ServerKit
# needs. The selector key is the OS *family* (derived from /etc/os-release `ID`,
# falling back to `ID_LIKE`):
#
# debian → Debian, Ubuntu, Linux Mint, Pop!_OS, Raspbian, …
# rhel → RHEL, Rocky, AlmaLinux, CentOS, Oracle Linux, …
# fedora → Fedora (kept distinct from rhel only for the Docker repo URL)
# suse → openSUSE Leap/Tumbleweed, SLES/SLED
# arch → Arch, Manjaro, EndeavourOS (community-supported, best-effort)
# alpine → Alpine (community-supported, best-effort)
# gentoo → Gentoo, Funtoo (community-supported, best-effort)
#
# WHO READS THIS
# --------------
# The Python bootstrap (backend/serverkit_installer, see the hardening plan §8)
# parses this file directly with PyYAML and installs accordingly. The bash
# installer (install.sh) cannot parse YAML before Python itself is installed
# (chicken-and-egg), so it mirrors these choices in its own inline logic — keep
# the two in sync when editing. This file is therefore both the spec and the
# documentation of what "supported distro" actually means.
#
# Python policy (Goal G2): accept 3.11 through 3.14, prefer the distro package
# over a source compile. Debian 12 ships 3.11; Ubuntu 24.04 and Fedora 40 ship
# 3.12; Debian 13 ships only 3.13; Arch/Manjaro rolling ship only 3.14; RHEL 9
# has 3.11 (and 3.12 on 9.4+) via CRB/EPEL; openSUSE Leap ships python311.
python:
debian:
package: python3.11
venv_package: python3.11-venv
dev_package: python3.11-dev
ubuntu:
package: python3.12
venv_package: python3.12-venv
dev_package: python3.12-dev
# Older Ubuntu without 3.12 in the main repo falls back to this PPA.
fallback_ppa: ppa:deadsnakes/ppa
rhel:
package: python3.12
fallback_package: python3.11
dev_package: python3.12-devel
repos: [crb, epel]
fedora:
package: python3.12
fallback_package: python3.11
dev_package: python3.12-devel
suse:
package: python311
dev_package: python311-devel
arch:
package: python # rolling; tracks the newest line the gate covers
alpine:
package: python3
dev_package: python3-dev
gentoo:
package: "dev-lang/python:3.13" # portage slot; parallel-installable
fallback_package: "dev-lang/python:3.12"
node:
# Node 18 is the floor for the Vite build. Distro nodejs on supported targets
# already meets it; NodeSource 20 is the fallback when it doesn't.
debian: { method: distro, package: nodejs, npm_package: npm, fallback: nodesource_20 }
ubuntu: { method: distro, package: nodejs, npm_package: npm, fallback: nodesource_20 }
rhel: { method: distro, package: nodejs, fallback: nodesource_20 }
fedora: { method: distro, package: nodejs, fallback: nodesource_20 }
suse: { method: distro, package: nodejs20, npm_package: npm20 }
arch: { method: distro, package: nodejs, npm_package: npm }
alpine: { method: distro, package: nodejs, npm_package: npm }
gentoo: { method: distro, package: net-libs/nodejs }
docker:
debian: { method: get.docker.com }
ubuntu: { method: get.docker.com }
rhel: { method: repo, repo_url: "https://download.docker.com/linux/rhel/docker-ce.repo",
packages: [docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin, docker-buildx-plugin] }
fedora: { method: repo, repo_url: "https://download.docker.com/linux/fedora/docker-ce.repo",
packages: [docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin, docker-buildx-plugin] }
suse: { method: distro, packages: [docker, docker-compose] }
arch: { method: distro, packages: [docker, docker-compose] }
alpine: { method: distro, packages: [docker, docker-cli-compose] }
gentoo: { method: distro, packages: [app-containers/docker, app-containers/docker-cli, app-containers/docker-compose] }
base_packages:
debian: [git, curl, nginx, sqlite3, ca-certificates, openssl]
rhel: [git, curl, nginx, sqlite, ca-certificates, openssl]
fedora: [git, curl, nginx, sqlite, ca-certificates, openssl]
suse: [git, curl, nginx, sqlite3, ca-certificates, openssl]
arch: [git, curl, nginx, sqlite, ca-certificates, openssl]
alpine: [git, curl, nginx, sqlite, ca-certificates, openssl]
gentoo: [dev-vcs/git, net-misc/curl, www-servers/nginx, dev-db/sqlite, app-misc/ca-certificates, dev-libs/openssl]
# Package-manager + init-system per family, mirrored by scripts/lib/pkg.sh and
# scripts/lib/init.sh (which detect at runtime rather than reading this).
package_manager:
debian: apt
rhel: dnf # yum on EL7
fedora: dnf
suse: zypper
arch: pacman
alpine: apk
gentoo: emerge