Files
keenetic_ssh-web/install.sh
Андрей Бобырев caa1dd1602 install: устойчивость к ошибкам сторонних opkg-репозиториев
- opkg update больше не валит install.sh при 404 у hoaxisr/ground-zero
- opkg install python3 — фолбэк цепочкой, без выхода по set -e
- Финальный блок «Готово» с явным путём INST/INIT, чтобы оборвавшаяся
  установка сразу была заметна
- README/install: vi вместо nano (на Entware nano по умолчанию нет),
  заметка про частичные ошибки opkg update
2026-04-26 00:23:25 +03:00

115 lines
3.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Установка keenetic_ssh-web на Keenetic (Entware) в /opt/share/keenetic_ssh-web
set -e
ROOT="$(cd "$(dirname "$0")" && pwd)"
INST="${INSTALL_DIR:-/opt/share/keenetic_ssh-web}"
PY="${PYTHON:-python3}"
echo "==> Установка в $INST"
mkdir -p "$INST/data" /opt/var/run /opt/var/log 2>/dev/null || mkdir -p "$INST/data"
for f in app.py auth.py brand.py executor.py runner.py store.py requirements.txt run.sh; do
cp -f "$ROOT/$f" "$INST/"
done
rm -rf "$INST/templates"
cp -a "$ROOT/templates" "$INST/"
if [ ! -f "$INST/data/store.json" ]; then
cp -f "$ROOT/data/store.example.json" "$INST/data/store.json"
fi
if [ ! -f "$INST/.env" ]; then
cp -f "$ROOT/.env.example" "$INST/.env"
echo "!!! Создан $INST/.env — задайте WEB_PASSWORD и при необходимости ALLOWED_IPS"
fi
chmod +x "$INST/run.sh"
echo "==> Entware: python3 + venv"
if command -v opkg >/dev/null 2>&1; then
opkg update || echo "(opkg update: частичные ошибки источников — продолжаем)"
opkg install python3 python3-pip python3-light python3-venv >/dev/null 2>&1 \
|| opkg install python3 python3-pip >/dev/null 2>&1 \
|| echo "(opkg install python3: пропуск — пакеты возможно уже стоят)"
fi
cd "$INST"
if [ ! -x venv/bin/python3 ]; then
"$PY" -m venv venv || { echo "Не удалось создать venv. Установите: opkg install python3-venv"; exit 1; }
fi
./venv/bin/pip install -q --upgrade pip
./venv/bin/pip install -q -r requirements.txt
INIT="/opt/etc/init.d/S99keenetic-ssh-web"
echo "==> Init-скрипт $INIT"
TMP_INIT="$(mktemp)"
cat > "$TMP_INIT" << 'INITEOF'
#!/bin/sh
### BEGIN INIT INFO
# Provides: keenetic-ssh-web
# Required-Start: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: keenetic_ssh-web (Flask+Waitress)
### END INIT INFO
DIR="@INST@"
PID="/opt/var/run/keenetic-ssh-web.pid"
case "$1" in
start)
if [ -f "$PID" ] && kill -0 "$(cat "$PID")" 2>/dev/null; then
echo "already running"
exit 0
fi
[ -x "$DIR/venv/bin/python3" ] || { echo "no venv in $DIR"; exit 1; }
cd "$DIR" || exit 1
set -a
[ -f .env ] && . ./.env
set +a
export PYTHONUNBUFFERED=1
PORT="${PORT:-2001}"
nohup "$DIR/venv/bin/python3" -m waitress --listen="0.0.0.0:$PORT" app:app \
>>/opt/var/log/keenetic-ssh-web.log 2>&1 &
echo $! > "$PID"
echo "keenetic_ssh-web started pid=$(cat "$PID") port=$PORT"
;;
stop)
if [ -f "$PID" ]; then
kill "$(cat "$PID")" 2>/dev/null || true
rm -f "$PID"
fi
echo "stopped"
;;
restart)
"$0" stop
sleep 1
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
INITEOF
sed "s|@INST@|$INST|g" "$TMP_INIT" > "$INIT"
rm -f "$TMP_INIT"
chmod +x "$INIT"
echo ""
echo "============================================================"
echo "Готово. Установлено в: $INST"
echo "Init-скрипт: $INIT"
echo ""
echo "Дальше:"
echo " 1) (по желанию) vi $INST/.env"
echo " ROUTER_HOST=http://127.0.0.1 ROUTER_LOGIN=admin"
echo " WEB_PASSWORD=... PORT=2001"
echo " ALLOWED_IPS=192.168.1.100"
echo " 2) $INIT start"
echo " 3) Браузер: http://IP_РОУТЕРА:2001"
echo " Логин/пароль — от веб-админки роутера (Keenetic)."
echo ""
echo "Автозапуск после перезагрузки (если есть rc.d):"
echo " ln -sf $INIT /opt/etc/rc.d/S99keenetic-ssh-web"
echo "============================================================"