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

SSW 3.14.15 до обновления

Шаг первый - "подготовительные действия на ecss2"

Шаг второй - обновление операционной системы Ubuntu 18.04 на ecss2

Шаг третий - подготовка к обновлению сервисов SSW на ecss2

Шаг четвертый - обновление сервисов SSW на ecss2

Шаг пятый - подготовительные действия на ecss1

Шаг шестой - обновление  операционной системы  Ubuntu 18.04 на ecss1

Шаг седьмой - подготовка к обновлению сервисов SSW на ecss1

Шаг восьмой - обновление сервисов SSW на ecss1









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" .
      на ecss1
      sudo gluster volume set ecss_volume cluster.favorite-child-policy size
    4. Остановить репликации MySQL.

      на ecss1/ecss2

      sudo mysql -uroot -p -e 'STOP SLAVE;'
      CODE
      Убедитесь, что значения параметров Slave_IO_Running и Slave_SQL_Running равны No.

      на ecss1/ecss2

      sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
      CODE

      пример
      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). Выполнить следующую команду:

      на ecss2

      sudo systemctl disable --now keepalived.service
      CODE
    6. Командой ifconfig проверить, что все VRRP IP-адреса находятся на ecss1 (VRRP-mysql/VRRP-SIP1/VRRP-SIP2).

      на ecss1

      ifconfig
      CODE
    7. На ecss1 выполнить разделение SSW на два независимых сервера следующей командой:

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


      на ecss1

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

      на ecss1

      sudo ecss-control status
      CODE

      Результат:
      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. После разделения кластера необходимо замаскировать все ноды на сервере, который будет обновляться первым:

      на ecss2

      sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
      CODE

      Нода 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;"



      на ecss2

      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
      CODE
    10. Добавить в конфигурацию mysql параметры skip-log-bin и skip-slave-start на ecss2 (чтобы избежать записи в бинарные логи процесса удаления БД), выполнив команду :

      на ecss2

      sudo sed -i  '40i\skip-log-bin\nskip-slave-start' /etc/mysql/mysql.conf.d/mysqld.cnf
      CODE
    11. Удалить резервный файл конфигурации (чтобы при удалении, ecss-mysql не загрузил конфигурацию из него):

      на ecss2

      sudo rm /var/lib/ecss/ecss-mysql/backup/mysqld.cnf
      CODE
    12. Перезапустить ecss-mysql с новой конфигурацией:

      на ecss2

      sudo systemctl restart mysql.service
      CODE
    13. Для корректной работы репликации после обновления необходимо сохранить конфигурационные файлы ecss-mysql, поэтому делаем отдельный backup для файлов до обновления:

      на ecss2

      sudo cp -a /etc/ecss/ecss-mysql ~/ecss-mysql-etc-backup
      CODE
    14. Удалить ecss-web-conf и ecss-mysql, вместе с конфигурационными файлами (чтобы не было ошибок конфигураций при обновлении):

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

      на ecss2

      sudo dpkg-reconfigure ecss-web-conf
      CODE

      на ecss2

      sudo apt purge ecss-web-conf
      CODE

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

      на ecss2

      sudo apt purge ecss-mysql
      CODE
    15. Проверьте, что БД удалены, выполнив команду, в выводе не должно быть других БД кроме системных ('information_schema','mysql','performance_schema','sys'):

      на ecss2

      sudo mysql -uroot -p -e "SHOW DATABASES;"
      CODE
    16. Если используется ecss-call-api и ecss-elph-api, то их нужно удалить (чтобы не было конфликтов зависимостей при обновлении).

      на ecss2

      sudo apt remove ecss-call-api
      sudo apt remove ecss-elph-api
      CODE
    17. Удалить skip-log-bin из файла конфигурации:

      на ecss2

      sudo sed -i '/skip-log-bin/d' /etc/mysql/mysql.conf.d/mysqld.cnf
      CODE
    18. Зафиксировать пакеты mysql (чтобы пакетный менеджер при обновлении системы не удалил mysql):

      на ecss2

      sudo apt-mark hold mysql-*
      CODE
    19. Установить версию пакета nodejs (чтобы корректно было выполнено обновление дистрибутива):

      на ecss2

      sudo apt install nodejs=8.10.*
      CODE

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

    1. Обновление с Ubuntu 18.04 (Bionic) до Ubuntu 20.04 (Focal)

      на ecss2

      do-release-upgrade -m server
      CODE

      на ecss2

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

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

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

      на ecss2

      sudo apt update
      CODE

      на ecss2

      sudo apt upgrade
      CODE

      на ecss2

      sudo apt dist-upgrade
      CODE

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

      на ecss2

      sudo apt install ecss-user
      CODE

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

      на ecss2

      do-release-upgrade -m server
      CODE



      Ответы на вопросы во время обновления

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


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

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

      на ecss2

      systemctl is-active dnsmasq
      CODE

      пример

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

      на ecss2

      sudo rm /etc/dnsmasq.d/lxd
      CODE
      Перезапустить сервис dnsmasq :

      на ecss2

      sudo systemctl restart dnsmasq
      CODE
      Проверить статус сервиса:
      пример
      systemctl is-active dnsmasq
      active

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

    3. Обновление пакетов mysql.
      Отключить фиксацию пакетов:

      на ecss2

      sudo apt-mark unhold mysql-*
      CODE
      Обновить mysql до версии 8.0:

      на ecss2

      sudo apt install mysql-server
      CODE

      Ответы на вопросы пакетного менеджера

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

      После обновления необходимо актуализировать настройки mysql для версии 8.0:

      на ecss2

      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
      CODE
    4. Закончить обновление хоста следующей  командой:

      на ecss2

      sudo apt full-upgrade
      CODE
      Проверить версию Ubuntu следующей командой:

      на ecss2

       lsb_release -a
      CODE

      Результат:

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

      на ecss2

      do-release-upgrade -m server
      CODE

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

      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.

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

      на ecss2

      sudo reboot
      CODE

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

      на ecss2

      do-release-upgrade -m server
      CODE



      Ответы на вопросы во время обновления

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

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

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

      на ecss2

      sudo apt autoremove
      CODE

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


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

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

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


      на ecss2

      sudo ecss-control detach
      CODE
    2. Актуализировать репозиторий ssw:

      на ecss2

      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"
      CODE
    3. Временно зафиксировать версию пакетов ecss-*, на которые надо будет обновиться:

      на ecss2

      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"
      CODE
    4. Выполнить обновление пакетов:

      на ecss2

      sudo apt update
      CODE
    5. Выключаем nginx сервис:

      на ecss2

      sudo systemctl disable --now nginx
      CODE

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

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

      на ecss2

      sudo apt install ecss-dns-env
      CODE

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


      После обновления, нужно актуализировать конфигурацию, выполнив команду. Ответы на вопросы аналогичны процедуре инсталляции:

      на ecss2

      sudo dpkg-reconfigure ecss-dns-env
      CODE
    2. Выполнить обновление пакета ecss-user:

      на ecss2

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

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

      на ecss2

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


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

      на ecss2

      sudo systemctl restart mysql
      CODE

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

      на ecss2

      sudo apt install ecss-mysql
      CODE

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

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

      на ecss2

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

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

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

    4. Включите ecss-mysql-checker.timer:

      на ecss2

      sudo systemctl enable --now ecss-mysql-checker.timer
      CODE
    5. Загрузка резервной копии баз данных:
      Перед загрузкой резервной копии необходимо модифицировать его, указав внешнюю директорию хранения таблиц баз данных. Так как таблицы баз данных ecss-mysql устанавливаются в отдельной директории (/var/lib/ecss-mysql), необходимо для всех таблиц в резервной копии указать внешнюю директорию, иначе они будут создаваться в стандартной data-директории (/var/lib/mysql). Также при загрузке резервной копии отключаем запись бинарных логов.

      на ecss2

      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
      CODE
      После загрузки резервной копии сделайте реконфигурирование пакета ecss-mysql, чтобы прошли необходимые миграции v3.14.16, которые отсутствуют в резервной копии.

      на ecss2

      sudo dpkg-reconfigure ecss-mysql
      CODE
      Перезапустить репликацию командой и убедится, что slave сервер подтянул все изменения от мастера (дождаться, пока переменная "Seconds_Behind_Master" не станет равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File).

      на ecss2

      sudo mysql -uroot -p -e "START SLAVE;"
      CODE

      на ecss2

      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
      CODE
      пример
      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 и резервного файла:

      на ecss2

      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
      CODE

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

    6. Обновление Erlang и SSW.
      Перед обновлением включить сервисы ssw следующими командами: 

      на ecss2

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

      на ecss2

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

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

      на ecss2

      sudo apt remove erlang-base-hipe
      CODE

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

      на ecss2

      sudo apt install ecss-node ecss-utils
      CODE

      на ecss2

      sudo apt install erlang
      CODE


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

      на ecss2

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

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

      на ecss2

      sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
      CODE
      на ecss2
      {mycelium_broker, [
          {cluster_name, 'test_cluster_upd'},
      запустить следующие сервисы:
      ecss-mycelium

      на ecss2

      sudo systemctl start ecss-mycelium
      CODE
      ecss-ds

      на ecss2

      sudo systemctl start ecss-ds
      CODE
      ecss-core

      на ecss2

      sudo systemctl start ecss-core
      CODE

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

      ecss-mediator

      на ecss2

      sudo systemctl start ecss-mediator
      CODE

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

      на ecss2

      sudo systemctl start ecss-sorm
      CODE

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

      на ecss2

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


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

      выполняется в CoCon

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


      Для примера:

      /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:
      выполняется в CoCon
      /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.

      на ecss2

      sudo apt install ecss-restfs
      CODE
    10. Обновление пакета ecss-media-server.
      Предварительно отключить регистрацию на рабочий хост ecss1. Для этого надо закомментировать в конфигурационном файле строку с realm рабочего хоста (в примере realm="sip:10.0.20.81:5000"), следующей командой (добавив <!- - вначале строки , и - -> в конце строки ), следующей командой:

      на ecss2

      sudo nano /etc/ecss/ecss-media-server/conf.d/default.xml
      CODE
      пример
      <?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>
      Выполнить обновление:

      на ecss2

      sudo apt install ecss-media-server
      CODE
      Актуализировать конфигурацию:

      на ecss2

      sudo dpkg-reconfigure ecss-media-server
      CODE
      Выполнить проверку, и при необходимости отредактировать файл командой :

      на ecss2

      sudo nano /etc/ecss/ecss-media-server/config.xml
      CODE

      пример

      <?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>
      CODE
    11. Обновление пакета ecss-media-resources:

      на ecss2

      sudo apt install ecss-media-resources
      CODE
    12. Обновление пакета ecss-web-conf

      на ecss2

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

      на ecss2

      sudo apt install ecss-teleconference-ui
      CODE

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

      на ecss2

      sudo apt install ecss-crm-server
      CODE

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

      на ecss2

      sudo apt install ecss-cc-ui
      CODE

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

      на ecss2

      sudo apt install ecss-call-api
      CODE

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

      на ecss2

      sudo apt install ecss-elph-api
      CODE
    14. Перед переводом keepalived на обновленный хост необходимо скопировать актуальную базу ds с ecss1 (иначе база регистраций будет пустая). Поэтому сначала делаем backup БД Mnesia на ecss1:

      выполняется в CoCon

      /node/ds1@ecss1/oasys/backup
      CODE
      /$ /node/ds1@ecss1/oasys/backup      
      Backup was successfully created at the path: "/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517"
      Останавливаем ecss-ds на ecss2:

      на ecss2

      sudo systemctl stop ecss-ds
      CODE
      Командой scp копируем backup c ecss1 на ecss2.

      на ecss2

      scp -r ecss@ecss1:/var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys
      CODE
      Выполняем локальную копию текущей конфигурации:

      на ecss2

      sudo cp -a /var/lib/ecss/oasys/Mnesia.ds1@ecss2 /var/lib/ecss/oasys/Mnesia.ds1@ecss2-bkp
      CODE
      Заменяем локальную конфигурацию на конфигурацию backup c ecss1:

      на ecss2

      sudo mv /var/lib/ecss/oasys/Mnesia.ds1@ecss1_20250930081517 /var/lib/ecss/oasys/Mnesia.ds1@ecss2
      CODE

      на ecss2

      sudo chown -R ssw:ssw /var/lib/ecss/oasys
      CODE
      Запустить ecss-ds и ecss-pa-sip (чтобы подгрузились актуальные регистрации абонентов):

      на ecss2

      sudo systemctl start ecss-ds
      CODE

      на ecss2

      sudo systemctl start ecss-pa-sip
      CODE
      Проверить статус сервисов командой /system-status :

      выполняется в CoCon

      /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  │
      └─────────────┴───────────┴─────────────┴───────────┴───────────┘
      CODE
    15. Запуск сервиса keepalived

      на ecss2

      sudo systemctl enable --now keepalived
      CODE
    16. После обновления сервисов удалить файл фиксации версии ssw:

      на ecss2

      sudo rm /etc/apt/preferences.d/eltex-ecss10
      CODE


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

    1. Выполнить полный «бэкап» (см. «Регламентное обслуживание и резервное копирование»).
    2. Остановка репликации MySQL (на ecss2). Убедится, что значения параметров Slave_IO_Running и Slave_SQL_Running равны No.  

      на ecss2

      sudo mysql -uroot -p -e 'STOP SLAVE;'
      CODE

      на ecss2

      sudo mysql -uroot -p -e 'SHOW SLAVE STATUS \G;' | grep -E "Slave_IO_Running:|Slave_SQL_Running:"
      CODE

      пример
      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):

      на ecss1

      sudo systemctl disable --now keepalived.service
      CODE
    4. Командой ifconfig проверьте, что все VRRP адреса  (VRRP IP-mysql / VRRP IP-SIP1 / VRRP IP-SIP2) находятся на ecss2.

      на ecss2

      ifconfig
      CODE

      Если после переключения на 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:

      на ecss1

      sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
      CODE
    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;"



      на ecss1

      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
      CODE
    7. Добавить в конфигурацию mysql параметры skip-log-bin и skip-slave-start на ecss1 (чтобы избежать записи в бинарные логи процесса удаления БД):

      на ecss1

      sudo sed -i '40i\skip-log-bin\nskip-slave-start' /etc/mysql/mysql.conf.d/mysqld.cnf
      CODE
    8. Удалить резервный файл конфигурации (чтобы при удалении, ecss-mysql не загрузил конфигурацию из него):

      на ecss1

      sudo rm /var/lib/ecss/ecss-mysql/backup/mysqld.cnf
      CODE
    9. Перезапустить mysql с новой конфигурацией:

      на ecss1

      sudo systemctl restart mysql.service
      CODE
    10. Для корректной работы репликации после обновления необходимо сохранить конфигурационные файлы ecss-mysql, поэтому создать отдельный backup для файлов до обновления:

      на ecss1

      sudo cp -a /etc/ecss/ecss-mysql ~/ecss-mysql-etc-backup
      CODE
    11. Удалить ecss-web-conf и ecss-mysql вместе с конфигурационными файлами (чтобы не было ошибок конфигураций при обновлении):

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


      на ecss1

      sudo dpkg-reconfigure ecss-web-conf
      CODE

      на ecss1

      sudo apt purge ecss-web-conf
      CODE

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


      на ecss1

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

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


      на ecss1

      sudo mysql -uroot -p -e "SHOW DATABASES;"
      CODE
    13. Если используется ecss-call-api и ecss-elph-api, то удалите (чтобы не было конфликтов зависимостей при обновлении):

      на ecss1

      sudo apt remove ecss-call-api
      sudo apt remove ecss-elph-api
      CODE
    14. Удалить skip-log-bin из файла конфигурации:

      на ecss1

      sudo sed -i '/skip-log-bin/d' /etc/mysql/mysql.conf.d/mysqld.cnf
      CODE
    15. Зафиксировать пакеты mysql (чтобы пакетный менеджер при обновлении системы не удалил mysql):

      на ecss1

      sudo apt-mark hold mysql-*
      CODE
    16. Установить версию пакета nodejs (чтобы корректно было выполнено обновление дистрибутива):

      на ecss1

      sudo apt install nodejs=8.10.*
      CODE

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

    1. Обновление c Ubuntu 18.04 (Bionic) до Ubuntu 20.04 (Focal)

      на ecss1

      do-release-upgrade -m server
      CODE

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

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

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

      на ecss1

      sudo apt update
      CODE

      на ecss1

      sudo apt upgrade
      CODE

      на ecss1

      sudo apt dist-upgrade
      CODE

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

      на ecss1

      sudo apt install ecss-user
      CODE

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

      на ecss1

      do-release-upgrade -m server
      CODE



      Ответы на вопросы во время обновления

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

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

        на ecss1

        systemctl is-active dnsmasq
        CODE

        пример

        systemctl is-active dnsmasq
        failed
        CODE

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

        на ecss1

        sudo rm /etc/dnsmasq.d/lxd
        CODE

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

        на ecss1

        sudo systemctl restart dnsmasq
        CODE

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

        пример
        systemctl is-active dnsmasq
        active

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


      Обновление пакетов mysql.
      Убрать фиксацию пакетов:
    3. на ecss1

      sudo apt-mark unhold mysql-*
      CODE
      Обновить mysql до версии 8.0:

      на ecss1

      sudo apt install mysql-server
      CODE

      Ответы на вопросы пакетного менеджера

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

      После обновления необходимо актуализировать настройки mysql для версии 8.0:

      на ecss1

      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
      CODE
    4. Закончить обновление хоста командой:

      на ecss1

      sudo apt full-upgrade
      CODE
    5. Обновление с Ubuntu 20.04 (Focal) до Ubuntu 22.04 (Jammy)

      на ecss1

      do-release-upgrade -m server
      CODE

      Ответы на вопросы во время обновления

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

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

      на ecss1

      sudo apt autoremove
      CODE

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


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

    1. Перед обновлением актуализировать репозиторий ssw:

      на ecss1

      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"
      CODE
    2. Временно зафиксировать версию пакетов ecss-*, на которые надо будет обновиться:

      на ecss1

      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"
      CODE
    3. Обновить пакеты командой:

      на ecss1

      sudo apt update
      CODE


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

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

      на ecss1

      sudo apt install ecss-dns-env
      CODE
      При обновлении принимать новые конфигурационные файлы -Y.
       
      После обновления актуализировать конфигурацию командой:

      на ecss1

      sudo dpkg-reconfigure ecss-dns-env
      CODE
    2. Обновление пакета ecss-user:

      на ecss1

      sudo apt install ecss-user
      CODE
    3. Обновление пакета ecss-mysql:
      Т.к. оба хоста обновятся до mysql v8.0, надо отключить плагин по умолчанию в конфигурации mysql и поменять плагин пользователей на ecss2

      на ecss2

      sudo rm /etc/mysql/conf.d/plugin.cnf
      CODE

      на ecss2

      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
      CODE

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

      Далее установить пакет ecss-mysql:

      на ecss1

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

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

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

      на ecss1

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

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

    4. Включить ecss-mysql-checker.timer

      на ecss1

      sudo systemctl enable --now ecss-mysql-checker.timer
      CODE
    5. Загрузка резервной копии баз данных. Перед загрузкой резервной копии необходимо модифицировать еe, указав внешнюю директорию хранения таблиц баз данных. Так как таблицы баз данных ecss-mysql устанавливаются в отдельной директории (/var/lib/ecss-mysql), необходимо для всех таблиц в резервной копии указать внешнюю директорию, иначе они будут создаваться в стандартной data-директории (/var/lib/mysql). Также при загрузке резервной копии отключаем запись бинарных логов.

      на ecss1

      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
      CODE
      После загрузки резервной копии сделайте реконфигурирование пакета ecss-mysql, чтобы прошли необходимые миграции v3.14.16, которые отсутствуют в резервной копии.

      на ecss1

      sudo dpkg-reconfigure ecss-mysql
      CODE
      После этого запустить репликацию командой и убедится, что slave подтянул все изменения от мастера (Seconds_Behind_Master - должна быть равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File).

      на ecss1

      sudo mysql -uroot -p -e "START SLAVE"
      CODE

      на ecss1

      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep -E "Seconds_Behind_Master|Relay_Master_Log_File|Master_Log_File"
      CODE
      пример
      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 и резервного файла:

      на ecss1

      sudo sed -i '/skip-slave-start/d' /etc/mysql/mysql.conf.d/mysqld.cnf 
      CODE

      на ecss1

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


    6. Восстановить репликацию master-master, запустив репликацию на ecss2 и убедится, что slave подтянул все изменения от мастера (Seconds_Behind_Master - должна быть равна 0, а значение Relay_Master_Log_File должно сойтись со значением Master_Log_File):

      на ecss2

      sudo mysql -uroot -p -e "START SLAVE;"
      CODE

      на ecss2

      sudo mysql -e 'SHOW SLAVE STATUS \G;' | grep "Seconds_Behind_Master"
      CODE

      пример
      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: 

      на ecss1

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

      на ecss1

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

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

      на ecss1

      sudo apt remove erlang-base-hipe
      CODE

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

      на ecss1

      sudo apt install ecss-node ecss-utils
      CODE

      на ecss1

      sudo apt install erlang
      CODE


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

      на ecss1

      sudo systemctl unmask epmd.socket epmd.service
      CODE


    8. Запуск SSW на первом хосте.
      Перед запуском изменить имя кластера на то же, которое было установлено на ecss2 на предыдущем шаге.

      на ecss1

      sudo nano /etc/ecss/ecss-mycelium/mycelium1.config
      CODE
      на ecss1
      {mycelium_broker, [
          {cluster_name, 'test_cluster_upd'},
    9. Сервис ecss-sorm на ecss1 сразу замаскировать, т.к. у нас заявлена работа ecss-sorm на одном хосте в кластере. 

      на ecss1

      sudo systemctl mask ecss-sorm
      CODE
    10. Выполнить на ecss2 объединение в кластер:

      на ecss2

      sudo ecss-control attach
      CODE
        
    11. Активация сервиса Keepalived.

      на ecss1

      sudo systemctl enable --now keepalived
      CODE
    12. На ecss1 запустите сервис mycelium и в CoCon проверьте, что сервис поднялся и видно ноды mycelium хостов ecss1/ ecss2:

      на ecss1

      sudo systemctl start ecss-mycelium
      CODE
      выполняется в CoCon
      /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.


      на ecss1

      sudo mv /var/lib/ecss/oasys /var/lib/ecss/oasys-$(date +%Y%m%d-%H_%M)
      CODE
    14. На ecss1 запустите сервис ds и в CoCon проверить, что сервис ds доступен на обоих хостах ecss1/ ecss2:

      на ecss1

      sudo systemctl start ecss-ds
      CODE
      выполняется в CoCon
      /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 следующими командами:

      на ecss1

      sudo systemctl start ecss-mediator
      CODE

      на ecss1

      sudo systemctl start ecss-pa-sip
      CODE

      на ecss1

      sudo systemctl start ecss-core
      CODE
      Проверить статус в 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:

      на ecss1

      sudo apt install ecss-restfs
      CODE
    17. Обновление пакета ecss-media-server:

      на ecss1

      sudo apt install ecss-media-server
      CODE
      Актуализировать конфигурацию:

      на ecss1

      sudo dpkg-reconfigure ecss-media-server
      CODE
      Проверить и при необходимости исправить вручную файл → /etc/ecss/ecss-media-server/config.xml
      на ecss1
      <?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>
      После чего перезапустить сервис:

      на ecss2

      sudo systemctl restart ecss-media-server.service
      CODE
    18. Обновление пакета ecss-media-resources:

      на ecss1

      sudo apt install ecss-media-resources
      CODE
    19. Обновление пакета ecss-web-conf:

      на ecss1

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

      на ecss1

      sudo apt install ecss-teleconference-ui
      CODE

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

      на ecss1

      sudo apt install ecss-crm-server
      CODE

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

      на ecss1

      sudo apt install ecss-cc-ui
      CODE


    21. После обновления сервисов удалить файл фиксации версии ssw:

      на ecss1

      sudo rm /etc/apt/preferences.d/eltex-ecss10
      CODE

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

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