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

1. Подготовка хостов к обновлению

В процессе обновления с версии 3.14.16 на версию 3.17 будет заменена База Данных с MySQL на PostgreSQL. Для работы PostgreSQL требуется отдельный раздел дискового пространства – партиция, которая должна быть смонтирована в директорию → "/srv/ecss/ecss-postgres-bdr-ssw". В версии 3.14.16 такая партиция не предусматривалась, поэтому ее требуется создать. Размерность данной партиции от 100G и более.

Вариантов несколько:

  • При наличии нераспределенного пространства на HDD/SSD → создать новую партицию с файловой системой ext4.
  • Подключить еще один физический (в случае виртуализации виртуальный) диск. Создать на нем партицию postgres с точкой монтирования "/srv/ecss/ecss-postgres-bdr-ssw".

 Данную операцию необходимо выполнить для двух хостов поочередно (порядок не важен).

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

  1. Если нужны последние данные биллинга, то необходимо финализировать текущую cdr и скачать cdr-файлы на удаленный сервер:
    /domain/test_domain/cdr/make_finalize_cdr 
    Created file(s): cdr_20260122_11_51_16_1_c.csv
  2. Включить настройку для автоматической синхронизации файлов, находящихся в сплите (по большему размеру). Подробнее см. "Проблемы, связанные с возникновением split-brain".
    на ecss1
    sudo gluster volume set ecss_volume cluster.favorite-child-policy size
  3. Остановить репликации MySQL.
    Убедитесь, что значения параметров Slave_IO_Running и Slave_SQL_Running равны No.

    на ecss1/ecss2

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

    на 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
    . . .
  4. При обновлении кластера следует обновлять сервера по очереди. Таким образом, при обновлении один из серверов будет всегда запущен и работа сервисов не будет прервана. Для разделения кластера следует использовать инструмент 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
  5. Командой ifconfig проверить, что все VRRP IP-адреса находятся на ecss1 (VRRP-mysql/VRRP-SIP1/VRRP-SIP2).

    на ecss1

    ifconfig
    CODE
  6. Необходимо замаскировать все ноды на сервере, который будет обновляться первым, отключите автозапуск нод:

    на ecss2

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

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

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

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

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

  1. Актуализировать репозиторий ssw:

    на обоих хостах

    sudo sh -c "echo deb [arch=amd64]  http://archive.eltex.org/ssw/jammy/3.17 stable main extras external > /etc/apt/sources.list.d/eltex-ecss10-stable.list"
    CODE
  2. Выполнить обновление пакетов:

    на обоих хостах

    sudo apt update
    CODE

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

  1. Установите новую БД Postgres (сначала на ecss1, далее на ecss2).

    на обоих хостах, сначала на ecss1, потом на ecss2

    sudo apt install ecss-postgres-bdr-ssw
    CODE

    Если при установки пакета, выдается!

    ecss-postgres-bdr-ssw : Depends: docker-compose-plugin but it is not installable --> выполнить следующие команды:

    на всех хостах

    sudo install -m 0755 -d /etc/apt/keyrings
    CODE

    на всех хостах

    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    CODE

    на всех хостах

    sudo chmod a+r /etc/apt/keyrings/docker.asc
    CODE

    на всех хостах

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    CODE

    на всех хостах

    sudo apt update
    CODE

    на обоих хостах, сначала на ecss1, потом на ecss2

    sudo apt install ecss-postgres-bdr-ssw
    CODE

    В процессе установки будут заданы вопросы:

    -- Выбираем адрес для репликации из списка (на двух хостах  )
    -- хотим установку в кластере (на двух хостах)
    -- да я мастер (на ecss1)/ нет я не мастер (на ecss2)
    -- на ecss2,  указываем адрес мастера, (указанный в ответе на вопрос 1 для ecss1)

  2. Проверьте корректность настройки репликации.
    Во время установки в директорию /srv/ecss/ecss-postgres-bdr-ssw устанавливается скрипт postgresbdr_ssw.sh.
    Для проверки репликации выполните следующие команды:

    Для проверки репликации выполнить команду на обоих хостах:

    cd /srv/ecss/ecss-postgres-bdr-ssw
    CODE

    Для проверки репликации выполнить команду на обоих хостах:

    sudo ./postgresbdr_ssw.sh check
    CODE

    Вывод на хостах ecss1/ecss2 должен быть одинаковый.

    Пример:
    sudo ./postgresbdr_ssw.sh check
    Enter master ip please
    Like 10.150.150.15
    10.0.10.81
    Enter slave ip please
    10.0.10.82
    Press enter with empty password
    Просто щелкайте Enter, не вводя пароль
    q - выход из просмотра таблицы (если необходимо)
    таблица нод на мастере по ecss_storekeeper_db
    таблица нод на слейве по ecss_storekeeper_db
    таблица коннекций на мастер по ecss_storekeeper_db
         conn_sysid      |                                       conn_dsn                                        
    ---------------------+---------------------------------------------------------------------------------------
     7569499877813944343 | host=10.0.10.81 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
     7569514001040228374 | host=10.0.10.82 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
    (2 rows)
    
    таблица коннекций на слейве по ecss_storekeeper_db
         conn_sysid      |                                       conn_dsn                                        
    ---------------------+---------------------------------------------------------------------------------------
     7569499877813944343 | host=10.0.10.81 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
     7569514001040228374 | host=10.0.10.82 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
    (2 rows)
  3. Обновление пакета ecss-dns-env:

    на ecss2

    sudo apt install ecss-dns-env
    CODE

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

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

    на ecss2

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

    на ecss2

    sudo apt install ecss-user
    CODE
  5. Выполните обновление пакета ecss-utils:

    на ecss2

    sudo apt install ecss-utils
    CODE
  6. Выполните обновление пакета ecss-node:

    на ecss2

    sudo apt install ecss-node
    CODE

    Вопросы на установку ecss-node:

    * ECSS-node ID in DNS format: <Согласно лицензии>.
    * Default configuration: yes
    * Global config: yes

    Примите все изменения файлов конфигурации.

  7. Выполните миграцию пользователей cocon (audit_database):

    на ecss2

    /usr/bin/migrate_cocon.exs
    CODE

    Будет предложен список вопросов для настройки параметров подключения к MySQL:

    ПараметрОписаниеЗначение по умолчанию
    MySQL database hostnameАдрес БД MySQLcocon.mysql.ecss
    MySQL database portПорт БД MySQL3306
    ecss_audit database nameИзменённое имя БДecss_audit

    ecss_audit database username

    Имя пользователя MySQL для доступа к базе ecss_auditaudit
    ecss_audit database passwordПароль пользователя MySQL для доступа к базе ecss_auditaudit

    Скрипт:

    • подготовит базу данных PostgreSQL к работе с SSW 3.17
    • произведет подключения к базам данных MySQL и PostgreSQL
    • выполнит миграции Ecto (команды DDL, такие как создание таблиц)
    • перенесет необходимые для работы CoCon данные из MySQL в PostgreSQL

    После успешного выполнения скрипта в базе PostgreSQL будут находится все необходимые данные для входа в CoCon на SSW 3.17

  8. Включите ноды.
    Включить сервисы 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
  9. Запуск SSW на ecss2. Запустите следующие сервисы:
    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
    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.


    Пока не следует запускать PA-SIP!

  10. Проверьте статус сервисов, для этого выполните в CoCon команду system-status:
    выполняется в CoCon
    /system-status 
    Checking...
    ┌─┬───────────────┬────────────────────────────┬───────────────┬────────────┬──────┐
    │ │     Node      │          Release           │ Erlang nodes  │Mnesia nodes│Uptime│
    ├─┼───────────────┼────────────────────────────┼───────────────┼────────────┼──────┤
    │ │core1@ecss2    │ecss-core-3.17.1.0.1771     │core1@ecss2    │not running │2m 27s│
    │ │ds1@ecss2      │ecss-ds-3.17.1.0.1771       │ds1@ecss2      │ds1@ecss2   │2m 32s│
    │ │md1@ecss2      │ecss-mediator-3.17.1.0.1771 │md1@ecss2      │md1@ecss2   │2m 16s│
    │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss2│not running │2m 39s│
    │ │sorm1@ecss2    │ecss-sorm-3.17.1.0.1771     │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.16.1.0 │ connected │ 00:00:10  │
    │             │ msr.ecss2 │ 3.14.16.1.0 │ connected │ 00:00:10  │
    └─────────────┴───────────┴─────────────┴───────────┴───────────┘
  11. Описание команд миграции и рекомендации


    Миграция статистики

    • Так как таблицы статистики динамические, каждые 5 минут агрегируются данные и удаляются старые, то вместо размера таблицы при команде /check используется index последней записи.

    Рекомендации

    • Промигрировать всю статистику с активного работающего хоста с MySQL на новый неактивный c PostgresSQL.
    • Чтобы избежать неконсистентности данных не включайте статистику на новом хосте до полного завершения миграции. После ввода в работу нового хоста основная часть данных уже будет промигрирована. Нужно будет запустить миграцию остаточных данных, которые успели появится на MySQL-хосте. В зависимости от скорости переключения хостов будет до 10 пятиминуток, так что потери по времени будут минимальны.
    • Чтобы избежать потери данных с MySQL-хоста, желательно выдержать пятиминутную паузу после вывода этого хоста из работы и запустить миграцию на PostgresSQL-хосте чтобы забрать оставшиеся данные, иначе можно потерять одну пятиминутную запись.
    • Лучше мигрировать данные в порядке следующего приоритета таблиц:
      • intrahour
      • hour
      • daily
      • weekly
      • monthly


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

    База данныхТаблицаТаблицы-зависимости
    auditecss_role_group
    • ecss_groups
    • ecss_roles

    ecss_groups_users
    • ecss_groups
    • ecss_users
    ecss_role_settings
    • ecss_roles
    ecss_user_settings2
    • ecss_users
    ecss_audit_commands_requests
    • ecss_audit_sessions
    ecss_audit_commands_answers
    • ecss_audit_sessions
    • ecss_audit_commands_requests
    calls ss
    • tolltickets
    address_book

    contact

    • source

    email

    • contact

    phone

    • contact
    • label

    Выполните миграции таблиц DB:
    Проверьте, какие данные доступны для переноса, можно командой:
    выполняется в CoCon

    /system/postgresql/migration/check <DATABASE> <* | table> [options]
    где DATABASE:


    • address_book
    • audit
    • calls
    • dialer
    • history
    • meetings
    • subscribers


     где Options:

    • --hostname, адрес хоста с БД
    • --port
    • --database, имя базы данных данное в опциях для этой БД
    • --username, имя пользователя БД
    • --password, пароль пользователя БД

    Пример:
    /system/postgresql/migration/check address_book * --hostname ecss1 --username ******* --password *******                
    ┌────────────┬────────────────┬────────────────────────────────────┬───────────────────────────────┐
    │     DB     │     Table      │               Status               │          Description          │
    ├────────────┼────────────────┼────────────────────────────────────┼───────────────────────────────┤
    │address_book│contact         │Needs migration.                    │Depends on: `source`.          │
    │            │                │Meegrated: 0 / 1785                 │                               │
    │            │                │                                    │                               │
    │-           │label           │Needs migration.                    │No dependencies.               │
    │            │                │Meegrated: 0 / 5                    │                               │
    │            │                │                                    │                               │
    │-           │phone           │Needs migration.                    │Depends on: `contact`, `label`.│
    │            │                │Meegrated: 0 / 2493                 │                               │
    │            │                │                                    │                               │
    │-           │changes         │Needs migration.                    │No dependencies.               │
    │            │                │Meegrated: 0 / 5                    │                               │
    │            │                │                                    │                               │
    │-           │email           │Needs migration.                    │Depends on: `contact`.         │
    │            │                │Meegrated: 0 / 588                  │                               │
    └────────────┴────────────────┴────────────────────────────────────┴───────────────────────────────┘

    Миграцию выполните командой:

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

    /system/postgresql/migration/do <DATABASE> <TABLE> --hostname ecss1
    CODE
    Команда создаёт задачу миграции.
    Задача имеет 3 статуса: migrating, finished, failed.
    При запуске команды проверяется текущий размер таблицы и сверяется с данными последней миграции этой таблицы. При необходимости миграции данных задача запускается и уходит в фон. Размер таблицы фиксируется на моменте старта задачи миграции. Offset автоматически берётся с последней записи миграции таблицы, действуя как чек поинт.
    Флаги offset/limit использовать только для ручного устранении проблем при миграции.

    Выполните cocon-команды для переноса данных из MySQL в PostgreSQL.
    Используя команду check, для каждой БД промигрируйте таблицы баз данных. В командах работает автодополнение для всех ДБ и их таблиц.


    Проверьте прохождение миграции командой:

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

    /system/postgresql/migration/info <DATABASE> <TABLE>
    CODE

    Пример:
    /system/postgresql/migration/info address_book              
    ┌────┬────────────┬────────────────────┬──────────┬────────────────┬───────────────────┬───────────────────┐
    │ ID │     DB     │       Table        │  Status  │     Props      │    Start Time     │     End Time      │
    ├────┼────────────┼────────────────────┼──────────┼────────────────┼───────────────────┼───────────────────┤
    │1   │address_book│source              │finished  │current: 2      │22.01.2026 13:14:20│22.01.2026 13:14:20│
    │    │            │                    │          │overall: 2      │                   │                   │
    │2   │address_book│label               │failed    │current: 0      │22.01.2026 13:14:30│22.01.2026 13:14:30│
    │    │            │                    │          │overall: 5      │                   │                   │
    │3   │address_book│changes             │failed    │current: 0      │22.01.2026 13:14:49│22.01.2026 13:14:49│
    │    │            │                    │          │overall: 5      │                   │                   │
    │4   │address_book│contact             │finished  │current: 1785   │22.01.2026 13:14:56│22.01.2026 13:14:56│
    │    │            │                    │          │overall: 1785   │                   │                   │
    │5   │address_book│phone               │finished  │current: 2493   │22.01.2026 13:15:03│22.01.2026 13:15:03│
    │    │            │                    │          │overall: 2493   │                   │                   │
    │6   │address_book│email               │finished  │current: 588    │22.01.2026 13:15:07│22.01.2026 13:15:07│
    │    │            │                    │          │overall: 588    │                   │                   │
    └────┴────────────┴────────────────────┴──────────┴────────────────┴───────────────────┴───────────────────┘
  12. Обновление пакета ecss-restfs.
    Принять все новые конфигурационные файлы, выбирая  Y.

    на ecss2

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

    Media Server анализирует конфигурацию в файлах находящихся в директории /etc/ecss/ecss-media-server/. В версии 3.17 реализована новая функция контроля приоритетности кодеков. Если по какой то причине в нескольких файлах присутствует секция "codec", в которой несколько раз прописывается один и тот же кодек, то после обновления возникнет конфликт, и Media Server работать не будет.

    Поэтому в конфигурационных файлах одного 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
  14. Обновление пакета ecss-media-resources:

    на ecss2

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

    на ecss2

    sudo apt install ecss-web-conf
    CODE

  16. Обновление пакета 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-peeper-client

    на ecss2

    sudo apt install ecss-peeper-client
    CODE
  17. Перенесите актуальные регистрации абонентов:
    Перед переводом 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.17.1.0.1771     │core1@ecss2    │not running │2m 27s│
    │ │ds1@ecss2      │ecss-ds-3.17.1.0.1771       │ds1@ecss2      │ds1@ecss2   │2m 32s│
    │ │md1@ecss2      │ecss-mediator-3.17.1.0.1771 │md1@ecss2      │md1@ecss2   │2m 16s│
    │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss2│not running │2m 39s│
    │ │sip1@ecss2     │ecss-pa-sip-3.17.1.0.1771   │sip1@ecss2     │sip1@ecss2  │2m 22s│
    │ │sorm1@ecss2    │ecss-sorm-3.17.1.0.1771     │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.16.1.0 │ connected │ 00:00:10  │
    │             │ msr.ecss2 │ 3.17.1.0.28 │ connected │ 00:00:10  │
    └─────────────┴───────────┴─────────────┴───────────┴───────────┘
    CODE
    Выполните проверку переезда активных регистраций на обновленный хост. Для этого выполните контроль зарегистрированных абонентов на одном (3.114.16) и втором (3.17) хостах. Выполните команду в CoCon:

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

    /domain/test_domain/sip/user/registered sip *            
    450 make users list ...
    [**********************************************************************] 28mks    
    450 users information read ...
    [**********************************************************************] 1ms      
    Executed on the sip1@ecss2
    ┌───────────────┐
    │ elements: 436 │
    └───────────────┘
    CODE

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

    /domain/test_domain/sip/user/registered sip *            
    450 make users list ...
    [**********************************************************************] 28mks    
    450 users information read ...
    [**********************************************************************] 1ms      
    Executed on the sip1@ecss1
    ┌───────────────┐
    │ elements: 438 │
    └───────────────┘
    CODE
  18. Запустие сервиса keepalived:

    на ecss2

    sudo systemctl enable --now keepalived
    CODE

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

  1. Подготовьте ecss1 к обновлению, для этого переведите весь трафик на ecss2 (команда выполняется на ecss1):

    на ecss1

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

    на ecss2

    ifconfig
    CODE
  3. После разделения кластера выключите все ноды на сервере ecss1:

    на ecss1

    sudo systemctl mask --now ecss-ds ecss-mycelium ecss-mediator ecss-core ecss-pa-sip ecss-sorm
    CODE
  4. Выполните миграции таблиц DB, как описывалось ранее:
    Проверьте, какие данные доступны для переноса командой:
    выполняется в CoCon

    /system/postgresql/migration/check <DATABASE> *
    где DATABASE:

    • address_book
    • audit
    • calls
    • dialer
    • history
    • meetings
    • subscribers

    Пример:
    /system/postgresql/migration/check address_book * --username ******* --password *******                
    ┌────────────┬────────────────┬────────────────────────────────────┬───────────────────────────────┐
    │     DB     │     Table      │               Status               │          Description          │
    ├────────────┼────────────────┼────────────────────────────────────┼───────────────────────────────┤
    │address_book│contact         │Needs migration.                    │Depends on: `source`.          │
    │            │                │Meegrated: 0 / 1785                 │                               │
    │            │                │                                    │                               │
    │-           │label           │Needs migration.                    │No dependencies.               │
    │            │                │Meegrated: 0 / 5                    │                               │
    │            │                │                                    │                               │
    │-           │phone           │Needs migration.                    │Depends on: `contact`, `label`.│
    │            │                │Meegrated: 0 / 2493                 │                               │
    │            │                │                                    │                               │
    │-           │changes         │Needs migration.                    │No dependencies.               │
    │            │                │Meegrated: 0 / 5                    │                               │
    │            │                │                                    │                               │
    │-           │email           │Needs migration.                    │Depends on: `contact`.         │
    │            │                │Meegrated: 0 / 588                  │                               │
    └────────────┴────────────────┴────────────────────────────────────┴───────────────────────────────┘

    Миграцию выполните командой:

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

    /system/postgresql/migration/do <DATABASE> <TABLE>
    CODE
    Проверьте прохождение миграции командой:

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

    /system/postgresql/migration/info <DATABASE> <TABLE>
    CODE

    Пример:
    /system/postgresql/migration/info address_book              
    ┌────┬────────────┬────────────────────┬──────────┬────────────────┬───────────────────┬───────────────────┐
    │ ID │     DB     │       Table        │  Status  │     Props      │    Start Time     │     End Time      │
    ├────┼────────────┼────────────────────┼──────────┼────────────────┼───────────────────┼───────────────────┤
    │1   │address_book│source              │finished  │current: 2      │22.01.2026 13:14:20│22.01.2026 13:14:20│
    │    │            │                    │          │overall: 2      │                   │                   │
    │2   │address_book│label               │failed    │current: 0      │22.01.2026 13:14:30│22.01.2026 13:14:30│
    │    │            │                    │          │overall: 5      │                   │                   │
    │3   │address_book│changes             │failed    │current: 0      │22.01.2026 13:14:49│22.01.2026 13:14:49│
    │    │            │                    │          │overall: 5      │                   │                   │
    │4   │address_book│contact             │finished  │current: 1785   │22.01.2026 13:14:56│22.01.2026 13:14:56│
    │    │            │                    │          │overall: 1785   │                   │                   │
    │5   │address_book│phone               │finished  │current: 2493   │22.01.2026 13:15:03│22.01.2026 13:15:03│
    │    │            │                    │          │overall: 2493   │                   │                   │
    │6   │address_book│email               │finished  │current: 588    │22.01.2026 13:15:07│22.01.2026 13:15:07│
    │    │            │                    │          │overall: 588    │                   │                   │
    └────┴────────────┴────────────────────┴──────────┴────────────────┴───────────────────┴───────────────────┘

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

  1. Выполните на ecss2 объединение в кластер:

    на ecss2

    sudo ecss-control attach
    CODE
  2. Активируйте сервис Keepalived.

    на ecss1

    sudo systemctl enable --now keepalived
    CODE
  3. Обновите пакет ecss-dns-env.

    на ecss1

    sudo apt install ecss-dns-env
    CODE

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

    на ecss1

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

    на ecss1

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

    на ecss1

    sudo apt install ecss-utils
    CODE
  6. Обновите пакет ecss-node:

    на ecss1

    sudo apt install ecss-node
    CODE

    на ecss1

    ВОПРОСЫ НА УСТАНОВКУ ecss-node:

    * ECSS-node ID in DNS format: <Согласно лицензии>.
    * Default configuration: yes
    * Global config: yes

    Примите все изменения файлов конфигурации!

  7. Включите сервисы 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
  8. Сервис ecss-sorm на ecss1 сразу замаскируйте, так как по умолчанию заявлена работа ecss-sorm на одном хосте в кластере. 

    на ecss1

    sudo systemctl mask ecss-sorm
    CODE
  9. На 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.17.1.0.1771     │core1@ecss2                    │not running │3h 5m  │
    │ │ds1@ecss2      │ecss-ds-3.17.1.0.1771       │ds1@ecss2                      │ds1@ecss2   │3h 5m  │
    │ │md1@ecss2      │ecss-mediator-3.17.1.0.1771 │md1@ecss2                      │md1@ecss2   │3h 5m  │
    │ │mycelium1@ecss1│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running │10m 42s│
    │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running │3h 5m  │
    │ │sip1@ecss2     │ecss-pa-sip-3.17.1.0.1771   │sip1@ecss2                     │sip1@ecss2  │3h 5m  │
    │ │sorm1@ecss2    │ecss-sorm-3.17.1.0.1771     │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.16.1.0   │ connected │ 00:21:09  │
    │             │ msr.ecss2 │ 3.17.1.0.28   │ connected │ 00:00:59  │
    └─────────────┴───────────┴───────────────┴───────────┴───────────┘
  10. Перед запуском 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
  11. На 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.17.1.0.1771     │core1@ecss2                    │not running        │3h 13m │
    │ │ds1@ecss1      │ecss-ds-3.17.1.0.1771       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2│12s    │
    │ │ds1@ecss2      │ecss-ds-3.17.1.0.1771       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2│3h 13m │
    │ │md1@ecss2      │ecss-mediator-3.17.1.0.1771 │md1@ecss2                      │md1@ecss2          │3h 13m │
    │ │mycelium1@ecss1│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running        │18m 33s│
    │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running        │3h 13m │
    │ │sip1@ecss2     │ecss-pa-sip-3.17.1.0.1771   │sip1@ecss2                     │sip1@ecss2         │3h 13m │
    │ │sorm1@ecss2    │ecss-sorm-3.17.1.0.1771     │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.16.1.0   │ connected │ 00:29:01  │
    │             │ msr.ecss2 │ 3.17.1.0.28   │ connected │ 00:08:50  │
    └─────────────┴───────────┴───────────────┴───────────┴───────────┘
  12. Такими же действиями, что и выше, запустите сервисы: ecss-mediator, ecss-pa-sip, ecss-core следующими командами:

    на ecss1

    sudo systemctl start ecss-core
    CODE

    на ecss1

    sudo systemctl start ecss-mediator
    CODE

    на ecss1

    sudo systemctl start ecss-pa-sip
    CODE
    Проверьте статус в CoCom:
    Результат:
    /system-status 
    Checking...
    ┌─┬───────────────┬────────────────────────────┬───────────────────────────────┬─────────────────────┬──────┐
    │ │     Node      │          Release           │         Erlang nodes          │    Mnesia nodes     │Uptime│
    ├─┼───────────────┼────────────────────────────┼───────────────────────────────┼─────────────────────┼──────┤
    │ │core1@ecss1    │ecss-core-3.17.1.0.1771     │core1@ecss1,core1@ecss2        │not running          │3m 50s│
    │ │core1@ecss2    │ecss-core-3.17.1.0.1771     │core1@ecss1,core1@ecss2        │not running          │3h 22m│
    │ │ds1@ecss1      │ecss-ds-3.17.1.0.1771       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │9m 42s│
    │ │ds1@ecss2      │ecss-ds-3.17.1.0.1771       │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │3h 22m│
    │ │md1@ecss1      │ecss-mediator-3.17.1.0.1771 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │5m 22s│
    │ │md1@ecss2      │ecss-mediator-3.17.1.0.1771 │md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │3h 22m│
    │ │mycelium1@ecss1│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running          │28m 4s│
    │ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1771 │mycelium1@ecss1,mycelium1@ecss2│not running          │3h 23m│
    │ │sip1@ecss1     │ecss-pa-sip-3.17.1.0.1771   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│4m 40s│
    │ │sip1@ecss2     │ecss-pa-sip-3.17.1.0.1771   │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│3h 22m│
    │ │sorm1@ecss2    │ecss-sorm-3.17.1.0.1771     │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.16.1.0   │ connected │ 00:02:37  │
    │ core1@ecss2 │ msr.ecss1 │ 3.14.16.1.0   │ connected │ 00:38:31  │
    │             │ msr.ecss2 │ 3.17.1.0.28   │ connected │ 00:18:20  │
    └─────────────┴───────────┴───────────────┴───────────┴───────────┘
  13. Обновите пакет ecss-restfs:

    на ecss1

    sudo apt install ecss-restfs
    CODE
  14. Обновите пакет 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" g726="0" 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
  15. Обновите пакет ecss-media-resources:

    на ecss1

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

    на ecss1

    sudo apt install ecss-web-conf
    CODE
  17. Обновите пакет 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

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

    на ecss2

    sudo apt install ecss-call-api
    CODE

    Обновите пакет ecss-peeper-client

    на ecss2

    sudo apt install ecss-peeper-client
    CODE


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

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