Обновление с версии 3.14.15 на 3.14.16









1 Подготовительные действия на ecss2

    1. Выполнить полный «бэкап» (см. «Регламентное обслуживание и резервное копирование»).
    2. Если нужны последние данные биллинга, то необходимо финализировать текущую cdr и скачать CDR файлы на удаленный сервер:
      /domain/test_domain/cdr/make_finalize_cdr 
      Created file(s): cdr_20250822_11_51_16_1_c.csv
    3. Включить настройку для автоматической синхронизации файлов, находящихся в сплите (по большему размеру). Подробнее см. "Проблемы связанные с возникновением split-brain" .
      sudo gluster volume set ecss_volume cluster.favorite-child-policy size
    4. Остановить репликации MySQL.
      Убедитесь, что значения параметров Slave_IO_Running и Slave_SQL_Running равны No.
      sudo mysql -uroot -p -e 'STOP SLAVE;'
      sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"

      sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
      
      . . .
                   Slave_IO_Running: No
                  Slave_SQL_Running: No
      . . .
    5. При обновлении кластера следует обновлять сервера по очереди. Таким образом, при обновлении один из серверов будет всегда запущен и работа сервисов не будет прервана. Для разделения кластера следует использовать инструмент ecss-control на обоих серверах (Описание команд утилиты приведено в «Приложении Н»).
      Обмен sip сигнализацией происходит через SIP-VRRP IP адрес. Аналогичным образом, через MySQL-VRRP IP адрес, происходит подключение к MySQL. Этот функционал реализован для возможности миграции Ip адреса на другой хост в случае падения/отключения/техобслуживания основного хоста. Контроль миграции IP адресов осуществляется сервисом keepalive на каждом хосте. Для перевода трафика на первый сервер (ecss1), необходимо выключить keepalive на втором хосте (ecss2). В этом случае оба SIP-VRRP IP адреса, а так же  MySQL-VRRP IP адрес, будут находится на первом хосте (ecss1). Выполнить следующую команду:
      sudo systemctl disable --now keepalived.service
    6. Командой ifconfig проверить, что все VRRP IP-адреса находятся на ecss1 (VRRP-mysql/VRRP-SIP1/VRRP-SIP2).
      ifconfig
    7. На ecss1 выполнить разделение SSW на два независимых сервера следующей командой:

      Команда ecss-control работает со стандартными именами хостов : ecss1/ecss2.


      sudo ecss-control detach
      Проверить статус:
      sudo ecss-control status

      sudo ecss-control detach
      detach host: ecss2, ip: 10.0.10.82
      complete
      sudo ecss-control status
      locked ip: 10.0.10.82

      Если после разделения на первом хосте при попытке вызова/регистрации появляется ошибка "503 Service Unavailable". То на проблемном хосте выполните следующие команды:  ecss-attach ecss-pa-sip

      ecss-attach ecss-pa-sip
      *********************************************************************************
      ! You attached to systemd-service ecss-pa-sip: sip1@ecss1.                         !
      ! To exit, press Ctrl+C, Ctrl+C.                                                   !
      *********************************************************************************
      Erlang/OTP 21 [erts-10.3.5.10] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
       
      Eshell V10.3.5.10  (abort with ^G)
      (sip1@ecss1)1> sip_config:tring_is_connected().
      false
      (sip1@ecss1)2> sip_config:tring_is_connected(true).
      ok
      (sip1@ecss1)3> sip_config:tring_is_connected().   
      true


    8. После разделения кластера необходимо замаскировать все ноды на сервере, который будет обновляться первым:
      sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

      Нода sorm идет одна на кластер. В случае её работы на ecss1, при выполнении приложенной команды будет  уведомление.

      Unit /etc/systemd/system/ecss-sorm.service is masked, ignoring.

      Данное сообщение не является ошибкой. Продолжать выполнение процедуры.

    9. Выполнить резервное копирование баз данных.

      Перед созданием резервной копии убедитесь, что в вашей БД таблица tolltickets не содержит устаревших полей командой:

      sudo mysql -uroot -p -e "SHOW CREATE TABLE ecss_calls_db.tolltickets\G;" | grep 'ss_info' || echo "Поле не найдено"

      Если команда показала "`ss_info` text COLLATE latin1_general_ci,", то приведите таблицу к актуальному состоянию командой:

      sudo mysql -uroot -p -e "ALTER TABLE ecss_calls_db.tolltickets DROP COLUMN ss_info;"



      sudo mysqldump -uroot -p --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers --databases ecss_address_book ecss_audit ecss_calls_db ecss_dialer_db ecss_meeting_db ecss_numbers_db ecss_statistics ecss_subscribers ecss_system web_conf history_db > ./all_dump.sql
    10. Добавить в конфигурацию mysql параметры skip-log-bin и skip-slave-start на ecss2 (чтобы избежать записи в бинарные логи процесса удаления БД), выполнив команду :
      sudo sed -i  '40i\skip-log-bin\nskip-slave-start' /etc/mysql/mysql.conf.d/mysqld.cnf
    11. Удалить резервный файл конфигурации (чтобы при удалении, ecss-mysql не загрузил конфигурацию из него):
      sudo rm /var/lib/ecss/ecss-mysql/backup/mysqld.cnf
    12. Перезапустить ecss-mysql с новой конфигурацией:
      sudo systemctl restart mysql.service
    13. Для корректной работы репликации после обновления необходимо сохранить конфигурационные файлы ecss-mysql, поэтому делаем отдельный backup для файлов до обновления:
      sudo cp -a /etc/ecss/ecss-mysql ~/ecss-mysql-etc-backup
    14. Удалить ecss-web-conf и ecss-mysql, вместе с конфигурационными файлами (чтобы не было ошибок конфигураций при обновлении):

      В вопросах измените IP MySQL на локальный IP БД

      sudo dpkg-reconfigure ecss-web-conf

      sudo apt purge ecss-web-conf

      На вопросы об удалении БД → положительно отвечаем на вопросы - удалить все базы данных

      sudo apt purge ecss-mysql
    15. Проверьте, что БД удалены, выполнив команду, в выводе не должно быть других БД кроме системных ('information_schema','mysql','performance_schema','sys'):
      sudo mysql -uroot -p -e "SHOW DATABASES;"
    16. Если используется ecss-call-api и ecss-elph-api, то их нужно удалить (чтобы не было конфликтов зависимостей при обновлении).
      sudo apt-get remove ecss-call-api
      sudo apt-get remove ecss-elph-api
    17. Удалить skip-log-bin из файла конфигурации:
      sudo sed -i '/skip-log-bin/d' /etc/mysql/mysql.conf.d/mysqld.cnf
    18. Зафиксировать пакеты mysql (чтобы пакетный менеджер при обновлении системы не удалил mysql):
      sudo apt-mark hold mysql-*
    19. Установить версию пакета nodejs (чтобы корректно было выполнено обновление дистрибутива):
      sudo apt install nodejs=8.10.*

2 Обновление операционной системы Ubuntu 18.04 на ecss2

    1. Обновление с Ubuntu 18.04 (Bionic) до Ubuntu 20.04 (Focal)
      do-release-upgrade -m server

      В случае получения сообщения:

      Checking for a new Ubuntu release
      Please install all available updates for your release before upgrading.

      выполните следующие команды:

      sudo apt update
      sudo apt upgrade
      sudo apt dist-upgrade

      так же может потребоваться обновить пакет ecss-user следующей командой:

      sudo apt install ecss-user

      и затем повторить команду do-release-upgrade -m server:

      do-release-upgrade -m server



      Во время обновления принять все новые конфигурации пакетов ecss.


      В процессе выполнения обновления, система может предложить выполнить перезагрузку. Нужно согласится.

    2. Проверка сервиса dnsmasq.
      Если после обновления сервис dnsmasq не находится в активном состоянии :
      systemctl is-active dnsmasq

      systemctl is-active dnsmasq
      failed
      Выполнить следующие команды:
      Удалить оставшийся конфигурационный файл:
      sudo rm /etc/dnsmasq.d/lxd
      Перезапустить сервис dnsmasq :
      sudo systemctl restart dnsmasq
      Проверить статус сервиса:
      systemctl is-active dnsmasq
      active

      После этих действий, сервис должен быть активным и работать без ошибок.

    3. Обновление пакетов mysql.
      Отключить фиксацию пакетов:
      sudo apt-mark unhold mysql-*
      Обновить mysql до версии 8.0:
      sudo apt install mysql-server

      Важно! Во время обновления mysql необходимо оставить старую конфигурацию файла /etc/mysql/mysql.conf.d/mysqld.conf, чтобы не потерять выставленные флаги.

      После обновления необходимо актуализировать настройки mysql для версии 8.0:
      sudo sed -i -e 's/^max_allowed_packet.*/max_allowed_packet = 64M/' \
             -e 's/^thread_stack.*/thread_stack = 256K/' /etc/mysql/mysql.conf.d/mysqld.cnf
    4. Закончить обновление хоста следующей  командой:
      sudo apt full-upgrade
      Проверить версию Ubuntu следующей командой:
       lsb_release -a

      lsb_release -a
      No LSB modules are available.
      Distributor ID:	Ubuntu
      Description:	Ubuntu 20.04.6 LTS
      Release:	20.04
      Codename:	focal
    5. Обновление c Ubuntu 20.04 (Focal) до Ubuntu 22.04 (Jammy)
      do-release-upgrade -m server

      При сообщении системы:

      do-release-upgrade -m server
      Checking for a new Ubuntu release
      You have not rebooted after updating a package which requires a reboot. Please reboot before upgrading.

      выполнить перезагрузку следующей командой:

      sudo reboot

      а затем повторить команду:

      do-release-upgrade -m server



      Во время обновления принять все новые конфигурации пакетов ecss.

      В процессе выполнения обновления система может предложить выполнение перезагрузки. Нужно согласится.

    6. После завершения обновления выполнить команду:
      sudo apt autoremove

      Данный шаг может выполняться достаточно долго


3 Подготовка к обновлению сервисов SSW на ecss2

    1. Выполнить сплит на ecss2:

      Команда ecss-control работает со стандартными именами хостов : ecss1/ecss2.


      sudo ecss-control detach
    2. Актуализировать репозиторий ssw:
      sudo sh -c "echo deb [arch=amd64] http://archive.eltex.org/ssw/jammy/3.14.16.1 stable main extras external > /etc/apt/sources.list.d/eltex-ecss10-stable.list"
    3. Временно зафиксировать версию пакетов ecss-*, на которые надо будет обновиться:
      sudo sh -c "echo 'Package: ecss-*\nPin: version 14.16.1.*\nPin-Priority: 1001\n\nPackage: erlang*\nPin: version 2:24.3.10*\nPin-Priority: 1001' >> /etc/apt/preferences.d/eltex-ecss10"
    4. Выполнить обновление пакетов:
      sudo apt update
    5. Выключаем nginx сервис:
      sudo systemctl disable --now nginx

4 Обновление сервисов SSW на ecss2

    1. Обновление пакета ecss-dns-env:
      sudo apt install ecss-dns-env

      При обновлении нужно применить новые конфигурационные файлы (подтверждением -Y)


      После обновления, нужно актуализировать конфигурацию, выполнив команду. Ответы на вопросы аналогичны процедуре инсталляции:
      sudo dpkg-reconfigure ecss-dns-env
    2. Выполнить обновление пакета ecss-user:

      sudo apt install ecss-user
    3. Обновление пакета ecss-mysql:

      Перед обновлением пакета  ecss-mysql для сохранения совместимости с mysql v5.7, надо включить в конфигурации mysql, по умолчанию, устаревший плагин :

      sudo sh -c "echo '[mysqld]\ndefault_authentication_plugin = mysql_native_password' >>  /etc/mysql/conf.d/plugin.cnf"


      Перезапустить MySQL:

      sudo systemctl restart mysql

       Установить пакет ecss-mysql:

      sudo apt install ecss-mysql

      При установке на вопрос "Path for external data-directory, where will be created tables of databases" надо указать внешнюю директорию хранения таблиц баз данных, либо принять значение по умолчанию. 

      ответы на вопросы  конфигураторa
      Обратно переместить backup конфигурационных файлов ecss-mysql (сохраненный ранее):

      sudo rm -rf /etc/ecss/ecss-mysql && sudo cp -a ~/ecss-mysql-etc-backup /etc/ecss/ecss-mysql

      Проверьте и при необходимости актуализируйте параметры в "/etc/ecss/ecss-mysql/mysql-checker.conf".

      Переменная "MASTER_HOST_IP" - это VRRP-адрес для MySQL, определенный в конфигурации keepalived .

    4. Включите ecss-mysql-checker.timer:
      sudo systemctl enable --now ecss-mysql-checker.timer
    5. Загрузка резервной копии баз данных:
      Перед загрузкой резервной копии необходимо модифицировать его, указав внешнюю директорию хранения таблиц баз данных. Так как таблицы баз данных ecss-mysql устанавливаются в отдельной директории (/var/lib/ecss-mysql), необходимо для всех таблиц в резервной копии указать внешнюю директорию, иначе они будут создаваться в стандартной data-директории (/var/lib/mysql). Также при загрузке резервной копии отключаем запись бинарных логов.
      sudo sed -E "s/(ENGINE=(MyISAM|InnoDB))/\1 DATA DIRECTORY = '\/var\/lib\/ecss-mysql'/g" all_dump.sql | (echo "SET sql_log_bin = 0;"; cat -) | sudo mysql -uroot -p
      После загрузки резервной копии сделайте реконфигурирование пакета ecss-mysql, чтобы прошли необходимые миграции v3.14.16, которые отсутствуют в резервной копии.
      sudo dpkg-reconfigure ecss-mysql
      Перезапустить репликацию командой и убедится, что slave сервер подтянул все изменения от мастера (дождаться, пока переменная "Seconds_Behind_Master" не станет равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File).
      sudo mysql -uroot -p -e "START SLAVE;"
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
      [sudo] password for abf: 
                    Master_Log_File: server-mysql-bin.001152
              Relay_Master_Log_File: server-mysql-bin.001152
              Seconds_Behind_Master: 0

      Удалить параметр skip-slave-start из конфигурации mysql и резервного файла:
      sudo sed -i '/skip-slave-start/d' /etc/mysql/mysql.conf.d/mysqld.cnf 
      sudo sed -i '/skip-slave-start/d' /var/lib/ecss/ecss-mysql/backup/mysqld.cnf

      Перезапускать mysql не обязательно - данная опция влияет только на состояние SLAVE при старте mysql, а его запустили напрямую.

    6. Обновление Erlang и SSW.
      Перед обновлением включить сервисы ssw следующими командами: 
      sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

      sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

      Перед обновлением, удалить устаревшую версию Erlang. Команда ниже обновит Erlang до версии 24.3, а также обновит до новейшей версии пакеты ecss-node и ecss-utils:
      sudo apt remove erlang-base-hipe

      Если Erlang  не обновился, удалением старого пакета, то сначала обновить ecss-node и ecss-utils, а затем обновить весь Erlang:

      sudo apt install ecss-node ecss-utils
      sudo apt install erlang


      После обновления Erlang демаскировать сервис, который был маскирован при удалении erlang-base-hipe:
      sudo systemctl unmask epmd.socket epmd.service
    7. Запуск SSW на ecss2.
      Перед запуском изменить имя кластера на отличное от имени кластера указанном на ecss1. Например, добавьте постфикс upd в имя кластера:

      Требуется по причине того, что mycelium1 и mycelium2 находят друг друга и в случае разных версий  - mycelium на ecss2 падает. 

      sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
      {mycelium_broker, [
          {cluster_name, 'test_cluster_upd'},
      Так же меняем значение таймера для ds сервиса:
      sed -i 's/{cluster_timeout, 60000}/{cluster_timeout, 10800000}/g' /etc/ecss/ecss-ds/ds1.config
      запустить следующие сервисы:
      ecss-mycelium
      sudo systemctl start ecss-mycelium
      ecss-ds
      sudo systemctl start ecss-ds
      ecss-core
      sudo systemctl start ecss-core

      !!!ПОКА НЕ ЗАПУСКАЕМ PA-SIP!!!

      ecss-mediator
      sudo systemctl start ecss-mediator

      Если лицензия поддерживает СОРМ3, то запустить также сервис ecss-sorm.

      sudo systemctl start ecss-sorm

      Если сервис ecss-sorm оказался замаскирован, то выполнить следующие команды:

      sudo systemctl unmask ecss-sorm
      sudo systemctl start ecss-sorm


      Для корректной работы SORM3 необходимо выполнить коррекцию команды для sorm экстрактора. Данную команду необходимо выполнить для каждого домена в SSW. 

      /domain/<Имя_домена>/sorm3/set extractor_node sorm1@ecss2


      /domain/test_domain/sorm3/info     
      ┌──────────────────┬───────────┬───────────┐
      │     Property     │  Domain   │   Value   │
      ├──────────────────┼───────────┼───────────┤
      │adaptation        │test_domain│undefined  │
      │enabled           │test_domain│false      │
      │entrypoint_profile│test_domain│           │
      │extractor_ip      │test_domain│127.0.0.1  │
      │extractor_node    │test_domain│sorm1@ecss1
      └──────────────────┴───────────┴───────────┘

      /domain/test_domain/sorm3/set extractor_node sorm1@ecss2
      Property "extractor_node" successfully changed from: 
      sorm1@ecss1
         to
      sorm1@ecss2.

      /domain/test_domain/sorm3/info                                       
      ┌──────────────────┬───────────┬───────────┐
      │     Property     │  Domain   │   Value   │
      ├──────────────────┼───────────┼───────────┤
      │adaptation        │test_domain│undefined  │
      │enabled           │test_domain│false      │
      │entrypoint_profile│test_domain│           │
      │extractor_ip      │test_domain│127.0.0.1  │
      │extractor_node    │test_domain│sorm1@ecss2
      └──────────────────┴───────────┴───────────┘

      Команду повторить для всех доменов в SSW

    8. Проверить статус сервисов, для этого выполнить в CoCon команду system-status:
      /system-status 
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────┬────────────┬──────┐
      │ │     Node      │          Release           │ Erlang nodes  │Mnesia nodes│Uptime│
      ├─┼───────────────┼────────────────────────────┼───────────────┼────────────┼──────┤
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss2    │not running │2m 27s│
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss2      │ds1@ecss2   │2m 32s│
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss2      │md1@ecss2   │2m 16s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss2│not running │2m 39s│
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │sorm1@ecss2    │not running │1m 56s│
      └─┴───────────────┴────────────────────────────┴───────────────┴────────────┴──────┘
      
      All services are started.
      
        Active media resource selected list specific:
      ┌─────────────┬───────────┬─────────────┬───────────┬───────────┐
      │    Node     │    MSR    │     MSR     │ Cc-status │ Cc-uptime │
      │             │           │   version   │           │           │
      ├─────────────┼───────────┼─────────────┼───────────┼───────────┤
      │ core1@ecss2 │ msr.ecss1 │ 3.14.15.243 │ connected │ 00:00:10  │
      │             │ msr.ecss2 │ 3.14.15.243 │ connected │ 00:00:10  │
      └─────────────┴───────────┴─────────────┴───────────┴───────────┘
    9. Обновление пакета ecss-restfs.

      Принять все новые конфигурационные файлы, выбирая  Y.

      sudo apt install ecss-restfs
    10. Обновление пакета ecss-media-server.
      Предварительно отключить регистрацию на рабочий хост ecss1. Для этого надо закомментировать в конфигурационном файле строку с realm рабочего хоста (в примере realm="sip:10.0.20.81:5000"), следующей командой (добавив <!- - вначале строки , и - -> в конце строки ), следующей командой:
      sudo nano /etc/ecss/ecss-media-server/conf.d/default.xml
      <?xml version="1.0"?>
      <config>
        <accounts>
                <!--<dynamic msr_name="msr.ecss2" realm="sip:10.0.20.81:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>-->
                <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.82:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
        </accounts>
      </config>
      Выполнить обновление:
      sudo apt install ecss-media-server
      Актуализировать конфигурацию:
      sudo dpkg-reconfigure ecss-media-server
      Выполнить проверку, и при необходимости отредактировать файл командой :
      sudo nano /etc/ecss/ecss-media-server/config.xml

      <?xml version="1.0" encoding="utf-8"?>
      <config date="16:54:35 20.02.2025">
        <general log-level="3" log-rotate="yes" max-calls="8192" max-vid-calls="8192" max-in-group="512" load-sensor="media" load-delta="10" calls-delta="100" spool-dir-size="100M" log-name="msr.log" log-path="/var/log/ecss/media-server" use-srtp="disabled" enable-ice-transport="no" ice-update="no" aggressive-ice="yes" stun-server="" suspicious-mode="no"/>
        <transport bind-addr="10.0.20.80" port="5040" transport="udp+tcp"/>
        <!-- By default configured public TURN-server -->
        <turn-server use-turn="no" host="numb.viagenie.ca" user="webrtc@live.com" password="muazkh"/>
        <media mixer-clock-rate="8000" use-vad="no" cng-level="0" jb-size="60" rtcp-timeout="0" rtp-timeout="350" udp-src-check="no" cn-multiplier="3" port-start="12000" port-range="2048" tias-in-sdp="no" thread-cnt="2" vid-enc-threads="2" vid-dec-threads="2" video-conf-layout="evenly" keyframe-interval="1000" vid-decode-delay="100" silence-threshold="-30" dtmf-flash-disable="no" video-dscp="0" other-dscp="0" dummy-video-src="/usr/share/ecss-media-server/video/dummy_video.yuv" video-enc-width="640" video-enc-height="360" finalsilence="1000" rtcp-stat-dump="yes" dtmf-tg-fpc-loop="10" dtmf-tg-fit="1" dtmf-tg-fot="2" dtmf-tg-volume="12288"/>
        <codec pcma="1" pcmu="2" ilbc="0" gsm="0" g722="3" g726="0" g729="0" speex="0" l16="0" g7221="0" opus="0" h264="1" h263-1998="2" t38="1" tel-event-pt="0"/>
        <accounts>
          <!-- <dynamic msr_name="msr.name"
                  realm="sip:127.0.0.1:5000"
                  dtmf_mode="rfc+inband+info"
                  auth_name="user"
                  auth_password="password" /> -->
        </accounts>
        <pbyte>
          <mcc bind-addr="10.0.20.82" port="5700"/>
        </pbyte>
        <conf_dir path="/etc/ecss/ecss-media-server/conf.d"/>
        <metrics enable="no" msr_name="msr" port="8100"/>
        <rtp>
          <auto addr-v4=""/>
        </rtp>
      </config>
    11. Обновление пакета ecss-media-resources:
      sudo apt install ecss-media-resources
    12. Обновление пакета ecss-web-conf

      sudo apt install ecss-web-conf
    13. Обновление пакета ecss-teleconference-ui

      sudo apt install ecss-teleconference-ui

      Обновление пакета ecss-crm-server

      sudo apt install ecss-crm-server

      Обновление пакета ecss-cc-ui

      sudo apt install ecss-cc-ui

      Обновление пакета ecss-call-api

      sudo apt install ecss-call-api

      Обновление пакета ecss-elph-api

      sudo apt install ecss-elph-api
    14. Перед переводом keepalived на обновленный хост необходимо скопировать актуальную базу ds с ecss1 (иначе база регистраций будет пустая). Поэтому сначала делаем backup БД Mnesia на ecss1:
      /node/ds1@ecss1/oasys/backup
      /node/ds1@ecss1/oasys/backup      
      Backup was successfully created at the path: "/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517"
      Останавливаем ecss-ds на ecss2:
      sudo systemctl stop ecss-ds
      Командой scp копируем backup c ecss1 на ecss2.
      scp -r ecss@ecss1:/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys
      Выполняем локальную копию текущей конфигурации:
      sudo cp -a /var/lib/ecss/oasys/Mnesia.ds1@ecss2 /var/lib/ecss/oasys/Mnesia.ds1@ecss2-bkp
      Заменяем локальную конфигурацию на конфигурацию backup c ecss1:
      sudo mv /var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys/Mnesia.ds1@ecss2

      sudo chown -R ssw:ssw /var/lib/ecss/oasys
      Запустить ecss-ds и ecss-pa-sip (чтобы подгрузились актуальные регистрации абонентов):
      sudo systemctl start ecss-ds
      sudo systemctl start ecss-pa-sip
      Проверить статус сервисов командой /system-status :
      /system-status 
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────┬────────────┬──────┐
      │ │     Node      │          Release           │ Erlang nodes  │Mnesia nodes│Uptime│
      ├─┼───────────────┼────────────────────────────┼───────────────┼────────────┼──────┤
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss2    │not running │2m 27s│
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss2      │ds1@ecss2   │2m 32s│
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss2      │md1@ecss2   │2m 16s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss2│not running │2m 39s│
      │ │sip1@ecss2     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss2     │sip1@ecss2  │2m 22s│
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │sorm1@ecss2    │not running │1m 56s│
      └─┴───────────────┴────────────────────────────┴───────────────┴────────────┴──────┘
      
      All services are started.
      
        Active media resource selected list specific:
      ┌─────────────┬───────────┬─────────────┬───────────┬───────────┐
      │    Node     │    MSR    │     MSR     │ Cc-status │ Cc-uptime │
      │             │           │   version   │           │           │
      ├─────────────┼───────────┼─────────────┼───────────┼───────────┤
      │ core1@ecss2 │ msr.ecss1 │ 3.14.15.243 │ connected │ 00:00:10  │
      │             │ msr.ecss2 │ 3.14.16.1.0 │ connected │ 00:00:10  │
      └─────────────┴───────────┴─────────────┴───────────┴───────────┘
    15. Запуск сервиса keepalived
      sudo systemctl enable --now keepalived
    16. После обновления сервисов удалить файл фиксации версии ssw:
      sudo rm /etc/apt/preferences.d/eltex-ecss10


5 Подготовительные действия на ecss1

    1. Выполнить полный «бэкап» (см. «Регламентное обслуживание и резервное копирование»).
    2. Остановка репликации MySQL (на ecss2). Убедится, что значения параметров Slave_IO_Running и Slave_SQL_Running равны No.  
      sudo mysql -uroot -p -e 'STOP SLAVE;'
      sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"

      sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
      
      . . .
                   Slave_IO_Running: No
                  Slave_SQL_Running: No
      . . .
    3. Подготовить ecss1 к обновлению, для этого, перевести весь трафик на ecss2 (команда выполняется на ecss1):
      sudo systemctl disable --now keepalived.service
    4. Командой ifconfig проверьте, что все VRRP адреса  (VRRP IP-mysql / VRRP IP-SIP1 / VRRP IP-SIP2) находятся на ecss2.
      ifconfig

      Если после переключения на ecss2, при попытке вызова/регистрации появляется ошибка "503 Service Unavailable". То на проблемном хосте выполните следующие команды: ecss-attach ecss-pa-sip

      ecss-attach ecss-pa-sip
      *********************************************************************************
      ! You attached to systemd-service ecss-pa-sip: sip1@ecss1.                         !
      ! To exit, press Ctrl+C, Ctrl+C.                                                   !
      *********************************************************************************
      Erlang/OTP 21 [erts-10.3.5.10] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
       
      Eshell V10.3.5.10  (abort with ^G)
      (sip1@ecss1)1> sip_config:tring_is_connected().
      false
      (sip1@ecss1)2> sip_config:tring_is_connected(true).
      ok
      (sip1@ecss1)3> sip_config:tring_is_connected().   
      true


    5. После разделения кластера необходимо выключить все ноды на сервере ecss1:
      sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
    6. Резервное копирование баз данных (на ecss1):

      Перед созданием резервной копии убедитесь, что в вашей БД таблица tolltickets не содержит устаревших полей командой:

      sudo mysql -uroot -p -e "SHOW CREATE TABLE ecss_calls_db.tolltickets\G;" | grep 'ss_info' || echo "Поле не найдено"

      Если команда показала "`ss_info` text COLLATE latin1_general_ci,", то приведите таблицу к актуальному состоянию командой:

      sudo mysql -uroot -p -e "ALTER TABLE ecss_calls_db.tolltickets DROP COLUMN ss_info;"



      sudo mysqldump -uroot -p --verbose --single-transaction --quote-names --complete-insert --extended-insert --routines --events --triggers --databases ecss_address_book ecss_audit ecss_calls_db ecss_dialer_db ecss_meeting_db ecss_numbers_db ecss_statistics ecss_subscribers ecss_system web_conf history_db > ./all_dump.sql
    7. Добавить в конфигурацию mysql параметры skip-log-bin и skip-slave-start на ecss1 (чтобы избежать записи в бинарные логи процесса удаления БД):
      sudo sed -i '40i\skip-log-bin\nskip-slave-start' /etc/mysql/mysql.conf.d/mysqld.cnf
    8. Удалить резервный файл конфигурации (чтобы при удалении, ecss-mysql не загрузил конфигурацию из него):
      sudo rm /var/lib/ecss/ecss-mysql/backup/mysqld.cnf
    9. Перезапустить mysql с новой конфигурацией:
      sudo systemctl restart mysql.service
    10. Для корректной работы репликации после обновления необходимо сохранить конфигурационные файлы ecss-mysql, поэтому создать отдельный backup для файлов до обновления:
      sudo cp -a /etc/ecss/ecss-mysql ~/ecss-mysql-etc-backup
    11. Удалить ecss-web-conf и ecss-mysql вместе с конфигурационными файлами (чтобы не было ошибок конфигураций при обновлении):

      В вопросах измените IP MySQL на локальный IP БД


      sudo dpkg-reconfigure ecss-web-conf

      sudo apt purge ecss-web-conf

      На вопросы об удалении БД → положительно отвечаем на вопросы - удалить все базы данных


      sudo apt purge ecss-mysql
    12. Проверьте, что БД удалены командой:

      В выводе не должно быть других БД кроме системных ('information_schema','mysql','performance_schema','sys').


      sudo mysql -uroot -p -e "SHOW DATABASES;"
    13. Если используется ecss-call-api и ecss-elph-api, то удалите (чтобы не было конфликтов зависимостей при обновлении):
      sudo apt remove ecss-call-api
      sudo apt remove ecss-elph-api
    14. Удалить skip-log-bin из файла конфигурации:
      sudo sed -i '/skip-log-bin/d' /etc/mysql/mysql.conf.d/mysqld.cnf
    15. Зафиксировать пакеты mysql (чтобы пакетный менеджер при обновлении системы не удалил mysql):
      sudo apt-mark hold mysql-*
    16. Установить версию пакета nodejs (чтобы корректно было выполнено обновление дистрибутива):
      sudo apt install nodejs=8.10.*

6 Обновление  операционной системы  Ubuntu 18.04 на ecss1

    1. Обновление c Ubuntu 18.04 (Bionic) до Ubuntu 20.04 (Focal)
      do-release-upgrade -m server

      В случае получения сообщения:

      Checking for a new Ubuntu release
      Please install all available updates for your release before upgrading.

      выполните следующие команды:

      sudo apt update
      sudo apt upgrade
      sudo apt dist-upgrade

      так же может потребоваться обновить пакет ecss-user следующей командой:

      sudo apt install ecss-user

      и затем повторить команду do-release-upgrade -m server:

      do-release-upgrade -m server



      Во время обновления принять все новые конфигурации пакетов ecss.

    2. Проверка сервиса dnsmasq
      • Если после обновления сервис dnsmasq не находится в активном состоянии :
        systemctl is-active dnsmasq

        systemctl is-active dnsmasq
        failed

        Выполнить следующие команды:
        Удалить оставшийся конфигурационный файл

        sudo rm /etc/dnsmasq.d/lxd

        Перезапустить сервис

        sudo systemctl restart dnsmasq

        Проверить статус сервиса:

        systemctl is-active dnsmasq
        active

        После данных шагов, сервис должен быть активным и работать без ошибок.


      Обновление пакетов mysql.
      Убрать фиксацию пакетов:
    3. sudo apt-mark unhold mysql-*
      Обновить mysql до версии 8.0:
      sudo apt install mysql-server

      Важно! Во время обновления mysql необходимо оставить старую конфигурацию файла /etc/mysql/mysql.conf.d/mysqld.conf, чтобы не потерять выставленные флаги.

      После обновления необходимо актуализировать настройки mysql для версии 8.0:
      sudo sed -i -e 's/^max_allowed_packet.*/max_allowed_packet = 64M/' \
             -e 's/^thread_stack.*/thread_stack = 256K/' /etc/mysql/mysql.conf.d/mysqld.cnf
    4. Закончить обновление хоста командой:
      sudo apt full-upgrade
    5. Обновление с Ubuntu 20.04 (Focal) до Ubuntu 22.04 (Jammy)
      do-release-upgrade -m server

      Во время обновления принять все новые конфигурации пакетов ecss.

    6. После завершения обновления выполните:
      sudo apt autoremove

      Данный шаг может выполняться достаточно долго


7 Подготовка к обновлению сервисов SSW на ecss1

    1. Перед обновлением актуализировать репозиторий ssw:
      sudo sh -c "echo deb [arch=amd64] http://archive.eltex.org/ssw/jammy/3.14.16.1 stable main extras external > /etc/apt/sources.list.d/eltex-ecss10-stable.list"
    2. Временно зафиксировать версию пакетов ecss-*, на которые надо будет обновиться:
      sudo sh -c "echo 'Package: ecss-*\nPin: version 14.16.1.*\nPin-Priority: 1001\n\nPackage: erlang*\nPin: version 2:24.3.10*\nPin-Priority: 1001' >> /etc/apt/preferences.d/eltex-ecss10"
    3. Обновить пакеты командой:
      sudo apt update


8 Обновление сервисов SSW на ecss1

    1. Обновление пакета ecss-dns-env.
      sudo apt install ecss-dns-env
      При обновлении принимать новые конфигурационные файлы -Y.
       
      После обновления актуализировать конфигурацию командой:
      sudo dpkg-reconfigure ecss-dns-env
    2. Обновление пакета ecss-user:
      sudo apt install ecss-user
    3. Обновление пакета ecss-mysql:
      Т.к. оба хоста обновятся до mysql v8.0, надо отключить плагин по умолчанию в конфигурации mysql и поменять плагин пользователей на ecss2
      sudo rm /etc/mysql/conf.d/plugin.cnf
      sudo mysql -uroot -p -N -e "SELECT CONCAT('ALTER USER \`', user, '\`@\`', host, '\` IDENTIFIED WITH caching_sha2_password;')
      FROM mysql.user
      WHERE plugin='mysql_native_password'  AND user NOT IN ('root','replica','debian-sys-maint','mysql.session','mysql.sys');" | sudo mysql

      Ни в коем случае не делать рестарт MySQL сервиса!

      Далее установить пакет ecss-mysql:
      sudo apt install ecss-mysql
      ответы на вопросы  конфигураторa

      При установке на вопрос "Path for external data-directory, where will be created tables of databases" надо указать внешнюю директорию хранения таблиц баз данных, либо принять значение по умолчанию.

      Обратно переместить backup конфигурационных файлов ecss-mysql (сохраненный ранее):
      sudo rm -rf /etc/ecss/ecss-mysql && sudo cp -a ~/ecss-mysql-etc-backup /etc/ecss/ecss-mysql
      Проверьте и при необходимости актуализируйте параметры в "/etc/ecss/ecss-mysql/mysql-checker.conf":

      Переменная "MASTER_HOST_IP" - это VRRP-адрес для MySQL, определенный в конфигурации keepalived.

    4. Включить ecss-mysql-checker.timer
      sudo systemctl enable --now ecss-mysql-checker.timer
    5. Загрузка резервной копии баз данных. Перед загрузкой резервной копии необходимо модифицировать еe, указав внешнюю директорию хранения таблиц баз данных. Так как таблицы баз данных ecss-mysql устанавливаются в отдельной директории (/var/lib/ecss-mysql), необходимо для всех таблиц в резервной копии указать внешнюю директорию, иначе они будут создаваться в стандартной data-директории (/var/lib/mysql). Также при загрузке резервной копии отключаем запись бинарных логов.
      sed -E "s/(ENGINE=(MyISAM|InnoDB))/\1 DATA DIRECTORY = '\/var\/lib\/ecss-mysql'/g" all_dump.sql | (echo "SET sql_log_bin = 0;"; cat -) | sudo mysql -uroot -p
      После загрузки резервной копии сделайте реконфигурирование пакета ecss-mysql, чтобы прошли необходимые миграции v3.14.16, которые отсутствуют в резервной копии.
      sudo dpkg-reconfigure ecss-mysql
      После этого запустить репликацию командой и убедится, что slave подтянул все изменения от мастера (Seconds_Behind_Master - должна быть равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File).
      sudo mysql -uroot -p -e "START SLAVE"
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
                    Master_Log_File: server-mysql-bin.001152
              Relay_Master_Log_File: server-mysql-bin.001152
              Seconds_Behind_Master: 0
      

      Удалить параметр skip-slave-start из конфигурации mysql и резервного файла:
      sudo sed -i '/skip-slave-start/d' /etc/mysql/mysql.conf.d/mysqld.cnf 
      sudo sed -i '/skip-slave-start/d' /var/lib/ecss/ecss-mysql/backup/mysqld.cnf
      Перезапускать mysql не обязательно - данная опция влияет только на состояние SLAVE при старте mysql, а его запустили напрямую.


    6. Восстановить репликацию master-master, запустив репликацию на ecss2 и убедится, что slave подтянул все изменения от мастера (Seconds_Behind_Master - должна быть равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File):
      sudo mysql -uroot -p -e "START SLAVE;"
      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep "Seconds_Behind_Master"

      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
                    Master_Log_File: server-mysql-bin.001152
              Relay_Master_Log_File: server-mysql-bin.001152
              Seconds_Behind_Master: 0
    7. Обновление Erlang и SSW.

      Перед обновлением включить сервисы ssw: 

      sudo systemctl unmask ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
      sudo systemctl enable ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm

      Для обновления удалить устаревшую версию Erlang. Команда ниже обновит Erlang до версии 24.3, а также обновит до новейшей версии пакеты ecss-node и ecss-utils:

      sudo apt remove erlang-base-hipe

      Если erlang не обновился удалением старого пакета, то сначала обновить ecss-node и ecss-utils и далее обновить весь erlang командами:

      sudo apt install ecss-node ecss-utils
      sudo apt install erlang


       После обновления Erlang демаскировать сервис, который был маскирован при удалении erlang-base-hipe:

      sudo systemctl unmask epmd.socket epmd.service


    8. Запуск SSW на первом хосте.
      Перед запуском изменить имя кластера на то же, которое было установлено на ecss2 на предыдущем шаге.
      sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
      {mycelium_broker, [
          {cluster_name, 'test_cluster_upd'},
      Так же меняем значение таймера для ds сервиса:
      sed -i 's/{cluster_timeout, 60000}/{cluster_timeout, 10800000}/g' /etc/ecss/ecss-ds/ds1.config
    9. Сервис ecss-sorm на ecss1 сразу замаскировать, т.к. у нас заявлена работа ecss-sorm на одном хосте в кластере. 
      sudo systemctl mask ecss-sorm
    10. Выполнить на ecss2 объединение в кластер:
      sudo ecss-control attach
        
    11. Активация сервиса Keepalived.
      sudo systemctl enable --now keepalived
    12. На ecss1 запустите сервис mycelium и в CoCon проверьте, что сервис поднялся и видно ноды mycelium хостов ecss1/ ecss2:
      sudo systemctl start ecss-mycelium
      /system-status
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬────────────┬───────┐
      │ │     Node      │          Release           │         Erlang nodes          │Mnesia nodes│Uptime │
      ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼────────────┼───────┤
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss2                    │not running │3h 5m  │
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss2                      │ds1@ecss2   │3h 5m  │
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss2                      │md1@ecss2   │3h 5m  │
      │ │mycelium1@ecss1│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running │10m 42s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running │3h 5m  │
      │ │sip1@ecss2     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss2                     │sip1@ecss2  │3h 5m  │
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │sorm1@ecss2                    │not running │3h 5m  │
      └─┴───────────────┴────────────────────────────┴───────────────────────────────┴────────────┴───────┘
      
      All services are started.
      
        Active media resource selected list specific:
      ┌─────────────┬───────────┬───────────────┬───────────┬───────────┐
      │    Node     │    MSR    │      MSR      │ Cc-status │ Cc-uptime │
      │             │           │    version    │           │           │
      ├─────────────┼───────────┼───────────────┼───────────┼───────────┤
      │ core1@ecss2 │ msr.ecss1 │ 3.14.15.243   │ connected │ 00:21:09  │
      │             │ msr.ecss2 │ 3.14.16.1.0   │ connected │ 00:00:59  │
      └─────────────┴───────────┴───────────────┴───────────┴───────────┘
    13. Перед запуском ecss-ds на ecss1 необходимо сделать backup директории /var/lib/ecss/oasys и удалить ее, для того чтобы с другого хоста загрузить актуальную БД. Сделать это можно переименовав существующую директорию:

      После этого ecss-ds на хосте ecss1 загрузит БД с хоста ecss2.


      sudo mv /var/lib/ecss/oasys /var/lib/ecss/oasys-$(date +%Y%m%d-%H_%M)
    14. На ecss1 запустите сервис ds и в CoCon проверить, что сервис ds доступен на обоих хостах ecss1/ ecss2:
      sudo systemctl start ecss-ds
      /system-status
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬───────────────────┬───────┐
      │ │     Node      │          Release           │         Erlang nodes          │   Mnesia nodes    │Uptime │
      ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼───────────────────┼───────┤
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss2                    │not running        │3h 13m │
      │ │ds1@ecss1      │ecss-ds-3.14.16.1.130       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2│12s    │
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2│3h 13m │
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss2                      │md1@ecss2          │3h 13m │
      │ │mycelium1@ecss1│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running        │18m 33s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running        │3h 13m │
      │ │sip1@ecss2     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss2                     │sip1@ecss2         │3h 13m │
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │sorm1@ecss2                    │not running        │3h 12m │
      └─┴───────────────┴────────────────────────────┴───────────────────────────────┴───────────────────┴───────┘
      
      All services are started.
      
        Active media resource selected list specific:
      ┌─────────────┬───────────┬───────────────┬───────────┬───────────┐
      │    Node     │    MSR    │      MSR      │ Cc-status │ Cc-uptime │
      │             │           │    version    │           │           │
      ├─────────────┼───────────┼───────────────┼───────────┼───────────┤
      │ core1@ecss2 │ msr.ecss1 │ 3.14.15.243   │ connected │ 00:29:01  │
      │             │ msr.ecss2 │ 3.14.16.1.0   │ connected │ 00:08:50  │
      └─────────────┴───────────┴───────────────┴───────────┴───────────┘
    15. Далее такими же действиями запустить сервисы: ecss-mediator, ecss-pa-sip, ecss-core следующими командами:
      sudo systemctl start ecss-mediator

      sudo systemctl start ecss-pa-sip

      sudo systemctl start ecss-core
      Проверить статус в CoCom:
      /system-status 
      Checking...
      ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬─────────────────────┬──────┐
      │ │     Node      │          Release           │         Erlang nodes          │    Mnesia nodes     │Uptime│
      ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼─────────────────────┼──────┤
      │ │core1@ecss1    │ecss-core-3.14.16.1.130     │core1@ecss1,core1@ecss2        │not running          │3m 50s│
      │ │core1@ecss2    │ecss-core-3.14.16.1.130     │core1@ecss1,core1@ecss2        │not running          │3h 22m│
      │ │ds1@ecss1      │ecss-ds-3.14.16.1.130       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │9m 42s│
      │ │ds1@ecss2      │ecss-ds-3.14.16.1.130       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │3h 22m│
      │ │md1@ecss1      │ecss-mediator-3.14.16.1.130 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │5m 22s│
      │ │md1@ecss2      │ecss-mediator-3.14.16.1.130 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │3h 22m│
      │ │mycelium1@ecss1│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running          │28m 4s│
      │ │mycelium1@ecss2│ecss-mycelium-3.14.16.1.130 │mycelium1@ecss1,mycelium1@ecss2│not running          │3h 23m│
      │ │sip1@ecss1     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│4m 40s│
      │ │sip1@ecss2     │ecss-pa-sip-3.14.16.1.130   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│3h 22m│
      │ │sorm1@ecss2    │ecss-sorm-3.14.16.1.130     │sorm1@ecss2                    │not running          │3h 22m│
      └─┴───────────────┴────────────────────────────┴───────────────────────────────┴─────────────────────┴──────┘
      
      All services are started.
      
        Active media resource selected list specific:
      ┌─────────────┬───────────┬───────────────┬───────────┬───────────┐
      │    Node     │    MSR    │      MSR      │ Cc-status │ Cc-uptime │
      │             │           │    version    │           │           │
      ├─────────────┼───────────┼───────────────┼───────────┼───────────┤
      │ core1@ecss1 │ msr.ecss1 │ 3.14.15.243   │ connected │ 00:02:37  │
      │ core1@ecss2 │ msr.ecss1 │ 3.14.15.243   │ connected │ 00:38:31  │
      │             │ msr.ecss2 │ 3.14.16.1.0   │ connected │ 00:18:20  │
      └─────────────┴───────────┴───────────────┴───────────┴───────────┘
    16. Обновление пакета ecss-restfs:
      sudo apt install ecss-restfs
    17. Обновление пакета ecss-media-server:
      sudo apt install ecss-media-server
      Актуализировать конфигурацию:
      sudo dpkg-reconfigure ecss-media-server
      Проверить и при необходимости исправить вручную файл → /etc/ecss/ecss-media-server/config.xml
      <?xml version="1.0" encoding="utf-8"?>
      <config date="05:27:38 07.12.2024">
        <general log-level="3" log-rotate="yes" max-calls="8192" max-vid-calls="8192" max-in-group="512" load-sensor="media" load-delta="10" calls-delta="100" spool-dir-size="100M" log-name="msr.log" log-path="/var/log/ecss/media-server" use-srtp="disabled" enable-ice-transport="no" ice-update="no" aggressive-ice="yes" stun-server="" suspicious-mode="no"/>
        <transport bind-addr="10.0.20.82" port="5040" transport="udp+tcp"/>
        <!-- By default configured public TURN-server -->
        <turn-server use-turn="no" host="numb.viagenie.ca" user="webrtc@live.com" password="muazkh"/>
        <media mixer-clock-rate="8000" use-vad="no" cng-level="0" jb-size="60" rtcp-timeout="0" rtp-timeout="350" udp-src-check="no" cn-multiplier="3" port-start="12000" port-range="2048" tias-in-sdp="no" thread-cnt="2" vid-enc-threads="2" vid-dec-threads="2" video-conf-layout="evenly" keyframe-interval="1000" vid-decode-delay="100" silence-threshold="-30" dtmf-flash-disable="no" video-dscp="0" other-dscp="0" dummy-video-src="/usr/share/ecss-media-server/video/dummy_video.yuv" video-enc-width="640" video-enc-height="360" finalsilence="1000" rtcp-stat-dump="yes" dtmf-tg-fpc-loop="10" dtmf-tg-fit="1" dtmf-tg-fot="2" dtmf-tg-volume="12288"/>
        <codec pcma="3" pcmu="2" ilbc="0" gsm="0" g722="3" g729="1" speex="5" l16="0" g7221="6" opus="0" h264="1" h263-1998="2" t38="1" tel-event-pt="0"/>
        <accounts>
          <!-- <dynamic msr_name="msr.name"
                  realm="sip:127.0.0.1:5000"
                  dtmf_mode="rfc+inband+info"
                  auth_name="user"
                  auth_password="password" /> -->
        </accounts>
        <pbyte>
          <mcc bind-addr="10.0.20.82" port="5700"/>
        </pbyte>
        <conf_dir path="/etc/ecss/ecss-media-server/conf.d"/>
        <metrics enable="no"/>
        <rtp>
          <auto addr-v4=""/>
        </rtp>
      </config>


      Так же, для регистрации media-server`a с ecss2 на ecss1 надо убрать ранее добавленные комментирование из файла /etc/ecss/ecss-media-server/conf.d/default.xml на ecss2:
      <?xml version="1.0"?>
      <config>
        <accounts>
                <!--<dynamic msr_name="msr.ecss2" realm="sip:10.0.20.81:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>-->
                <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.82:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
        </accounts>
      </config>
      После чего перезапустить сервис:
      sudo systemctl restart ecss-media-server.service
    18. Обновление пакета ecss-media-resources:
      sudo apt install ecss-media-resources
    19. Обновление пакета ecss-web-conf:
      sudo apt install ecss-web-conf
    20. Обновление пакета ecss-teleconference-ui

      sudo apt install ecss-teleconference-ui

      Обновление пакета ecss-crm-server

      sudo apt install ecss-crm-server

      Обновление пакета ecss-cc-ui

      sudo apt install ecss-cc-ui


    21. После обновления сервисов удалить файл фиксации версии ssw:
      sudo rm /etc/apt/preferences.d/eltex-ecss10

9 Проверка обновления

    1. После выполнения обновления проверить работу всех сервисов SSW.