Перед обновлением 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-код ---- Автор Кирилл Захаров, Даниил Горбенко