install: dbus-x11, проверка firefox после копирования, без фикс. GID/UID; конфиг/код: правки под f7cloud, signaling по префиксу
This commit is contained in:
parent
fd8cbb8c8d
commit
cf5ce849cb
|
|
@ -1,7 +1,7 @@
|
|||
[logs]
|
||||
level = 20
|
||||
|
||||
[https]
|
||||
[http]
|
||||
listen = 127.0.0.1:8000
|
||||
|
||||
|
||||
|
|
@ -10,7 +10,7 @@ trustedproxies = 127.0.0.1
|
|||
|
||||
[backend]
|
||||
allowall = false
|
||||
backends = nextcloud
|
||||
backends = f7cloud
|
||||
skipverify = false
|
||||
maxmessagesize = 10240
|
||||
videowidth = 1920
|
||||
|
|
@ -18,7 +18,7 @@ videoheight = 1080
|
|||
directory = /var/lib/f7cloud-recordings
|
||||
secret = F7CLOUD_SECRET
|
||||
|
||||
[nextcloud]
|
||||
[f7cloud]
|
||||
url = F7CLOUD_NEXTCLOUD_URL
|
||||
secret = F7CLOUD_SECRET
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ secret = F7CLOUD_SECRET
|
|||
signalings = talk
|
||||
|
||||
[talk]
|
||||
# URL signaling-сервера (HPB)
|
||||
# URL signaling-сервера (HPB). Для HPB указывайте полный URL с путём, например https://hpb.example.com/standalone-signaling
|
||||
url = F7CLOUD_TALK_URL
|
||||
internalsecret = F7CLOUD_TALK_INTERNALSECRET
|
||||
|
||||
|
|
|
|||
44
install.sh
44
install.sh
|
|
@ -22,6 +22,8 @@ echo "=== 1. Зависимости (Python 3.12, xvfb, ffmpeg через apt) =
|
|||
NEED_PYTHON=0
|
||||
NEED_XVFB=0
|
||||
NEED_FFMPEG=0
|
||||
NEED_PULSEAUDIO=0
|
||||
NEED_DBUS=0
|
||||
|
||||
if ! command -v python3.12 >/dev/null 2>&1; then
|
||||
NEED_PYTHON=1
|
||||
|
|
@ -32,9 +34,15 @@ fi
|
|||
if ! command -v ffmpeg >/dev/null 2>&1; then
|
||||
NEED_FFMPEG=1
|
||||
fi
|
||||
if ! command -v pulseaudio >/dev/null 2>&1; then
|
||||
NEED_PULSEAUDIO=1
|
||||
fi
|
||||
if ! command -v dbus-launch >/dev/null 2>&1; then
|
||||
NEED_DBUS=1
|
||||
fi
|
||||
|
||||
# Пытаемся доустановить Python 3.12, xvfb и ffmpeg через apt, если их нет
|
||||
if [ "$NEED_PYTHON" -eq 1 ] || [ "$NEED_XVFB" -eq 1 ] || [ "$NEED_FFMPEG" -eq 1 ]; then
|
||||
if [ "$NEED_PYTHON" -eq 1 ] || [ "$NEED_XVFB" -eq 1 ] || [ "$NEED_FFMPEG" -eq 1 ] || [ "$NEED_PULSEAUDIO" -eq 1 ] || [ "$NEED_DBUS" -eq 1 ]; then
|
||||
echo "Не все зависимости найдены. Попытка установки через apt-get."
|
||||
apt-get update -qq || echo "Предупреждение: apt-get update завершился с ошибкой, продолжаю попытку установки пакетов." >&2
|
||||
|
||||
|
|
@ -56,10 +64,22 @@ if [ "$NEED_PYTHON" -eq 1 ] || [ "$NEED_XVFB" -eq 1 ] || [ "$NEED_FFMPEG" -eq 1
|
|||
apt-get install -y ffmpeg || echo "Не удалось установить ffmpeg через apt-get." >&2
|
||||
fi
|
||||
|
||||
if [ "$NEED_PULSEAUDIO" -eq 1 ]; then
|
||||
echo "Установка pulseaudio: apt-get install -y pulseaudio"
|
||||
apt-get install -y pulseaudio || echo "Не удалось установить pulseaudio через apt-get." >&2
|
||||
fi
|
||||
|
||||
if [ "$NEED_DBUS" -eq 1 ]; then
|
||||
echo "Установка dbus-x11 (dbus-launch для PulseAudio): apt-get install -y dbus-x11"
|
||||
apt-get install -y dbus-x11 || apt-get install -y dbus || echo "Не удалось установить dbus-x11/dbus через apt-get." >&2
|
||||
fi
|
||||
|
||||
# Перепроверяем наличие после apt-get
|
||||
NEED_PYTHON=0
|
||||
NEED_XVFB=0
|
||||
NEED_FFMPEG=0
|
||||
NEED_PULSEAUDIO=0
|
||||
NEED_DBUS=0
|
||||
if ! command -v python3.12 >/dev/null 2>&1; then
|
||||
NEED_PYTHON=1
|
||||
fi
|
||||
|
|
@ -69,15 +89,23 @@ if [ "$NEED_PYTHON" -eq 1 ] || [ "$NEED_XVFB" -eq 1 ] || [ "$NEED_FFMPEG" -eq 1
|
|||
if ! command -v ffmpeg >/dev/null 2>&1; then
|
||||
NEED_FFMPEG=1
|
||||
fi
|
||||
if ! command -v pulseaudio >/dev/null 2>&1; then
|
||||
NEED_PULSEAUDIO=1
|
||||
fi
|
||||
if ! command -v dbus-launch >/dev/null 2>&1; then
|
||||
NEED_DBUS=1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$NEED_PYTHON" -eq 0 ] && [ "$NEED_XVFB" -eq 0 ] && [ "$NEED_FFMPEG" -eq 0 ]; then
|
||||
echo "Python 3.12, Xvfb и ffmpeg уже установлены — продолжаем установку."
|
||||
if [ "$NEED_PYTHON" -eq 0 ] && [ "$NEED_XVFB" -eq 0 ] && [ "$NEED_FFMPEG" -eq 0 ] && [ "$NEED_PULSEAUDIO" -eq 0 ] && [ "$NEED_DBUS" -eq 0 ]; then
|
||||
echo "Python 3.12, Xvfb, ffmpeg, pulseaudio и dbus уже установлены — продолжаем установку."
|
||||
else
|
||||
echo "Не найдены обязательные системные зависимости:"
|
||||
[ "$NEED_PYTHON" -eq 1 ] && echo " - python3.12 (и python3.12-venv)"
|
||||
[ "$NEED_XVFB" -eq 1 ] && echo " - Xvfb (или xvfb-run)"
|
||||
[ "$NEED_FFMPEG" -eq 1 ] && echo " - ffmpeg"
|
||||
[ "$NEED_PULSEAUDIO" -eq 1 ] && echo " - pulseaudio"
|
||||
[ "$NEED_DBUS" -eq 1 ] && echo " - dbus-x11 (dbus-launch для PulseAudio)"
|
||||
echo ""
|
||||
echo "Установите их любым доступным способом (apt, локальное зеркало, deb-пакеты и т.п.),"
|
||||
echo "затем перезапустите ./install.sh."
|
||||
|
|
@ -96,6 +124,10 @@ if [ ! -x "$REPO_ROOT/vendor/geckodriver/geckodriver" ]; then
|
|||
fi
|
||||
rm -rf /opt/firefox-esr
|
||||
cp -r "$REPO_ROOT/vendor/firefox-esr" /opt/
|
||||
if [ ! -x /opt/firefox-esr/firefox ]; then
|
||||
echo "Ошибка: после копирования не найден /opt/firefox-esr/firefox. Проверьте наличие vendor/firefox-esr/ в репо." >&2
|
||||
exit 1
|
||||
fi
|
||||
ln -sf /opt/firefox-esr/firefox /usr/local/bin/firefox-esr
|
||||
echo "Firefox ESR скопирован из vendor/ в /opt/firefox-esr."
|
||||
|
||||
|
|
@ -106,10 +138,10 @@ echo "GeckoDriver скопирован из vendor/ в /usr/local/bin/geckodrive
|
|||
echo ""
|
||||
echo "=== 3. Пользователь и каталоги ==="
|
||||
if ! getent group f7cloud-talk-recording >/dev/null 2>&1; then
|
||||
groupadd --system -g 989 f7cloud-talk-recording
|
||||
groupadd --system f7cloud-talk-recording
|
||||
fi
|
||||
if ! id f7cloud-talk-recording >/dev/null 2>&1; then
|
||||
useradd --system -u 999 -g f7cloud-talk-recording -d /var/lib/f7cloud-talk-recording -s /usr/sbin/nologin f7cloud-talk-recording
|
||||
useradd --system -g f7cloud-talk-recording -d /var/lib/f7cloud-talk-recording -s /usr/sbin/nologin f7cloud-talk-recording
|
||||
fi
|
||||
mkdir -p /var/lib/f7cloud-talk-recording /var/lib/f7cloud-recordings
|
||||
chown -R f7cloud-talk-recording:f7cloud-talk-recording /var/lib/f7cloud-talk-recording /var/lib/f7cloud-recordings
|
||||
|
|
@ -136,7 +168,7 @@ if [ -f "$TEMPLATE" ]; then
|
|||
echo "Конфиг скопирован как шаблон. Заполните вручную секреты и URL в /etc/f7cloud-talk-recording/server.conf"
|
||||
echo " (F7CLOUD_NEXTCLOUD_URL, F7CLOUD_SECRET, F7CLOUD_TALK_URL, F7CLOUD_TALK_INTERNALSECRET)"
|
||||
fi
|
||||
chown root:root /etc/f7cloud-talk-recording/server.conf
|
||||
chown root:f7cloud-talk-recording /etc/f7cloud-talk-recording/server.conf
|
||||
chmod 640 /etc/f7cloud-talk-recording/server.conf
|
||||
else
|
||||
echo "Не найден шаблон $TEMPLATE" >&2
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ from secrets import token_urlsafe
|
|||
from requests import Request, Session
|
||||
from requests_toolbelt import MultipartEncoder
|
||||
|
||||
from nextcloud.talk import recording
|
||||
from f7cloud.talk import recording
|
||||
from .Config import config
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
|
|||
|
|
@ -255,9 +255,14 @@ class Config:
|
|||
signalingUrl = signalingUrl.rstrip('/')
|
||||
if signalingUrl in self._signalingIdsBySignalingUrl:
|
||||
signalingId = self._signalingIdsBySignalingUrl[signalingUrl]
|
||||
|
||||
if self._configParser.get(signalingId, 'internalsecret', fallback=None):
|
||||
return self._configParser.get(signalingId, 'internalsecret')
|
||||
# Match by prefix: e.g. request https://host/standalone-signaling vs config https://host
|
||||
for configuredUrl, signalingId in self._signalingIdsBySignalingUrl.items():
|
||||
if signalingUrl == configuredUrl or signalingUrl.startswith(configuredUrl.rstrip('/') + '/'):
|
||||
if self._configParser.get(signalingId, 'internalsecret', fallback=None):
|
||||
return self._configParser.get(signalingId, 'internalsecret')
|
||||
break
|
||||
|
||||
return self._configParser.get('signaling', 'internalsecret', fallback=None)
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ from prometheus_client import Counter, Gauge, make_wsgi_app
|
|||
from werkzeug.exceptions import BadRequest, Forbidden, NotFound
|
||||
from werkzeug.middleware.dispatcher import DispatcherMiddleware
|
||||
|
||||
from nextcloud.talk import recording
|
||||
from f7cloud.talk import recording
|
||||
from f7cloud.talk.recording import RECORDING_STATUS_AUDIO_AND_VIDEO
|
||||
from .Config import config
|
||||
from .Service import Service
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ Module to provide the command line interface for the recorder.
|
|||
import argparse
|
||||
import logging
|
||||
|
||||
from nextcloud.talk import recording
|
||||
from f7cloud.talk import recording
|
||||
from .Config import config
|
||||
from .Server import app
|
||||
|
||||
|
|
@ -39,8 +39,9 @@ def main():
|
|||
|
||||
listen = config.getListen()
|
||||
host, port = listen.split(':')
|
||||
port = int(port, 10)
|
||||
|
||||
app.run(host, port, threaded=True)
|
||||
app.run(host=host, port=port, threaded=True)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user