fix pyenv
This commit is contained in:
@@ -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
|
||||
])
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user