install.sh: установка python3.12, xvfb и ffmpeg через apt-get
This commit is contained in:
parent
023dfb95de
commit
f1cc04e550
|
|
@ -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`).
|
||||||
|
|
||||||
## Структура
|
## Структура
|
||||||
|
|
||||||
|
|
|
||||||
67
install.sh
67
install.sh
|
|
@ -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
|
fi
|
||||||
else
|
|
||||||
echo "Не удалось установить python3.12 через apt-get. Проверьте конфигурацию репозиториев." >&2
|
|
||||||
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
|
|
||||||
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
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$NEED_FFMPEG" -eq 1 ]; then
|
if [ "$NEED_FFMPEG" -eq 1 ]; then
|
||||||
# Сначала ставим зависимости ffmpeg из vendor/debs, если они есть
|
PKGS="$PKGS ffmpeg"
|
||||||
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
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
FFMPEG_DEB="$(ls "$REPO_ROOT"/vendor/debs/ffmpeg_*.deb 2>/dev/null | head -n1 || true)"
|
if [ -n "$PKGS" ]; then
|
||||||
if [ -n "$FFMPEG_DEB" ]; then
|
echo "Не все зависимости найдены. Попытка установки через apt-get:$PKGS"
|
||||||
echo "ffmpeg не найден в системе. Устанавливаю из $FFMPEG_DEB ..."
|
if apt-get update -qq && apt-get install -y $PKGS; then
|
||||||
if dpkg -i "$FFMPEG_DEB"; then
|
echo "apt-get успешно установил недостающие пакеты (если они были доступны)."
|
||||||
echo "ffmpeg успешно установлен из vendor/debs."
|
|
||||||
NEED_FFMPEG=0
|
|
||||||
else
|
else
|
||||||
echo "Не удалось установить ffmpeg из $FFMPEG_DEB. Проверьте зависимости пакета." >&2
|
echo "Не удалось установить часть системных пакетов через apt-get. Проверьте конфигурацию репозиториев." >&2
|
||||||
fi
|
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
|
||||||
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
4
vendor/README.md
vendored
|
|
@ -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/ (новая машина сборки)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user