fix install on older systems

This commit is contained in:
Mateusz Gruszczyński
2025-10-26 16:27:02 +01:00
parent a040f6d69e
commit 71f8049b55

View File

@@ -430,7 +430,6 @@ def setup_certbot_venv(venv_dir: Path = Path("/opt/certbot")):
PYENV_ROOT = Path("/opt/npm/.pyenv") PYENV_ROOT = Path("/opt/npm/.pyenv")
PYENV_OWNER = "npm" PYENV_OWNER = "npm"
PYTHON_VERSION = "3.11.14" PYTHON_VERSION = "3.11.14"
PYENV_BIN_CANDIDATES = ["pyenv", "/usr/bin/pyenv", "/usr/lib/pyenv/bin/pyenv"]
try: try:
apt_try_install([ apt_try_install([
@@ -442,19 +441,38 @@ def setup_certbot_venv(venv_dir: Path = Path("/opt/certbot")):
except Exception: except Exception:
run(["apt-get", "update"], check=False) run(["apt-get", "update"], check=False)
run(["apt-get", "install", "-y", run(["apt-get", "install", "-y",
"pyenv", "build-essential", "gcc", "make", "pkg-config", "build-essential", "gcc", "make", "pkg-config",
"libssl-dev", "zlib1g-dev", "libbz2-dev", "libreadline-dev", "libssl-dev", "zlib1g-dev", "libbz2-dev", "libreadline-dev",
"libsqlite3-dev", "tk-dev", "libncursesw5-dev", "libgdbm-dev", "libsqlite3-dev", "tk-dev", "libncursesw5-dev", "libgdbm-dev",
"libffi-dev", "uuid-dev", "liblzma-dev", "ca-certificates", "curl" "libffi-dev", "uuid-dev", "liblzma-dev", "ca-certificates", "curl", "git"
], check=False) ], check=False)
Path("/opt/npm").mkdir(parents=True, exist_ok=True) Path("/opt/npm").mkdir(parents=True, exist_ok=True)
PYENV_ROOT.mkdir(parents=True, exist_ok=True) PYENV_ROOT.mkdir(parents=True, exist_ok=True)
run(["chown", "-R", f"{PYENV_OWNER}:{PYENV_OWNER}", "/opt/npm"], check=False) run(["chown", "-R", f"{PYENV_OWNER}:{PYENV_OWNER}", "/opt/npm"], check=False)
pyenv_bin = next((c for c in PYENV_BIN_CANDIDATES if shutil.which(c)), None) with step(f"Ensuring pyenv is available at {PYENV_ROOT}"):
pyenv_bin_path = PYENV_ROOT / "bin" / "pyenv"
if not pyenv_bin_path.exists():
run([
"sudo", "-u", PYENV_OWNER, "bash", "-lc",
'if [ ! -x "/opt/npm/.pyenv/bin/pyenv" ]; then '
' command -v git >/dev/null 2>&1 || sudo apt-get install -y git; '
' git clone --depth=1 https://github.com/pyenv/pyenv.git /opt/npm/.pyenv; '
"fi"
])
PYENV_BIN_CANDIDATES = [
str(PYENV_ROOT / "bin" / "pyenv"),
"pyenv",
"/usr/bin/pyenv",
"/usr/lib/pyenv/bin/pyenv"
]
pyenv_bin = next((c for c in PYENV_BIN_CANDIDATES if shutil.which(c) or Path(c).exists()), None)
if not pyenv_bin: if not pyenv_bin:
raise RuntimeError("No 'pyenv' (try /usr/bin/pyenv or /usr/lib/pyenv/bin/pyenv).") raise RuntimeError("No 'pyenv' found even after git clone attempt.")
with step(f"Installing Python {PYTHON_VERSION} via pyenv into {PYENV_ROOT}"): with step(f"Installing Python {PYTHON_VERSION} via pyenv into {PYENV_ROOT}"):
run(["mkdir", "-p", str(PYENV_ROOT)]) run(["mkdir", "-p", str(PYENV_ROOT)])