mirror of
https://github.com/andrey271192/keenetic_ssh-web.git
synced 2026-09-20 14:42:01 +00:00
install: фолбэк pip --target=lib, если в python3 нет venv
На многих сборках Entware (включая aarch64-k3.10) пакет python3-venv недоступен и `python3 -m venv` падает с `No module named venv`. Делаем установку без venv: - если venv создаётся — используем его (как раньше) - иначе ставим зависимости в $INST/lib через `pip install --target=lib` - run.sh и init-скрипт автоопределяют режим (PYTHONPATH=lib для второго) Также: opkg install python3-venv стал опциональным (как и был, но без обязательного завершения цепочки).
This commit is contained in:
@@ -73,9 +73,9 @@ chmod +x install.sh uninstall.sh run.sh bootstrap.sh
|
|||||||
Скрипт:
|
Скрипт:
|
||||||
|
|
||||||
- копирует файлы в **`/opt/share/keenetic_ssh-web`**
|
- копирует файлы в **`/opt/share/keenetic_ssh-web`**
|
||||||
- создаёт **`venv`**, ставит **Flask** и **Waitress**
|
- ставит **Flask** и **Waitress**: предпочтительно в `venv/`; если модуль `venv` в Python отсутствует (типично для `aarch64-k3.10`), то — в локальный `lib/` через `pip install --target`
|
||||||
- создаёт **`data/store.json`** и **`.env`** из примеров
|
- создаёт **`data/store.json`** и **`.env`** из примеров
|
||||||
- устанавливает **`/opt/etc/init.d/S99keenetic-ssh-web`**
|
- устанавливает **`/opt/etc/init.d/S99keenetic-ssh-web`** (автоопределяет venv/lib режим)
|
||||||
|
|
||||||
### Первый запуск
|
### Первый запуск
|
||||||
|
|
||||||
|
|||||||
50
install.sh
50
install.sh
@@ -25,20 +25,42 @@ fi
|
|||||||
|
|
||||||
chmod +x "$INST/run.sh"
|
chmod +x "$INST/run.sh"
|
||||||
|
|
||||||
echo "==> Entware: python3 + venv"
|
echo "==> Entware: python3 + pip"
|
||||||
if command -v opkg >/dev/null 2>&1; then
|
if command -v opkg >/dev/null 2>&1; then
|
||||||
opkg update || echo "(opkg update: частичные ошибки источников — продолжаем)"
|
opkg update || echo "(opkg update: частичные ошибки источников — продолжаем)"
|
||||||
opkg install python3 python3-pip python3-light python3-venv >/dev/null 2>&1 \
|
# python3 + pip обязательны; python3-venv — желателен, но в некоторых сборках отсутствует
|
||||||
|| opkg install python3 python3-pip >/dev/null 2>&1 \
|
opkg install python3 python3-pip >/dev/null 2>&1 || true
|
||||||
|| echo "(opkg install python3: пропуск — пакеты возможно уже стоят)"
|
opkg install python3-venv python3-light >/dev/null 2>&1 || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$INST"
|
cd "$INST"
|
||||||
if [ ! -x venv/bin/python3 ]; then
|
|
||||||
"$PY" -m venv venv || { echo "Не удалось создать venv. Установите: opkg install python3-venv"; exit 1; }
|
# 1) пробуем venv
|
||||||
|
USE_VENV=0
|
||||||
|
if [ -x venv/bin/python3 ]; then
|
||||||
|
USE_VENV=1
|
||||||
|
elif "$PY" -m venv venv >/tmp/kssh-venv.log 2>&1; then
|
||||||
|
USE_VENV=1
|
||||||
|
echo "==> venv: $INST/venv"
|
||||||
|
else
|
||||||
|
echo "==> venv недоступен (нет модуля venv в python3) — ставим зависимости в $INST/lib"
|
||||||
|
rm -rf venv
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$USE_VENV" = "1" ]; then
|
||||||
|
./venv/bin/pip install -q --upgrade pip 2>/dev/null || true
|
||||||
|
./venv/bin/pip install -q -r requirements.txt
|
||||||
|
else
|
||||||
|
# 2) фолбэк: pip install --target=lib (без venv, рабочий путь для старых Entware)
|
||||||
|
if ! "$PY" -m pip --version >/dev/null 2>&1; then
|
||||||
|
echo "ОШИБКА: ни venv, ни pip недоступны. Установите вручную: opkg install python3-pip"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm -rf lib
|
||||||
|
mkdir -p lib
|
||||||
|
"$PY" -m pip install -q --target=lib --upgrade pip 2>/dev/null || true
|
||||||
|
"$PY" -m pip install -q --target=lib -r requirements.txt
|
||||||
fi
|
fi
|
||||||
./venv/bin/pip install -q --upgrade pip
|
|
||||||
./venv/bin/pip install -q -r requirements.txt
|
|
||||||
|
|
||||||
INIT="/opt/etc/init.d/S99keenetic-ssh-web"
|
INIT="/opt/etc/init.d/S99keenetic-ssh-web"
|
||||||
echo "==> Init-скрипт $INIT"
|
echo "==> Init-скрипт $INIT"
|
||||||
@@ -60,14 +82,22 @@ case "$1" in
|
|||||||
echo "already running"
|
echo "already running"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
[ -x "$DIR/venv/bin/python3" ] || { echo "no venv in $DIR"; exit 1; }
|
|
||||||
cd "$DIR" || exit 1
|
cd "$DIR" || exit 1
|
||||||
|
if [ -x "$DIR/venv/bin/python3" ]; then
|
||||||
|
PYBIN="$DIR/venv/bin/python3"
|
||||||
|
elif [ -d "$DIR/lib" ] && [ -x /opt/bin/python3 ]; then
|
||||||
|
PYBIN="/opt/bin/python3"
|
||||||
|
export PYTHONPATH="$DIR/lib:${PYTHONPATH:-}"
|
||||||
|
else
|
||||||
|
echo "Нет ни $DIR/venv, ни $DIR/lib — установите заново: $DIR/install.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
set -a
|
set -a
|
||||||
[ -f .env ] && . ./.env
|
[ -f .env ] && . ./.env
|
||||||
set +a
|
set +a
|
||||||
export PYTHONUNBUFFERED=1
|
export PYTHONUNBUFFERED=1
|
||||||
PORT="${PORT:-2001}"
|
PORT="${PORT:-2001}"
|
||||||
nohup "$DIR/venv/bin/python3" -m waitress --listen="0.0.0.0:$PORT" app:app \
|
nohup "$PYBIN" -m waitress --listen="0.0.0.0:$PORT" app:app \
|
||||||
>>/opt/var/log/keenetic-ssh-web.log 2>&1 &
|
>>/opt/var/log/keenetic-ssh-web.log 2>&1 &
|
||||||
echo $! > "$PID"
|
echo $! > "$PID"
|
||||||
echo "keenetic_ssh-web started pid=$(cat "$PID") port=$PORT"
|
echo "keenetic_ssh-web started pid=$(cat "$PID") port=$PORT"
|
||||||
|
|||||||
22
run.sh
22
run.sh
@@ -1,8 +1,24 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Запуск через Waitress (рекомендуется на роутере)
|
# Запуск через Waitress (рекомендуется на роутере). Поддерживает оба режима:
|
||||||
cd "$(dirname "$0")" || exit 1
|
# - venv: $DIR/venv/bin/python3
|
||||||
|
# - lib/: /opt/bin/python3 + PYTHONPATH=$DIR/lib (если venv недоступен)
|
||||||
|
DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
cd "$DIR" || exit 1
|
||||||
set -a
|
set -a
|
||||||
[ -f .env ] && . ./.env
|
[ -f .env ] && . ./.env
|
||||||
set +a
|
set +a
|
||||||
export PYTHONUNBUFFERED=1
|
export PYTHONUNBUFFERED=1
|
||||||
exec /opt/bin/python3 -m waitress --listen="0.0.0.0:${PORT:-2001}" app:app
|
|
||||||
|
if [ -x "$DIR/venv/bin/python3" ]; then
|
||||||
|
PYBIN="$DIR/venv/bin/python3"
|
||||||
|
elif [ -d "$DIR/lib" ] && [ -x /opt/bin/python3 ]; then
|
||||||
|
PYBIN="/opt/bin/python3"
|
||||||
|
export PYTHONPATH="$DIR/lib:${PYTHONPATH:-}"
|
||||||
|
elif command -v python3 >/dev/null 2>&1; then
|
||||||
|
PYBIN="$(command -v python3)"
|
||||||
|
else
|
||||||
|
echo "Нет python3. Установите: opkg install python3 python3-pip" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$PYBIN" -m waitress --listen="0.0.0.0:${PORT:-2001}" app:app
|
||||||
|
|||||||
Reference in New Issue
Block a user