Перед обновлением X-Road настоятельно рекомендуется снять snapshot сервера и backup конфигурации X-Road!
====== Обновление Security Server X-Road с версии 7.3.2 до версии 7.4.2 на Ubuntu 22.04 ======
В этом документе описываются шаги, необходимые для обновления программного обеспечения X-Road Security Server с версии 7.3.2 до версии 7.4.2 на Ubuntu 22.04 LTS. Пожалуйста, внимательно прочитайте весь документ перед началом процесса обновления. Предполагается, что читатель знаком с дистрибутивом Ubuntu Linux и имеет опыт администрирования серверов безопасности X-Road.
Данное обновление не затрагивает версию операционной системы и PostgreSQL. Обновляется только программное обеспечение X-Road.
Внимание! В версии 7.4.0 произошли крупные изменения платформы:
* Минимальная версия Java повышена с 11 до **17** (apt подтянет автоматически как зависимость).
* Akka заменён на gRPC — устаревшие параметры ''akka.*'' в ''local.ini'' необходимо удалить вручную.
* UI обновлён с Vue 2 на Vue 3, серверная часть — со Spring Boot 2 на Spring Boot 3.
* Алгоритм хеширования глобальной конфигурации переключён с SHA-1 на SHA-256.
==== Подготовка ====
* Убедитесь, что текущая версия X-Road — 7.3.2:
dpkg -l | grep xroad
Все пакеты должны показывать версию **7.3.2**.
* Убедитесь, что все пакеты системы обновлены:
sudo apt update && sudo apt full-upgrade
* ОПЦИОНАЛЬНО: убедитесь, что у вас есть актуальная резервная копия (или моментальный снимок виртуальной машины) сервера.
* Сделайте резервную копию конфигурации Security Server через пользовательский интерфейс:
* Откройте веб-интерфейс **https://SECURITYSERVER:4000/**
* Перейдите в **Settings → Back Up and Restore**
* Нажмите **Back Up Configuration** и скачайте файл бэкапа в безопасное место.
* Дополнительно сделайте резервную копию базы данных (ОПЦИОНАЛЬНО):
sudo -iu postgres pg_dump -d serverconf -F c -f /var/lib/xroad/backup/serverconf_backup_$(date +%Y%m%d).sql
* Сделайте резервную копию конфигурационных файлов X-Road:
sudo cp -r /etc/xroad /etc/xroad.backup.$(date +%Y%m%d)
* Проверьте наличие устаревших Akka-параметров в локальной конфигурации:
sudo grep -i akka /etc/xroad/conf.d/local.ini 2>/dev/null
Если команда вернула какие-либо строки (например, ''*.akka.remote.artery.advanced.maximum-frame-size'') — эти параметры нужно удалить или закомментировать перед обновлением, так как Akka больше не используется в 7.4.0+.
Не пропускайте этап резервного копирования. В случае неудачного обновления бэкап позволит восстановить работоспособность сервера.
==== Обновление X-Road ====
=== Шаг 1. Остановить службы X-Road и убедиться что службы остановлены ===
sudo systemctl stop "xroad-*" && sudo systemctl list-units "xroad*"
UNIT LOAD ACTIVE SUB DESCRIPTION
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
=== Шаг 2. Заменить репозиторий пакетов ===
Если GPG-ключ ''/etc/apt/keyrings/xroad.asc'' отсутствует, предварительно выполните:
sudo wget -qO - https://deb.tunduk.kg/key.pub | sudo tee /etc/apt/keyrings/xroad.asc
Заменить репозиторий на версию 7.4.2 и выполнить полное обновление пакетов:
sudo rm /etc/apt/sources.list.d/xroad.list && echo "deb [signed-by=/etc/apt/keyrings/xroad.asc] https://deb.tunduk.kg/ubuntu22.04-7.4.2 /" | sudo tee /etc/apt/sources.list.d/xroad.list && sudo apt-get update && sudo apt-get -y full-upgrade
=== Шаг 3. Запустить службы X-Road ===
sudo systemctl start "xroad-*"
Или запустить через основной сервис:
sudo systemctl start xroad-proxy
==== Проверка после обновления ====
=== Проверка версии пакетов ===
dpkg -l | grep xroad
Все пакеты должны показывать версию **7.4.2**.
=== Проверка состояния служб ===
sudo systemctl list-units "xroad*"
Ожидаемый результат:
UNIT LOAD ACTIVE SUB DESCRIPTION
xroad-addon-messagelog.service loaded active running X-Road Messagelog Archiver
xroad-base.service loaded active exited X-Road initialization
xroad-confclient.service loaded active running X-Road confclient
xroad-monitor.service loaded active running X-Road Monitor
xroad-opmonitor.service loaded active running X-Road opmonitor daemon
xroad-proxy-ui-api.service loaded active running X-Road Proxy UI REST API
xroad-proxy.service loaded active running X-Road Proxy
xroad-signer.service loaded active running X-Road signer
=== Настройка портов точки доступа информационной системы ===
Внимание! В версии 7.4.0 на Ubuntu порты точки доступа информационной системы по умолчанию изменены с 80/443 на 8080/8443. Чтобы сервер безопасности продолжил принимать запросы от информационных систем на портах 80 и 443, необходимо вручную переопределить значения в конфигурационном файле.
* Открыть (или создать, если отсутствует) файл локальных переопределений конфигурации
sudo nano /etc/xroad/conf.d/local.ini
* Добавить секцию ''[proxy]'' (если её нет):
[proxy]
client-http-port=80
client-https-port=443
* Установить корректные права и владельца файла
sudo chown xroad:xroad /etc/xroad/conf.d/local.ini
sudo chmod 640 /etc/xroad/conf.d/local.ini
* Перезапустить службу proxy
sudo systemctl restart xroad-proxy
* Убедиться, что порты сменились на 80 и 443
sudo ss -tlnp | grep -E ':(80|443|8080|8443)\s'
=== Проверка веб-интерфейса ===
Откройте **https://SECURITYSERVER:4000/** в веб-браузере. Для входа используйте учётную запись, заданную при установке.
Для запуска веб-интерфейса требуется некоторое время. Вы можете увидеть ошибку «502 Bad Gateway» — подождите 1-2 минуты и обновите страницу.
=== Проверка глобальной конфигурации ===
Перейдите в раздел **Diagnostics** в веб-интерфейсе и убедитесь, что статус **Global configuration** — «OK».
Если статус «Failure» или «Error» — возможно, требуется новый файл привязки глобальной конфигурации (configuration anchor), сгенерированный после обновления Central Server. Запросите актуальный anchor у администраторов СМЭВ "Тундук" и загрузите его через **Settings → System Parameters → Configuration Anchor → Upload**.
=== Проверка OCSP статуса сертификатов ===
Перейдите в раздел **Keys and Certificates** и убедитесь, что OCSP статус сертификатов — «Good».
Если OCSP статус «Unknown» — перезапустите службу ''systemctl restart xroad-proxy'' или дождитесь автоматического обновления (по умолчанию раз в 48 минут). Также можно проверить статус в разделе **Diagnostics**.
=== Проверка логов ===
sudo journalctl -u xroad-proxy -n 100 --no-pager
sudo journalctl -u xroad-signer -n 50 --no-pager
Убедитесь, что в логах нет критических ошибок.
=== Проверка версии Java ===
java -version
Ожидаемый результат должен содержать ''openjdk version "17.x.x"''. Java 17 ставится автоматически как зависимость при обновлении пакетов X-Road 7.4.2.
Если в файле ''/etc/xroad/services/local.conf'' есть строка с ''JAVA_HOME'' — удалите её. Это актуально только для серверов, которые обновлялись с версий до 7.0.0.
==== Пост-обновление: что нужно знать ====
=== Автоматические бэкапы ===
Начиная с версии 7.3.0, расписание автоматических бэкапов задаётся не через cron, а через параметр в файле ''/etc/xroad/conf.d/local.ini''.
Если вы ранее изменяли расписание бэкапов в файле ''/etc/cron.d/xroad-proxy'', перенесите настройку вручную:
sudo nano /etc/xroad/conf.d/local.ini
Добавьте или отредактируйте секцию:
[configuration-client]
proxy-configuration-backup-cron=0 15 3 * * ?
После изменения перезапустите конфигурационный клиент:
sudo systemctl restart xroad-confclient
=== Удалённые и переименованные свойства конфигурации ===
В версии 7.4.0 на Security Server **полностью удалены** следующие параметры rate limiting — если они присутствуют в ''local.ini'', их необходимо убрать:
* ''ratelimit.requests.per.second''
* ''ratelimit.requests.per.minute''
Следующие свойства считаются устаревшими (deprecated), но продолжают работать:
^ Старое свойство ^ Новое свойство ^
| ''request.sizelimit.regular'' | ''proxy-ui-api.request-sizelimit-regular'' |
| ''request.sizelimit.binary.upload'' | ''proxy-ui-api.request-sizelimit-binary-upload'' |
Рекомендуется при возможности перейти на новые имена свойств.
=== Akka-параметры ===
После замены Akka на gRPC в 7.4.0 любые параметры вида ''*.akka.*'' в ''/etc/xroad/conf.d/local.ini'' игнорируются и должны быть удалены вручную (см. раздел «Подготовка»).
==== Откат обновления ====
В случае проблем после обновления:
=== Вариант 1: Восстановление из snapshot ===
Если перед обновлением был сделан snapshot виртуальной машины — восстановите его.
=== Вариант 2: Откат пакетов на версию 7.3.2 ===
Удалить репозиторий 7.4.2:
sudo rm /etc/apt/sources.list.d/xroad.list
Добавить репозиторий 7.3.2:
echo "deb [signed-by=/etc/apt/keyrings/xroad.asc] https://deb.tunduk.kg/ubuntu22.04-7.3.2 /" | sudo tee /etc/apt/sources.list.d/xroad.list
Выполнить переустановку:
sudo apt-get update
sudo apt-get install --reinstall xroad-securityserver xroad-addon-opmonitoring
Остальные пакеты X-Road подтянутся автоматически как зависимости основного метапакета.
=== Вариант 3: Восстановление конфигурации из бэкапа ===
Если конфигурация повреждена, восстановите её из резервной копии:
sudo -u xroad /usr/share/xroad/scripts/restore_xroad_proxy_configuration.sh \
-s \
-f /var/lib/xroad/backup/.tar
==== Поиск неисправностей ====
=== Службы не стартуют после обновления ===
Проверьте логи конкретного сервиса:
sudo journalctl -u xroad-proxy -n 200 --no-pager
sudo journalctl -u xroad-signer -n 200 --no-pager
sudo journalctl -u xroad-proxy-ui-api -n 200 --no-pager
=== Ошибка «502 Bad Gateway» не пропадает ===
Убедитесь, что сервис ''xroad-proxy-ui-api'' запущен:
sudo systemctl status xroad-proxy-ui-api
Если сервис не запускается, проверьте лог:
sudo tail -100 /var/log/xroad/proxy_ui_api.log
=== Проблемы с базой данных ===
Проверьте доступность базы данных:
sudo -u postgres psql -c "SELECT pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM pg_database
WHERE datname IN ('serverconf', 'messagelog', 'op-monitor');"
При необходимости восстановите базу данных из резервной копии:
sudo -iu postgres pg_restore -d serverconf -c /var/lib/xroad/backup/serverconf_backup_YYYYMMDD.sql
=== Проблемы с токеном ===
Если после обновления токен не активен:
* Перейдите в **Keys and Certificates**
* Нажмите **Log In** на нужном токене и введите PIN-код
----
Автор Кирилл Захаров, Даниил Горбенко