install.sh: установка python3.12, xvfb и ffmpeg через apt-get

This commit is contained in:
root 2026-03-11 11:15:53 +00:00
parent 023dfb95de
commit f1cc04e550
3 changed files with 30 additions and 49 deletions

View File

@ -1,6 +1,6 @@
# F7cloud Talk Recording — сборка для развёртывания # F7cloud Talk Recording — сборка для развёртывания
В репозитории собраны **все компоненты для работы сервиса, кроме системных пакетов Python**. Firefox ESR и GeckoDriver скопированы с машины сборки в `vendor/` и при развёртывании на другом сервере просто копируются из репо в `/opt/firefox-esr` и `/usr/local/bin/geckodriver`. Пакеты **xvfb** и **ffmpeg** также включены в репозиторий в виде `.deb` (для Debian/Ubuntu) и при установке, при их отсутствии в системе, ставятся скриптом `install.sh` из `vendor/debs/` через `dpkg -i` (без доступа к внешним репозиториям). А вот **python3.12** и **python3.12-venv** ставятся через `apt-get` на целевой машине (если их ещё нет). В репозитории собраны **все компоненты для работы сервиса, кроме системных пакетов Python/xvfb/ffmpeg**. Firefox ESR и GeckoDriver скопированы с машины сборки в `vendor/` и при развёртывании на другом сервере просто копируются из репо в `/opt/firefox-esr` и `/usr/local/bin/geckodriver`. А вот **python3.12**, **python3.12-venv**, **xvfb** и **ffmpeg** ставятся на целевой машине через `apt-get` (скрипт `install.sh` сначала проверяет их наличие и, если нужно, пытается установить командой `apt-get install python3.12 python3.12-venv xvfb ffmpeg`).
## Структура ## Структура

View File

@ -17,7 +17,7 @@ fi
REPO_ROOT="$(cd "$(dirname "$0")" && pwd)" REPO_ROOT="$(cd "$(dirname "$0")" && pwd)"
echo "=== 1. Зависимости (Python 3.12 через apt, xvfb/ffmpeg — из репо) ===" echo "=== 1. Зависимости (Python 3.12, xvfb, ffmpeg через apt) ==="
NEED_PYTHON=0 NEED_PYTHON=0
NEED_XVFB=0 NEED_XVFB=0
@ -33,55 +33,38 @@ if ! command -v ffmpeg >/dev/null 2>&1; then
NEED_FFMPEG=1 NEED_FFMPEG=1
fi fi
# Пытаемся доустановить Python 3.12 через apt, если его нет # Пытаемся доустановить Python 3.12, xvfb и ffmpeg через apt, если их нет
PKGS=""
if [ "$NEED_PYTHON" -eq 1 ]; then if [ "$NEED_PYTHON" -eq 1 ]; then
echo "python3.12 не найден в системе. Попытка установки через apt-get (python3.12 python3.12-venv) ..." PKGS="$PKGS python3.12 python3.12-venv"
if apt-get update -qq && apt-get install -y python3.12 python3.12-venv; then
if command -v python3.12 >/dev/null 2>&1; then
echo "python3.12 успешно установлен через apt-get."
NEED_PYTHON=0
fi
else
echo "Не удалось установить python3.12 через apt-get. Проверьте конфигурацию репозиториев." >&2
fi
fi fi
if [ "$NEED_XVFB" -eq 1 ]; then if [ "$NEED_XVFB" -eq 1 ]; then
XVFB_DEB="$(ls "$REPO_ROOT"/vendor/debs/xvfb_*.deb 2>/dev/null | head -n1 || true)" PKGS="$PKGS xvfb"
if [ -n "$XVFB_DEB" ]; then fi
echo "Xvfb не найден в системе. Устанавливаю из $XVFB_DEB ..." if [ "$NEED_FFMPEG" -eq 1 ]; then
if dpkg -i "$XVFB_DEB"; then PKGS="$PKGS ffmpeg"
echo "Xvfb успешно установлен из vendor/debs."
NEED_XVFB=0
else
echo "Не удалось установить Xvfb из $XVFB_DEB. Проверьте зависимости пакета." >&2
fi
fi
fi fi
if [ "$NEED_FFMPEG" -eq 1 ]; then if [ -n "$PKGS" ]; then
# Сначала ставим зависимости ffmpeg из vendor/debs, если они есть echo "Не все зависимости найдены. Попытка установки через apt-get:$PKGS"
for dep in libavcodec60 libavdevice60 libavfilter9 libavformat60 libavutil58 libpostproc57 libsdl2-2.0-0 libswresample4 libswscale7; do if apt-get update -qq && apt-get install -y $PKGS; then
DEB_PATH="$(ls "$REPO_ROOT"/vendor/debs/${dep}_*.deb 2>/dev/null | head -n1 || true)" echo "apt-get успешно установил недостающие пакеты (если они были доступны)."
if [ -n "$DEB_PATH" ]; then
echo "Устанавливаю зависимость ffmpeg: $DEB_PATH ..."
if dpkg -i "$DEB_PATH"; then
echo "Пакет зависимости $dep установлен."
else else
echo "Не удалось установить пакет зависимости $dep из $DEB_PATH. Проверьте зависимости пакета." >&2 echo "Не удалось установить часть системных пакетов через apt-get. Проверьте конфигурацию репозиториев." >&2
fi fi
fi
done
FFMPEG_DEB="$(ls "$REPO_ROOT"/vendor/debs/ffmpeg_*.deb 2>/dev/null | head -n1 || true)" # Перепроверяем наличие после apt-get
if [ -n "$FFMPEG_DEB" ]; then NEED_PYTHON=0
echo "ffmpeg не найден в системе. Устанавливаю из $FFMPEG_DEB ..." NEED_XVFB=0
if dpkg -i "$FFMPEG_DEB"; then
echo "ffmpeg успешно установлен из vendor/debs."
NEED_FFMPEG=0 NEED_FFMPEG=0
else if ! command -v python3.12 >/dev/null 2>&1; then
echo "Не удалось установить ffmpeg из $FFMPEG_DEB. Проверьте зависимости пакета." >&2 NEED_PYTHON=1
fi fi
if ! command -v Xvfb >/dev/null 2>&1 && ! command -v xvfb-run >/dev/null 2>&1; then
NEED_XVFB=1
fi
if ! command -v ffmpeg >/dev/null 2>&1; then
NEED_FFMPEG=1
fi fi
fi fi
@ -94,7 +77,7 @@ else
[ "$NEED_FFMPEG" -eq 1 ] && echo " - ffmpeg" [ "$NEED_FFMPEG" -eq 1 ] && echo " - ffmpeg"
echo "" echo ""
echo "Установите их любым доступным способом (apt, локальное зеркало, deb-пакеты и т.п.)," echo "Установите их любым доступным способом (apt, локальное зеркало, deb-пакеты и т.п.),"
echo "затем перезапустите ./install. Сам скрипт install не вызывает apt-get." echo "затем перезапустите ./install.sh."
exit 1 exit 1
fi fi

4
vendor/README.md vendored
View File

@ -6,9 +6,7 @@
|------------|------------| |------------|------------|
| **vendor/firefox-esr/** | Каталог Firefox ESR (бинарь `firefox` и библиотеки). При деплое копируется в `/opt/firefox-esr`, симлинк — в `/usr/local/bin/firefox-esr`. | | **vendor/firefox-esr/** | Каталог Firefox ESR (бинарь `firefox` и библиотеки). При деплое копируется в `/opt/firefox-esr`, симлинк — в `/usr/local/bin/firefox-esr`. |
| **vendor/geckodriver/geckodriver** | Бинарь GeckoDriver для Linux. При деплое копируется в `/usr/local/bin/geckodriver`. | | **vendor/geckodriver/geckodriver** | Бинарь GeckoDriver для Linux. При деплое копируется в `/usr/local/bin/geckodriver`. |
| **vendor/debs/xvfb\_*.deb** | Debian-пакет `xvfb` для установки Xvfb на целевой машине (`dpkg -i` вызывается из `install.sh`, если Xvfb не найден). | | **Python 3.12, xvfb, ffmpeg** | Не включены в vendor — ставятся через `apt-get install python3.12 python3.12-venv xvfb ffmpeg` на целевой машине (скрипт `install.sh` пытается сделать это автоматически и при ошибке выводит подсказку). |
| **vendor/debs/ffmpeg\_*.deb** | Debian-пакет `ffmpeg` для установки ffmpeg на целевой машине (`dpkg -i` вызывается из `install.sh`, если ffmpeg не найден). |
| **Python 3.12** | Не включён в vendor — ставится через `apt-get install python3.12 python3.12-venv` на целевой машине (скрипт `install.sh` пытается сделать это автоматически и при ошибке выводит подсказку). |
## Обновление vendor/ (новая машина сборки) ## Обновление vendor/ (новая машина сборки)