From f1cc04e550f370b51e8af0bd9f3037fdb5b83fe6 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 11 Mar 2026 11:15:53 +0000 Subject: [PATCH] =?UTF-8?q?install.sh:=20=D1=83=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20python3.12,=20xvfb=20=D0=B8=20ffmpeg?= =?UTF-8?q?=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20apt-get?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- install.sh | 73 +++++++++++++++++++----------------------------- vendor/README.md | 4 +-- 3 files changed, 30 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index cdd1660..0838f4b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 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`). ## Структура diff --git a/install.sh b/install.sh index 760a7f1..3c7f3f3 100755 --- a/install.sh +++ b/install.sh @@ -17,7 +17,7 @@ fi 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_XVFB=0 @@ -33,55 +33,38 @@ if ! command -v ffmpeg >/dev/null 2>&1; then NEED_FFMPEG=1 fi -# Пытаемся доустановить Python 3.12 через apt, если его нет +# Пытаемся доустановить Python 3.12, xvfb и ffmpeg через apt, если их нет +PKGS="" if [ "$NEED_PYTHON" -eq 1 ]; then - echo "python3.12 не найден в системе. Попытка установки через apt-get (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 + PKGS="$PKGS python3.12 python3.12-venv" fi - if [ "$NEED_XVFB" -eq 1 ]; then - XVFB_DEB="$(ls "$REPO_ROOT"/vendor/debs/xvfb_*.deb 2>/dev/null | head -n1 || true)" - if [ -n "$XVFB_DEB" ]; then - echo "Xvfb не найден в системе. Устанавливаю из $XVFB_DEB ..." - if dpkg -i "$XVFB_DEB"; then - echo "Xvfb успешно установлен из vendor/debs." - NEED_XVFB=0 - else - echo "Не удалось установить Xvfb из $XVFB_DEB. Проверьте зависимости пакета." >&2 - fi - fi + PKGS="$PKGS xvfb" +fi +if [ "$NEED_FFMPEG" -eq 1 ]; then + PKGS="$PKGS ffmpeg" fi -if [ "$NEED_FFMPEG" -eq 1 ]; then - # Сначала ставим зависимости ffmpeg из vendor/debs, если они есть - for dep in libavcodec60 libavdevice60 libavfilter9 libavformat60 libavutil58 libpostproc57 libsdl2-2.0-0 libswresample4 libswscale7; do - DEB_PATH="$(ls "$REPO_ROOT"/vendor/debs/${dep}_*.deb 2>/dev/null | head -n1 || true)" - if [ -n "$DEB_PATH" ]; then - echo "Устанавливаю зависимость ffmpeg: $DEB_PATH ..." - if dpkg -i "$DEB_PATH"; then - echo "Пакет зависимости $dep установлен." - else - echo "Не удалось установить пакет зависимости $dep из $DEB_PATH. Проверьте зависимости пакета." >&2 - fi - fi - done +if [ -n "$PKGS" ]; then + echo "Не все зависимости найдены. Попытка установки через apt-get:$PKGS" + if apt-get update -qq && apt-get install -y $PKGS; then + echo "apt-get успешно установил недостающие пакеты (если они были доступны)." + else + echo "Не удалось установить часть системных пакетов через apt-get. Проверьте конфигурацию репозиториев." >&2 + fi - FFMPEG_DEB="$(ls "$REPO_ROOT"/vendor/debs/ffmpeg_*.deb 2>/dev/null | head -n1 || true)" - if [ -n "$FFMPEG_DEB" ]; then - echo "ffmpeg не найден в системе. Устанавливаю из $FFMPEG_DEB ..." - if dpkg -i "$FFMPEG_DEB"; then - echo "ffmpeg успешно установлен из vendor/debs." - NEED_FFMPEG=0 - else - echo "Не удалось установить ffmpeg из $FFMPEG_DEB. Проверьте зависимости пакета." >&2 - fi + # Перепроверяем наличие после apt-get + NEED_PYTHON=0 + NEED_XVFB=0 + NEED_FFMPEG=0 + if ! command -v python3.12 >/dev/null 2>&1; then + NEED_PYTHON=1 + 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 @@ -94,7 +77,7 @@ else [ "$NEED_FFMPEG" -eq 1 ] && echo " - ffmpeg" echo "" echo "Установите их любым доступным способом (apt, локальное зеркало, deb-пакеты и т.п.)," - echo "затем перезапустите ./install. Сам скрипт install не вызывает apt-get." + echo "затем перезапустите ./install.sh." exit 1 fi diff --git a/vendor/README.md b/vendor/README.md index 4c91ed4..d4b9080 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -6,9 +6,7 @@ |------------|------------| | **vendor/firefox-esr/** | Каталог Firefox ESR (бинарь `firefox` и библиотеки). При деплое копируется в `/opt/firefox-esr`, симлинк — в `/usr/local/bin/firefox-esr`. | | **vendor/geckodriver/geckodriver** | Бинарь GeckoDriver для Linux. При деплое копируется в `/usr/local/bin/geckodriver`. | -| **vendor/debs/xvfb\_*.deb** | Debian-пакет `xvfb` для установки Xvfb на целевой машине (`dpkg -i` вызывается из `install.sh`, если Xvfb не найден). | -| **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` пытается сделать это автоматически и при ошибке выводит подсказку). | +| **Python 3.12, xvfb, ffmpeg** | Не включены в vendor — ставятся через `apt-get install python3.12 python3.12-venv xvfb ffmpeg` на целевой машине (скрипт `install.sh` пытается сделать это автоматически и при ошибке выводит подсказку). | ## Обновление vendor/ (новая машина сборки)