| Оглавление |
|---|
Общее описание
Система NAICE поставляется в виде образов для запуска контейнеров в системе контейнеризации и управления приложениями Docker. Для управления всеми компонентами системы используется плагин Docker Compose, предназначенный для решения различных задач для мультиконтейнерных приложений. БД Postgres может быть при необходимости установлена в виде приложения.
Для автоматизации установки используются плейбуки Ansible.
Установка
| Информация |
|---|
Ниже приведена инструкция по выполнению однохостовой установки. Инструкция по установке с резервированием системы приведена в статье v0.8_3.6 Резервирование. |
Установка Ansible
Для запуска плейбуков необходимо установить Ansible на хост, с которого есть доступ по SSH до целевого хоста.
| Примечание |
|---|
Запускать плейбук непосредственно на целевом хосте не рекомендуется. |
Рекомендуемая ОС хоста для запуска плейбука - Ubuntu 22.04 Jammy и новее.
Минимальная версия Ansible для корректной работы плейбуков установки 2.10.8.
| Предупреждение |
|---|
Для корректной установки на ОС Astra Linux 1.7.5 / 1.7.6 требуется версия Ansible не выше 2.16.3. |
Официальная документация по установке Ansible.
Помимо способов, описанных в документации, возможна установка ПО на Linux-хост через утилиту apt:
| Блок кода | ||
|---|---|---|
| ||
sudo apt install ansible |
Пакет доступен в базовых репозиториях большинства дистрибутивов Linux.
Получение файлов для работы плейбука
| Якорь | ||||
|---|---|---|---|---|
|
| Примечание |
|---|
NAICE является лицензируемым продуктом, для активации функционала необходима лицензия. См. v0.8_ru_2. Лицензирование. На момент установки наличие лицензии необязательно, активировать продукт можно. До активации лицензии используется демо режим, в котором ограничено максимально количество сетевых устройств и активных эндпоинтов количеством 15 шт. |
Для разворачивания системы необходимо поместить приложенный архив ansibleNaice-v0.8.tar.gz на хост, с которого будет осуществляться запуск плейбука, в отдельную папку.
| Блок кода | ||
|---|---|---|
| ||
wget https://docs.eltex-co.ru/download/attachments/612051146/ansibleNaice-v0.8.tar.gz |
Затем необходимо распаковать архив:
| Блок кода | ||
|---|---|---|
| ||
tar -xzvf ansibleNaice-v0.8.tar.gz |
Предварительная подготовка перед установкой
Подготовка хоста, с которого будет выполняться запуск плейбуков Ansible
Установите утилиту
sshpass, если она не установлена, командой:Блок кода language bash sudo apt install sshpass
Опционально: требуется только если планируется разворачивать СУБД Postgresql в виде deb-пакетов (по умолчанию установка выполняется в виде docker-контейнеров). Установите коллекции Ansible, необходимые для работы плейбуков:
Блок кода language bash ansible-galaxy collection install community.postgresql
Настройка доступа к хостам для установки
| Якорь | ||||
|---|---|---|---|---|
|
Для настройки хоста, на который будет выполняться развертывание системы, требуется отредактировать файл
hosts.yml. В переменнойansible_hostнеобходимо указать IP-адрес или доменное имя целевого хоста:Блок кода language yml --- common: hosts: common_host: ansible_host: <IP-адрес или доменное имя хоста для NAICE>Примечание Указанный IP-адрес или доменное имя хоста будет добавлен в параметр в Subject Alternative Name при генерации самоподписанного сертификата во время установки сервисов NAICE.
Создать конфигурационный файл
ansible.cfgиз шаблона:Блок кода language bash cp -v ansible.cfg.template ansible.cfg
- Настроить режим доступа к хосту по SSH в файле
ansible.cfgв зависимости от предпочитаемого варианта:по логину/паролю:
Блок кода [defaults] inventory = hosts.yml host_key_checking = False deprecation_warnings = False
и дополнить
hosts.yml:Блок кода language yml --- common: hosts: common_host: ansible_host: <IP-адрес или доменное имя хоста для NAICE> ansible_user: <логин пользователя> ansible_ssh_pass: <пароль пользователя> ansible_become_pass: <пароль для повышения привилегий (sudo)>по ключу (предварительно необходимо сгенерировать и поместить ключ на целевой хост):
Блок кода [defaults] inventory = hosts.yml host_key_checking = True private_key_file = <путь к файлу ключа> deprecation_warnings = False
Проверить корректность указанных настроек и наличие доступа до удаленного хоста с помощью команд:
Блок кода ansible all --list-hosts # проверить список хостов ansible all -m ping # проверить доступ до хостов
Пример вывода, если хост доступен:
Блок кода language bash common_host | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Проверка доступонсти центрального сервера лицензирования компании "Элтекс" (Online ELM):
Между NAICE и ELM должна быть обеспечена сетевая связность. Для проверки доступности можно выполнить на хосте с NAICE команду:
| Блок кода |
|---|
curl -k https://elm.eltex-co.ru:8099/elm/Hello |
Если сервер ELM доступен, то вывод команды будет иметь вид:
| Блок кода |
|---|
{"status":2,"result":"OK","server-info":{"version":"1.5","build":"10","root":true,"serverType":"elm","daemonMode":"server","serverMode":"root","protocolSupported":2,"protocolActual":4,"server-type":"elm","protocol-supported":2,"protocol-actual":4}} |
Настройка подключения к серверу лицензирования Onliine ELM через HTTP-proxy
Система NAICE поддерживает подключение к серверу лицензирования Online ELM через HTTP-proxy сервер.
Поддерживаемые режимы работы:
Подключение через HTTP-proxy: поддержана возможность аутентифкации на прокси-сервере по лигину паролю или без аутентифкации
- Подключение через HTTPS-proxy не поддерживается
Для настройки подключения через HTTP-proxy сервер необходимо задать следующие параметры в файле конфигурации group_vars/all.yml:
| Блок кода |
|---|
gulo_proxy_host: "<IP-адрес HTTP-proxy сервера>" gulo_proxy_port: "<порт HTTP-proxy сервера>" gulo_proxy_login: "<логин для аутентификации на HTTP-proxy сервере>" gulo_proxy_password: "<пароль для аутентификации на HTTP-proxy сервере>" |
По умолчанию все параметры имеют пустые значения, что означает прямое подключение к серверу Online ELM.
Если аутентифкация на HTTP-proxy сервере не используется - переменные gulo_proxy_login и gulo_proxy_password необходимо оставить пустыми.
Между NAICE и HTTP-proxy сервером, через который будет проходить трафик до сервера Online ELM, должна быть обеспечена стабильная сетевая связность. Для проверки доступности сервера лицензирования через HTTPS-proxy сервер можно выполнить на хосте с NAICE следующие команды:
- Для прокси без аутентификации:
| Блок кода |
|---|
curl -k -x http://<IP адрес HTTP-proxy>:<порт HTTP-proxy> https://elm.eltex-co.ru:8099/elm/Hello |
- Для прокси с аутентификацией:
| Блок кода |
|---|
curl -k -x http://http://user:password@<IP адрес HTTP-proxy>:<порт HTTP-proxy>https://elm.eltex-co.ru:8099/elm/Hello |
Если сервер Online ELM доступен, то вывод команды будет иметь вид:
| Блок кода |
|---|
{"status":2,"result":"OK","server-info":{"version":"1.5","build":"10","root":true,"serverType":"elm","daemonMode":"server","serverMode":"root","protocolSupported":2,"protocolActual":4,"server-type":"elm","protocol-supported":2,"protocol-actual":4}} |
Указание адреса сервера лицензий (при лицензировании с Offline ELM)
В случае, если выбрана схема лицензирования с Offline ELM, необходимо указать адрес сервера в файле переменных плейбука group_vars/all.yml:
| Блок кода |
|---|
gulo_elm_server_url: https://<IP адрес Offline ELM>:<порт Offline ELM> |
По умолчанию Offline ELM запущен на порту 8099.
Если лицензирование выполняется на центральном сервере компании "Элтекс" (Online ELM), то изменять значение переменной не нужно.
Между NAICE и ELM должна быть обеспечена сетевая связность. Для проверки доступности можно выполнить на хосте с NAICE команду:
| Блок кода |
|---|
curl -k https://<IP адрес ELM>:<порт ELM>/elm/Hello |
Если сервер ELM доступен, то вывод команды будет иметь вид:
| Блок кода |
|---|
{"server-info":{"version":"1.4","build":"14","root":false,"serverType":"elm","daemonMode":"server","serverMode":"offline","protocolSupported":3,"protocolActual":3,"server-type":"elm","protocol-supported":3,"protocol-actual":3},"status":2,"result":"OK"} |
Замена сертификатов по умолчанию для работы протокола EAP-PEAP (опционально)
| Якорь | ||||
|---|---|---|---|---|
|
- Для работы метода аутентифкации EAP-PEAP (по логину/паролю пользователя) требуется наличие валидного сертиката на стороне RADIUS-сервера NAICE. По умолчанию публичный сертифкат встроен в контейнер naice-radius и готов к работе. При необходимости замены данный сертифкат может быть заменен на другой. Для корректной установки потребуется:
Сертификат корневого сервера ЦС;
Сертификат для сервера NAICE;
Приватный ключ сертификата сервера NAICE.
Сертификаты требуется расположить в папке плейбуков Ansible roles/docker/files/tls.
В секции переменных плейбука
group_vars/all.yml, отвечающих за установку сертификатов для работы EAP-PEAP требуется указать переменные, чтобы включить интеграцию:Блок кода language yml # параметры сертификатов # требует настройки ТОЛЬКО ЕСЛИ планируется использовать сторонний сертификат сервера в radius # перед запуском плейбука требуется создать папку сертификатов на целевой машине и положить в неё все требуемые сертификаты # для включения установки сертификатов протокола EAP необходимо расположить файлы сертификатов сервера в папке ansible/roles/docker/files/tls radius_cert_dir_copy: false # включить копирование сертификатов из директории ansible/roles/docker/files/tls radius_certs_ca_cert_file: trusted_server.crt # имя файла корневого (CA) сертификата radius_certs_private_key_file: trusted_server.k # имя файла приватного ключа сертификата сервера radius_certs_private_key_password: # пароль к файлу приватного ключа сертификата сервера, оставьте пустым, если файл приватного ключа не запаролен radius_certs_certificate_file: trusted_server_chain.crt # имя файла сертификата сервера
Описание параметров, которые необходимо настроить для работы протокола EAP-TLS:
Параметр Назначение radius_cert_dir_copy Переменная, отвечающая за копирование сертификатов из папки на целевой хост и использование их в сервисе nacie-radius. radius_certs_ca_cert_file Имя файла корневого сертификата ЦС. radius_certs_private_key_file Имя файла приватного ключа сервера. radius_certs_private_key_password Пароль к файлу приватного ключа сервера. Если значение не указано, считается что пароль не используется. В пароле не допускается использовать символы: $, ', ", `, знаки скобок и пробел.
radius_certs_certificate_file Имя файла сертификата, который будет использоваться naice-radius при подключении пользователя по протоколу EAP-PEAP.
Добавление сертификатов для работы протокола EAP-TLS (опционально)
| Якорь | ||||
|---|---|---|---|---|
|
Для работы метода аутентификации EAP-TLS, настройка которой подробно рассмотрена в разделе v0.8_ru_4.7 Пример настройки EAP-TLS аутентификации, требуется выпустить сертификат, предназначенный для использования NAICE, и расположить его на хосте, с которого будет запускаться выполнение плейбука Ansible. Для корректной установки требуются:
Сертификат корневого сервера ЦС;
Сертификат для сервера NAICE;
Приватный ключ сертификата сервера NAICE.
Сертификаты требуется расположить в папке плейбуков Ansible roles/docker/files/eap-tls.
В секции переменных плейбука
group_vars/all.yml, отвечающих за установку сертификатов для работы EAP-TLS требуется указать переменные, чтобы включить интеграцию:Блок кода language yml # параметры для авторизации по протоколу EAP-TLS # параметры сертификатов # для включения установки сертификатов протокола EAP-TLS необходимо расположить файлы сертификатов сервера в папке ansible/roles/docker/files/eap-tls radius_eap_tls_cert_dir_copy: false # включить (true) или выключить (false) копирование сертификатов из директории ansible/roles/docker/files/eap-tls radius_eap_tls_certs_ca_cert_file: trusted_server.crt # имя файла корневого (CA) сертификата radius_eap_tls_certs_private_key_file: trusted_server.k # имя файла приватного ключа сертификата сервера radius_eap_tls_certs_private_key_password: # пароль к файлу приватного ключа сертификата сервера, оставьте пустым, если файл приватного ключа не запаролен radius_eap_tls_certs_certificate_file: trusted_server_chain.crt # имя файла серверного сертификата # настройки проверки статуса отозванных сертификатов по протоколу OCSP radius_eap_tls_ocsp_enable: 'true' # Включение проверки статуса отзыва сертификата по протоколу OCSP radius_eap_tls_ocsp_override_url: 'true' # Использовать URL сервиса OCSP из сертификата radius_eap_tls_ocsp_url: 'http://100.110.2.12/ocsp' # URL для обращения к сервису OCSP radius_eap_tls_ocsp_softfail: 'true' # Мягкая проверка доступа к серверу проверки OSCP, если сервер недоступен, процесс не завершится, а продолжится radius_eap_tls_ocsp_timeout: 0 # Таймаут обращения к серверу OSCP radius_eap_tls_ocsp_use_nonce: 'true' # Позволяет включить одноразовый код в запрос - nonce, который может быть включен в соответствующий ответ
Описание параметров, которые необходимо настроить для работы протокола EAP-TLS:
Параметр Назначение radius_eap_tls_cert_dir_copy Переменная, отвечающая за копирование сертификатов из папки на целевой хост и использование их в сервисе nacie-radius. radius_eap_tls_certs_ca_cert_file Имя файла корневого сертификата ЦС. radius_eap_tls_certs_private_key_file Имя файла приватного ключа сервера. radius_eap_tls_certs_private_key_password Пароль к файлу приватного ключа сервера. Если значение не указано, считается что пароль не используется. В пароле не допускается использовать символы: $, ', ", `, знаки скобок и пробел.
radius_eap_tls_certs_certificate_file Имя файла сертификата, который будет использоваться naice-radius при подключении пользователя по протоколу EAP-TLS. radius_eap_tls_ocsp_enable Включить проверку статуса отзыва сертификата по протоколу OCSP (false | true). По умолчанию false (проверка отключена). radius_eap_tls_ocsp_override_url Откуда брать URL OCSP-сервера: false - использовать URL из сертификата клиента; true - использовать URL из настройки radius_eap_tls_ocsp_url. По умолчанию false. radius_eap_tls_ocsp_url URL для обращения к OCSP-серверу (разрешен только http-режим). radius_eap_tls_ocsp_softfail Поведение в случае недоступности OCSP-сервера (false | true): false - прекратить аутентификацию, если не удается получить доступ; true - продолжить аутентификацию без проверки отзыва сертификата, если OCSP-сервер не доступен. radius_eap_tls_ocsp_timeout Таймаут обращения к серверу OCSP (секунды). По умолчанию 0. radius_eap_tls_ocsp_use_nonce Включить одноразовый код nonce в запрос на проверку сертификата для предотвращения подмены запроса (false | true): false - не включать, true - включить. По умолчанию true.
Прочие переменные (опционально)
При необходимости измените значения других переменных окружения в group_vars/all.yml. Например, можно изменить директорию установки сервисов NAICE или установить адрес NAICE, отличный от адреса управления.
Установка NAICE
| Якорь | ||||
|---|---|---|---|---|
|
Для установки сервисов NAICE используется плейбук install-naice.yml. В зависимости от указанного в переменной externally_installed_postgres в файле group_vars/all.yml СУБД POstgresql может быть установлена в виде контейнера докер или в виде deb-пакетов. По умолчанию установка СУБД Postgresql выполняется в контейнере вместе с с остальными сервисами NAICE.
Запустите плейбук install-naice.yml для установки движка Docker, плагина Docker-compose и запуска через этот плагин сервисов NAICE:
если PostgreSQL планируется устанавливать в docker-контейнере (по умолчанию):
Блок кода language bash ansible-playbook install-naice.yml
если PostgreSQL планируется устанавливать в виде deb-пакетов:
Примечание Установка PostgreSQL как сервиса доступна только на хост с операционной системой Ubuntu 22.04 и Ubuntu 24.04.
Блок кода language bash ansible-playbook install-naice.yml -e "externally_installed_postgres=True"
| Примечание |
|---|
Во время установки сервисов NAICE для пользовательских интерфейсов lemmus, gavia и larus автоматически выполняется генерация самоподписанного сертификата. При наличии собственного заверенного сертификата после установки сервисов предусмотрена возможность заменить самоподписанный сертификат на собственный. Подробную информацию об использовании сертификатов безопасности можно найти здесь. |
| Примечание |
|---|
Время запуска контейнеров в связи с использованием механизма healthcheck для проверки успешности старта сервисов может занять до нескольких минут. Дождитесь полного выполнения плейбука. |
Проверка состояния сервисов после установки
| Якорь | ||||
|---|---|---|---|---|
|
Проверить успешность запуска контейнеров можно, перейдя в директорию для установки NAICE (по умолчанию - /etc/docker-naice/ ) и выполнив команду для просмотра списка и статуса контейнеров docker compose ps -a. Вывод команды должен быть примерно следующим:
| Блок кода | ||
|---|---|---|
| ||
$ sudo docker compose ps -a WARN[0000] /etc/docker-naice/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS naice-aquila naice-release.registry.eltex.loc/naice-aquila:0.8 "java -cp @/app/jib-…" naice-aquila 3 hours ago Up 3 hours (healthy) 0.0.0.0:49->49/tcp, [::]:49->49/tcp, 0.0.0.0:8091-8092->8091-8092/tcp, [::]:8091-8092->8091-8092/tcp naice-gavia naice-release.registry.eltex.loc/naice-gavia:0.8 "java -cp @/app/jib-…" naice-gavia 3 hours ago Up 3 hours (healthy) 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp naice-gulo naice-release.registry.eltex.loc/naice-gulo:0.8 "java -cp @/app/jib-…" naice-gulo 3 hours ago Up 3 hours (healthy) 0.0.0.0:8089-8090->8089-8090/tcp, [::]:8089-8090->8089-8090/tcp naice-lemmus naice-release.registry.eltex.loc/naice-lemmus:0.8 "java -cp @/app/jib-…" naice-lemmus 3 hours ago Up 3 hours (healthy) 0.0.0.0:8083->8083/tcp, [::]:8083->8083/tcp naice-lepus naice-release.registry.eltex.loc/naice-lepus:0.8 "java -cp @/app/jib-…" naice-lepus 3 hours ago Up 3 hours (healthy) 0.0.0.0:8087->8087/tcp, [::]:8087->8087/tcp, 0.0.0.0:67->1024/udp, [::]:67->1024/udp naice-nats naice-build-hosted.registry.eltex.loc/naice/nats:0.7.1 "docker-entrypoint.s…" nats 3 hours ago Up 3 hours (healthy) 0.0.0.0:4222->4222/tcp, [::]:4222->4222/tcp, 0.0.0.0:6222->6222/tcp, [::]:6222->6222/tcp, 0.0.0.0:7777->7777/tcp, [::]:7777->7777/tcp, 0.0.0.0:8222->8222/tcp, [::]:8222->8222/tcp naice-ovis naice-release.registry.eltex.loc/naice-ovis:0.8 "java -cp @/app/jib-…" naice-ovis 3 hours ago Up 3 hours (healthy) 0.0.0.0:5701->5701/tcp, [::]:5701->5701/tcp, 0.0.0.0:8084-8085->8084-8085/tcp, [::]:8084-8085->8084-8085/tcp naice-radius naice-release.registry.eltex.loc/naice-radius:0.8 "/docker-entrypoint.…" naice-radius 3 hours ago Up 3 hours (healthy) 0.0.0.0:1812-1813->1812-1813/udp, [::]:1812-1813->1812-1813/udp, 0.0.0.0:9812->9812/tcp, [::]:9812->9812/tcp naice-ursus naice-release.registry.eltex.loc/naice-ursus:0.8 "java -cp @/app/jib-…" naice-ursus 3 hours ago Up 3 hours (healthy) 0.0.0.0:8081-8082->8081-8082/tcp, [::]:8081-8082->8081-8082/tcp naice-vulpus naice-release.registry.eltex.loc/naice-vulpus:0.8 "java -cp @/app/jib-…" naice-vulpus 3 hours ago Up 3 hours (healthy) 0.0.0.0:5702->5702/tcp, [::]:5702->5702/tcp, 0.0.0.0:8086->8086/tcp, [::]:8086->8086/tcp, 0.0.0.0:8088->8088/tcp, [::]:8088->8088/tcp naice-web naice-release.registry.eltex.loc/naice-web:0.8 "/docker-entrypoint.…" naice-web 3 hours ago Up 3 hours (healthy) 80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:80->4200/tcp, [::]:80->4200/tcp |
Приложения
Приложение A. Значение переменных окружения из .env
| Раскрыть | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Условные обозначения:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||