#!/usr/bin/env bash # devpi installer — runs inside the LXC, called by ct/devpi.sh set -euo pipefail APP="devpi" LIB_URL="${LIB_URL:-https://gitea.luki-net.org/luki-net/proxmox-scripts/raw/branch/main/lib}" source <(curl -fsSL "$LIB_URL/install.func") DEVPI_USER="devpi" DEVPI_HOME="/opt/devpi" DEVPI_DATA="$DEVPI_HOME/data" DEVPI_VENV="$DEVPI_HOME/venv" DEVPI_HOST="0.0.0.0" DEVPI_PORT="3141" [[ "$EUID" -eq 0 ]] || { msg_err "Must run as root"; exit 1; } # ── packages + user + dirs ─────────────────────────────────────────────────── setup_base_apt python3 python3-venv python3-pip create_system_user "$DEVPI_USER" "$DEVPI_HOME" mkdir -p "$DEVPI_DATA" chown -R "$DEVPI_USER:$DEVPI_USER" "$DEVPI_HOME" # ── venv + devpi ───────────────────────────────────────────────────────────── if [[ ! -x "$DEVPI_VENV/bin/devpi-server" ]]; then msg_info "Creating venv at $DEVPI_VENV" runuser -u "$DEVPI_USER" -- python3 -m venv "$DEVPI_VENV" runuser -u "$DEVPI_USER" -- "$DEVPI_VENV/bin/pip" install --upgrade pip wheel >/dev/null msg_info "Installing devpi-server / devpi-web / devpi-client..." runuser -u "$DEVPI_USER" -- "$DEVPI_VENV/bin/pip" install \ devpi-server devpi-web devpi-client >/dev/null msg_ok "devpi installed" else msg_warn "venv already exists, skipping pip install" fi # ── init data dir ──────────────────────────────────────────────────────────── if [[ ! -f "$DEVPI_DATA/.serverversion" ]]; then msg_info "Initializing devpi data directory" runuser -u "$DEVPI_USER" -- "$DEVPI_VENV/bin/devpi-init" --serverdir "$DEVPI_DATA" msg_ok "devpi initialized" fi # ── systemd ────────────────────────────────────────────────────────────────── write_systemd_unit devpi "$(cat </dev/null runuser -u "$DEVPI_USER" -- "$DEVPI_VENV/bin/devpi" --clientdir "$CLIENT_DIR" login root --password='' >/dev/null runuser -u "$DEVPI_USER" -- "$DEVPI_VENV/bin/devpi" --clientdir "$CLIENT_DIR" user -m root "password=$DEVPI_ROOT_PW" >/dev/null rm -rf "$CLIENT_DIR" cat >"$CRED_FILE" <:$DEVPI_PORT Mirror index: http://:$DEVPI_PORT/root/pypi/+simple/ Web UI: http://:$DEVPI_PORT EOF chmod 600 "$CRED_FILE" msg_ok "Credentials written to $CRED_FILE" else msg_warn "$CRED_FILE already exists, leaving devpi root password unchanged" fi apt_cleanup msg_ok "$APP installation finished"