From 71f8049b55ee338109ab4a166523ccf899cead67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Sun, 26 Oct 2025 16:27:02 +0100 Subject: [PATCH] fix install on older systems --- npm_install.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/npm_install.py b/npm_install.py index 9023627..8d1329c 100644 --- a/npm_install.py +++ b/npm_install.py @@ -430,7 +430,6 @@ def setup_certbot_venv(venv_dir: Path = Path("/opt/certbot")): PYENV_ROOT = Path("/opt/npm/.pyenv") PYENV_OWNER = "npm" PYTHON_VERSION = "3.11.14" - PYENV_BIN_CANDIDATES = ["pyenv", "/usr/bin/pyenv", "/usr/lib/pyenv/bin/pyenv"] try: apt_try_install([ @@ -442,19 +441,38 @@ def setup_certbot_venv(venv_dir: Path = Path("/opt/certbot")): except Exception: run(["apt-get", "update"], check=False) run(["apt-get", "install", "-y", - "pyenv", "build-essential", "gcc", "make", "pkg-config", - "libssl-dev", "zlib1g-dev", "libbz2-dev", "libreadline-dev", - "libsqlite3-dev", "tk-dev", "libncursesw5-dev", "libgdbm-dev", - "libffi-dev", "uuid-dev", "liblzma-dev", "ca-certificates", "curl" + "build-essential", "gcc", "make", "pkg-config", + "libssl-dev", "zlib1g-dev", "libbz2-dev", "libreadline-dev", + "libsqlite3-dev", "tk-dev", "libncursesw5-dev", "libgdbm-dev", + "libffi-dev", "uuid-dev", "liblzma-dev", "ca-certificates", "curl", "git" ], check=False) Path("/opt/npm").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) - 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: - 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}"): run(["mkdir", "-p", str(PYENV_ROOT)])