mirror of
https://github.com/eddyem/astrovideoguide_v3.git
synced 2025-12-06 10:45:10 +03:00
243 lines
13 KiB
TeX
243 lines
13 KiB
TeX
%
|
||
% spec_server package description
|
||
%
|
||
|
||
|
||
Демон \t{spec\_server} представляет собой \t{HTTP(S)/Websocket} сервер и, соответственно, является
|
||
серверной частью программного пакета интерфейсов наблюдателя и состояния спектрографа.
|
||
Данный программный пакет реализован на языках \t{C++} (\t{spec\_server})
|
||
и \t{Javascript}, \t{HTML}, \t{CSS} для клиентской части.
|
||
|
||
Сетевая (\t{HTTP(S)/WebSocket} сервер, связь с демоном \t{loccorr}) часть демона реализована с помощью сторонних библиотек
|
||
\verb|IXWebsocket|\footnote{\url{https://machinezone.github.io/IXWebSocket/}} и
|
||
\verb|ASIO|\footnote{\url{https://think-async.com}}. Кроме того, дополнительно были использованы сторонние библиотеки
|
||
\verb|spdlog|\footnote{\url{https://github.com/gabime/spdlog}}, \verb|fmtlib|\footnote{\url{https://github.com/fmtlib/fmt})}
|
||
и \verb|OpenSSL|\footnote{\url{https://github.com/fmtlib/fmt}}.
|
||
|
||
\begin{table}[t]
|
||
\caption{Ключи командной строки демона \t{spec\_server}}\label{specserv_cmdkey}
|
||
% \begin{tabular}{ll}
|
||
\begin{tabular}{p{0.45\textwidth}p{0.45\textwidth}}
|
||
\hline\hline
|
||
Ключ & описание \\
|
||
\hline
|
||
\verb|-h| & распечатать в устройство стандартного вывода краткую справку и выйти\\
|
||
&\\
|
||
\verb|-d [config-filename]| & записать параметры конфигурации по умолчанию в файл
|
||
\verb|config-filename| и выйти. Если \verb|config-filename| не задан,
|
||
то будет использовано имя по умолчанию \verb|server-config.dat|\\
|
||
\hline\hline
|
||
\end{tabular}
|
||
|
||
\end{table}
|
||
|
||
Для старта демона необходимо выполнить команду:
|
||
\begin{verbatim}
|
||
spec_server [cfg-filename] [-h] [-d] [dump-config-filename]
|
||
\end{verbatim}
|
||
Предполагается, что у пользователя есть права на запуск бинарного файла \t{spec\_server} и путь к этому
|
||
файлу есть в переменной среды \verb|PATH|.
|
||
В Таблице~\ref{specserv_cmdkey} представлены опциональные ключи командной строки, которые принимает исполняемый
|
||
файл демона в качестве параметров. Необязательным позиционным параметром запуска
|
||
демона является имя файла, в котором заданы параметры конфигурации. Например, следующая командная строка
|
||
запускает демон с конфигурационными параметрами в файле \verb|/etc/server-config.dat|:
|
||
\begin{verbatim}
|
||
spec_server /etc/server-config.dat
|
||
\end{verbatim}
|
||
|
||
\afterpage{%
|
||
\begin{longtable}{p{0.2\textwidth}p{0.15\textwidth}p{0.5\textwidth}}
|
||
\caption{Параметры конфигурации демона \t{spec\_server}}
|
||
\label{specserv_params}\\
|
||
% \begin{tabular}{lll}
|
||
\hline\hline
|
||
имя параметра & тип & описание \\
|
||
\hline
|
||
\t{caFile} & строка & полное имя файла доверенного корневого сертификата. Специальные значения: \\
|
||
& & \t{SYSTEM} -- использовать системное хранилище доверенных корневых сертификатов; \\
|
||
& & \t{NONE} -- отключить верификацию сертификатов сетевого соединения. \\
|
||
& & По умолчанию -- пустая строка (не использовать корневой сертификат) \\
|
||
& & \\
|
||
\t{certFile} & строка & полное имя файла \t{SSL}-сертификата демона. По умолчанию -- пустая строка (не
|
||
использовать протокол \t{HTTPS}) \\
|
||
& & \\
|
||
\t{certKeyFile} & строка & полное имя файла ключа \t{SSL}-сертификата демона. По умолчанию -- пустая
|
||
строка (не использовать протокол \t{HTTPS}) \\
|
||
& & \\
|
||
\t{http\_host} & строка & \t{IP}-адрес сетевого интерфейса для прослушивания входящих \t{HTTP(S)}
|
||
соединений. \\
|
||
& & По умолчанию 0.0.0.0 \\
|
||
& & \\
|
||
\t{http\_path} & строка & полный путь к каталогу файловой системы где хранятся \t{HTML}, \t{Javascript} и
|
||
\t{CSS} файлы интерфейса наблюдателя. \\
|
||
& & По умолчанию -- пустая строка (текущий каталог) \\
|
||
& & \\
|
||
\t{http\_port} & целое число & номер порта для входящих \t{HTTP(S)} соединений. По умолчанию 8080 \\
|
||
& & \\
|
||
\t{log\_filename} & строка & полное имя лог-файла демона.Параметр может иметь специальные значения
|
||
\t{stdout} и
|
||
\t{stderr} для логирования в стандартные устройства вывода и ошибок соответственно.
|
||
Если значение пустая строка, то логирование будет отключено \\
|
||
& & \\
|
||
\t{log\_level} & строка & уровень логирования. Возможные значения (регистр не важен):
|
||
\t{TRACE}, \t{DEBUG}, \t{INFO}, \t{WARN}, \t{ERROR}, \t{CRITICAL}, \t{OFF}. По умолчанию задано \t{INFO}\\
|
||
& & \\
|
||
\t{logrot\_num} & целое число & количество сохраняемых лог-файлов, если задано ротирование. Если
|
||
больше 0, то логирование
|
||
будет выполняться по принципу ротирования файлов по достижению заданного максимального размера файла.
|
||
По умолчанию 0 -- ротирование отключено \\
|
||
& & \\
|
||
\t{logrot\_size} & целое число & максимальный размер лог-файла в случае включенного ротирования.
|
||
Размер задается в байтах. По умолчанию 10485760 (10 мегабайт)\\
|
||
& & \\
|
||
\t{obs\_timeout} & целое число & таймаут бездействия соединения для интерфейса наблюдателя. Время
|
||
задается в минутах.
|
||
По умолчанию 60 ({\bf не реализовано!!!}) \\
|
||
& & \\
|
||
\t{passwd\_hash} & 16-ричное число & \t{SHA-256} хэш-сумма строки пароля авторизации для интерфейса
|
||
наблюдателя.
|
||
По умолчанию значение соответствует паролю \t{123} \\
|
||
& & \\
|
||
\t{ping\_int} & целое число & ``пинг-понг'' интервал для \t{Websocket} соединений. Время задается в
|
||
секундах.
|
||
По умолчанию 45 \\
|
||
& & \\
|
||
\t{specdev\_port} & целое число & номер порта для сетевого соединения с демоном \t{loccorr}. По
|
||
умолчанию 12345 \\
|
||
& & \\
|
||
\t{specdev\_rtimeout} & целое число & таймаут для операций чтения из сокета для сетевого соединения с
|
||
демоном \t{loccorr}.
|
||
Время задается в миллисекундах. По умолчанию 1000 \\
|
||
& & \\
|
||
\t{specdev\_wtimeout} & целое число & таймаут для операций записи в сокет для сетевого соединения с
|
||
демоном \t{loccorr}.
|
||
Время задается в миллисекундах. По умолчанию 1000 \\
|
||
& & \\
|
||
\t{view\_timeout} & целое число & таймаут бездействия соединения для интерфейса просмотра состояния
|
||
спектрографа.
|
||
Время задается в минутах. По умолчанию 60 ({\bf не реализовано!!!}) \\
|
||
& & \\
|
||
\t{websock\_host} & строка & \t{IP}-адрес сетевого интерфейса для прослушивания входящих \t{Websocket}
|
||
соединений. По умолчанию 0.0.0.0 \\
|
||
& & \\
|
||
\t{websock\_port} & целое число & номер порта для входящих \t{Websocket} соединений. По умолчанию 8888 \\
|
||
\hline\hline
|
||
% \end{tabular}
|
||
\end{longtable}
|
||
}
|
||
|
||
При старте демон \t{spec\_server} начинает прослушивать заданные в конфигурации порты для входящих
|
||
\t{HTTP(S)} и \t{Websocket} соединений, а затем пытается выполнить сетевое соединение с демоном \t{loccorr}.
|
||
Если заданный пользователем файл конфигурации не найден или у пользователя нет прав на его чтение, то демон
|
||
аварийно завершает работу.
|
||
Функционирование демона полностью задается параметрами в конфигурационном файле. Конфигурационный файл
|
||
имеет текстовый формат, параметры задаются парой ``ключ -- значение'' как \verb|key=value|, в каждой строке
|
||
может присутствовать только одна пара ``ключ -- значение'', строки начинающиеся с символа \verb|#| являются
|
||
комментариями и игнорируются, пустые (содержащие только пробелы) строки также игнорируются.
|
||
В паре \verb|key=value| ``\verb|value|'' может быть пустой строкой, что означает ``параметр имеет специальное значение''
|
||
(см. Таблицу~\ref{specserv_params}). В Таблице~\ref{specserv_params} описаны возможные параметры
|
||
конфигурации демона \t{spec\_server}. Файлы сертификатов и их ключей должны быть в \t{PEM}-формате.
|
||
Критичным для работы интерфейса пользователя является параметр \verb|http_path|, задающий
|
||
корневой каталог в файловой системе ОС управляющего компьютера, в котором хранятся необходимые
|
||
\verb|HTML|, \verb|CSS| и \verb|Javascript| файлы. Главный \verb|HTML| файл интерфейса (\verb|observer.html|)
|
||
предполагает жестко заданную структуру содержимого корневого каталога. Положим, что пользователь в своем конфигурационном
|
||
файле определил его как \verb|http_path = /etc/fiber_spec_cfg|, тогда его содержимое должно выглядеть
|
||
следующим образом:
|
||
|
||
\begin{verbatim}
|
||
/etc/fiber_spec_cfg/
|
||
js/
|
||
uikit-icons.min.js
|
||
uikit.min.js
|
||
|
||
css/
|
||
uikit.min.css
|
||
|
||
index.html
|
||
observer.html
|
||
viewer.html
|
||
start-disp.jpg
|
||
init_connection.js
|
||
observer_handlers.js
|
||
observer_websocket_handler.js
|
||
\end{verbatim}
|
||
|
||
\begin{table}[t]
|
||
\caption{Состав программного пакета \t{spec\_server}}\label{specserv_files}
|
||
% \begin{tabular}{ll}
|
||
\begin{tabular}{p{0.45\textwidth}p{0.45\textwidth}}
|
||
\hline\hline
|
||
Имя файла & описание \\
|
||
\hline
|
||
\verb|spec_server| & исполняемый файл \t{HTTP(S)/Websocket} сервера \\
|
||
& \\
|
||
\verb|index.html| & \t{HTML} индекс-файл \t{HTTP(S)}-сервера \\
|
||
& \\
|
||
\verb|observer.html| & \t{HTML} файл интерфейса наблюдателя \\
|
||
& \\
|
||
\verb|viewer.html| & \t{HTML} файл интерфейса состояния спектрографа ({\bfв разработке!!!})\\
|
||
& \\
|
||
\verb|start-disp.jpg| & \t{JPEG} файл стартового изображения подсмотра волокна \\
|
||
& \\
|
||
\verb|init_connection.js| & \t{Javascript} файлы логики интерфейса наблюдателя \\
|
||
\verb|observer_handlers.js| & \\
|
||
\verb|observer_websocket_handler.js| & \\
|
||
& \\
|
||
\verb|uikit-icons.min.js| & \t{Javascript} файлы библиотеки \t{UIkit} \\
|
||
\verb|uikit.min.js| & \\
|
||
& \\
|
||
\verb|uikit.min.css| & \t{CSS} файл библиотеки \t{UIkit} \\
|
||
\hline\hline
|
||
\end{tabular}
|
||
\end{table}
|
||
|
||
Состав и краткое описание файлов программного пакета представлены в Таблице~\ref{specserv_files}.
|
||
Для авторизации наблюдателя при начальной загрузке интерфейса потребуется ввод пароля. \verb|SHA-256| хэш-сумма
|
||
пароля задается в конфигурации ключом \verb|passwd_hash|. Чтобы сгенерировать хэш-сумму можно, например, воспользоваться
|
||
стандартной \verb|GNU| утилитой \verb|Linux| ОС \verb|sha256sum|:
|
||
\begin{verbatim}
|
||
echo -n "obs-password-here" | sha256sum
|
||
\end{verbatim}
|
||
Полученная сумма прописывается в конфигурационом файле как
|
||
\begin{verbatim}
|
||
passwd_hash=82774de1a23f679abab412e24279157fa99c44f3ff400d09d45d4d01e64fce60
|
||
\end{verbatim}
|
||
(без пробелов после символа '\verb|=|'!!!). {\bf Важно: } в текущей реализации демона \t{loccorr} возможно лишь единственное
|
||
соединение к интерфейсу наблюдателя. Если одно уже открыто, то всем остальным будет отказано в доступе.
|
||
Для обеспечения сетевой безопасности демон \t{spec\_server} может работать
|
||
как \verb|HTTPS| сервер и, в этой конфигурации, использовать \verb|TLS|-шифрование для \verb|Websocket| соединений. Возможны несколько
|
||
вариантов конфигурирования \verb|HTTPS| сервера (\verb|TLS|-шифрования). Краткое описание вариантов можно просмотреть на странице библиотеки
|
||
\verb|IXWebsocket|\footnote{\url{https://machinezone.github.io/IXWebSocket/usage/\#tls-support-and-configuration}}. Отметим
|
||
здесь, что наиболее простой вариант это использование доверенного (подписанного доверенным центром
|
||
сертификации) сертификата сервера,
|
||
тогда параметры конфигурации могут быть заданы следующим образом:
|
||
\begin{verbatim}
|
||
caFile = SYSTEM
|
||
certFile = server-crt.pem
|
||
certKeyFile = server-key.pem
|
||
\end{verbatim}
|
||
Если используется так называемый самоподписанный сертификат, то конфигурация может быть задана как:
|
||
\begin{verbatim}
|
||
caFile = NONE
|
||
certFile = server-crt.pem
|
||
certKeyFile = server-key.pem
|
||
\end{verbatim}
|
||
Однако, такая конфигурация потребует дополнительных настроек в используемых интернет-браузерах (потребуется разрешить
|
||
браузеру использовать соединения защищенные недоверенным сертификатом и т.д.).
|
||
|
||
Демон \t{spec\_server} обрабатывает 4 сигнала ОС: \verb|SIGINT|, \verb|SIGTERM|, \verb|SIGUSR1| и \verb|SIGUSR2|. Первые два
|
||
предназначены для останова \t{HTTP(S)/WebSocket} сервера и выхода демона в ОС. \verb|SIGUSR1| используется для
|
||
рестарта \t{HTTP(S)/WebSocket} сервера (с закрытием всех активных браузерных соединений) и реинициализации соединения
|
||
с \t{loccorr} демоном. При получении сигнала \verb|SIGUSR2| демон только реинициализирует соединение с \t{loccorr} демоном.
|
||
Например, для останова демона нужно выполнить команду
|
||
\begin{verbatim}
|
||
killall -TERM spec_server
|
||
\end{verbatim}
|
||
Остальные варианты обработки сигналов могут быть полезны, например, в случае аварийного перезапуска \t{loccorr} демона.
|
||
Например, следующая команда запросит демон \t{spec\_server} закрыть существующее и открыть новое сетевое соединение с
|
||
демоном \t{loccorr}:
|
||
\begin{verbatim}
|
||
killall -USR2 spec_server
|
||
\end{verbatim}
|
||
|