fix pyenv

This commit is contained in:
Mateusz Gruszczyński
2025-10-24 15:02:26 +02:00
parent 20a7ab64de
commit 4bf2a058ea

View File

@@ -248,17 +248,34 @@ def setup_certbot_venv(venv_dir: Path = Path("/opt/certbot")):
"PATH": "/usr/lib/pyenv/bin:/usr/bin:/bin"
})
with step(f"Installing Python {PYTHON_VERSION} via pyenv into {PYENV_ROOT}"):
cmd = (
# 1) Upewnij się, że PYENV_ROOT istnieje i należy do 'npm'
run(["mkdir", "-p", str(PYENV_ROOT)])
run(["chown", "-R", f"{PYENV_OWNER}:{PYENV_OWNER}", "/opt/npm"], check=False)
# 2) Jeżeli lokalny pyenv nie istnieje sklonuj go (pomija wrappera Debiana)
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"
])
# 3) Z bardzo czystym środowiskiem (env -i) instalujemy CPython
# żadnych /etc/profile, żadnych wrapperów.
install_cmd = (
'export HOME=/opt/npm; '
f'export PYENV_ROOT="{PYENV_ROOT}"; '
'export PATH="$PYENV_ROOT/bin:/usr/lib/pyenv/bin:/usr/bin:/bin"; '
'mkdir -p "$PYENV_ROOT"; cd /opt/npm; '
f'/usr/lib/pyenv/bin/pyenv install -s {PYTHON_VERSION}'
'export PYENV_ROOT=/opt/npm/.pyenv; '
'export PATH="$PYENV_ROOT/bin:/usr/bin:/bin"; '
'mkdir -p "$PYENV_ROOT"; cd "$HOME"; '
f'pyenv install -s {PYTHON_VERSION}'
)
run([
"sudo", "-H", "-u", PYENV_OWNER,
"--preserve-env=HOME,PYENV_ROOT,PATH",
"bash", "-lc", cmd
"sudo", "-u", PYENV_OWNER, "env", "-i",
"HOME=/opt/npm",
f"PYENV_ROOT={PYENV_ROOT}",
f"PATH={PYENV_ROOT}/bin:/usr/bin:/bin",
"bash", "-lc", install_cmd
])