fix pyenv
This commit is contained in:
@@ -215,10 +215,11 @@ 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.11"
|
PYTHON_VERSION = "3.11.11"
|
||||||
|
PYENV_BIN_CANDIDATES = ["pyenv", "/usr/bin/pyenv", "/usr/lib/pyenv/bin/pyenv"]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
apt_try_install([
|
apt_try_install([
|
||||||
"git", "build-essential", "gcc", "make", "pkg-config",
|
"pyenv", "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"
|
||||||
@@ -226,7 +227,7 @@ 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",
|
||||||
"git", "build-essential", "gcc", "make", "pkg-config",
|
"pyenv", "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"
|
||||||
@@ -236,43 +237,42 @@ def setup_certbot_venv(venv_dir: Path = Path("/opt/certbot")):
|
|||||||
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)
|
||||||
|
|
||||||
upstream_pyenv_bin = PYENV_ROOT / "bin" / "pyenv"
|
pyenv_bin = next((c for c in PYENV_BIN_CANDIDATES if shutil.which(c)), None)
|
||||||
if not upstream_pyenv_bin.exists():
|
if not pyenv_bin:
|
||||||
with step(f"Cloning upstream pyenv into {PYENV_ROOT}"):
|
raise RuntimeError("Nie znaleziono 'pyenv' (spróbuj /usr/bin/pyenv lub /usr/lib/pyenv/bin/pyenv).")
|
||||||
run([
|
|
||||||
"sudo", "-u", PYENV_OWNER, "-H",
|
|
||||||
"env", f"HOME=/opt/npm", f"PYENV_ROOT={PYENV_ROOT}",
|
|
||||||
"bash", "-lc",
|
|
||||||
f'git clone --depth=1 https://github.com/pyenv/pyenv.git "{PYENV_ROOT}"'
|
|
||||||
])
|
|
||||||
run(["chown", "-R", f"{PYENV_OWNER}:{PYENV_OWNER}", str(PYENV_ROOT)], check=False)
|
|
||||||
|
|
||||||
env_pyenv = os.environ.copy()
|
env_pyenv = os.environ.copy()
|
||||||
env_pyenv.update({
|
env_pyenv.update({
|
||||||
"HOME": "/opt/npm",
|
"HOME": "/opt/npm",
|
||||||
"PYENV_ROOT": str(PYENV_ROOT),
|
"PYENV_ROOT": str(PYENV_ROOT),
|
||||||
"PATH": f"{PYENV_ROOT}/bin:/usr/bin:/bin"
|
"PATH": "/usr/lib/pyenv/bin:/usr/bin:/bin"
|
||||||
})
|
})
|
||||||
with step(f"Installing Python {PYTHON_VERSION} via upstream pyenv into {PYENV_ROOT}"):
|
with step(f"Installing Python {PYTHON_VERSION} via pyenv into {PYENV_ROOT}"):
|
||||||
run([
|
run([
|
||||||
"sudo", "-u", PYENV_OWNER, "-H",
|
"sudo", "-u", PYENV_OWNER, "-s",
|
||||||
"env",
|
"env",
|
||||||
f"HOME={env_pyenv['HOME']}",
|
f"HOME={env_pyenv['HOME']}",
|
||||||
f"PYENV_ROOT={env_pyenv['PYENV_ROOT']}",
|
f"PYENV_ROOT={env_pyenv['PYENV_ROOT']}",
|
||||||
f"PATH={env_pyenv['PATH']}",
|
f"PATH={env_pyenv['PATH']}",
|
||||||
"bash", "-lc",
|
"bash", "-lc",
|
||||||
f'"{upstream_pyenv_bin}" install -s {PYTHON_VERSION}'
|
f'cd /opt/npm && "{pyenv_bin}" install -s {PYTHON_VERSION}'
|
||||||
], env=env_pyenv)
|
], env=env_pyenv)
|
||||||
|
|
||||||
profile_snippet = f"""# Auto-generated by setup_certbot_venv
|
profile_snippet = f"""# Auto-generated by setup_certbot_venv
|
||||||
# Ustawienia pyenv dla uzytkownika '{PYENV_OWNER}'
|
# Ustawienia pyenv dla uzytkownika '{PYENV_OWNER}'
|
||||||
if [ -d "{PYENV_ROOT}" ]; then
|
if [ -d "{PYENV_ROOT}" ]; then
|
||||||
export PYENV_ROOT="{PYENV_ROOT}"
|
export PYENV_ROOT="{PYENV_ROOT}"
|
||||||
|
# Dopnij lokalne binarki pyenv (git-install) idempotentnie
|
||||||
case ":$PATH:" in *":$PYENV_ROOT/bin:"*) ;; *) PATH="$PYENV_ROOT/bin:$PATH";; esac
|
case ":$PATH:" in *":$PYENV_ROOT/bin:"*) ;; *) PATH="$PYENV_ROOT/bin:$PATH";; esac
|
||||||
|
# Dopnij systemowe binarki pyenv z pakietu Debiana idempotentnie
|
||||||
|
case ":$PATH:" in *":/usr/lib/pyenv/bin:"*) ;; *) PATH="/usr/lib/pyenv/bin:$PATH";; esac
|
||||||
export PATH
|
export PATH
|
||||||
|
# Inicjalizacja tylko dla interaktywnych powlok uzytkownika '{PYENV_OWNER}'
|
||||||
case "$-" in *i*) _interactive=1 ;; *) _interactive=0 ;; esac
|
case "$-" in *i*) _interactive=1 ;; *) _interactive=0 ;; esac
|
||||||
if [ "$_interactive" = 1 ] && {{ [ "${{USER:-}}" = "{PYENV_OWNER}" ] || [ "${{SUDO_USER:-}}" = "{PYENV_OWNER}" ]; }}; then
|
if [ "$_interactive" = 1 ] && {{ [ "${{USER:-}}" = "{PYENV_OWNER}" ] || [ "${{SUDO_USER:-}}" = "{PYENV_OWNER}" ]; }}; then
|
||||||
if [ -x "{PYENV_ROOT}/bin/pyenv" ]; then
|
if command -v pyenv >/dev/null 2>&1; then
|
||||||
|
eval "$(pyenv init -)"
|
||||||
|
elif [ -x "{PYENV_ROOT}/bin/pyenv" ]; then
|
||||||
eval "$("{PYENV_ROOT}/bin/pyenv" init -)"
|
eval "$("{PYENV_ROOT}/bin/pyenv" init -)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -318,6 +318,7 @@ fi
|
|||||||
run(["chown", "-R", f"{PYENV_OWNER}:{PYENV_OWNER}", str(PYENV_ROOT)], check=False)
|
run(["chown", "-R", f"{PYENV_OWNER}:{PYENV_OWNER}", str(PYENV_ROOT)], check=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def configure_letsencrypt():
|
def configure_letsencrypt():
|
||||||
with step("configure letsencrypt"):
|
with step("configure letsencrypt"):
|
||||||
run(["chown", "-R", "npm:npm", "/opt/certbot"], check=False)
|
run(["chown", "-R", "npm:npm", "/opt/certbot"], check=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user