незавершенные обновления ломают процессы java

Вопрос или проблема

Недавно из-за уязвимости, обнаруженной в Java, была установлена новая версия пакетов через процедуру автоматических обновлений:

Start-Date: 2024-11-12  06:15:15
Commandline: /usr/bin/unattended-upgrade
Upgrade: openjdk-17-jre:amd64 (17.0.12+7-1ubuntu2~22.04, 17.0.13+11-2ubuntu1~22.04), openjdk-17-jre-headless:amd64 (17.0.12+7-1ubuntu2~22.04, 17.0.13+11-2ubuntu1~22.04)
End-Date: 2024-11-12  06:15:18

больше информации: https://ubuntu.com/security/notices/USN-7098-1

Обновление, похоже, не вызвало никаких проблем, процессы Java продолжали работать, но только поверхностно. Логика кода, вызывающая внешние процессы, начала давать сбои с:

java.io.IOException error=0, Не удалось выполнить вспомогательную программу: pid: 2187894, код завершения: 1.

Для решения проблемы было необходимо перезапустить процесс Java.

Мои вопросы следующие:

Можно ли принудительно перезапускать службы (systemd), которые были установлены через пакеты Debian и имели Java в качестве зависимости? Например, tomcat9

Поможет ли фиксация пакетов предотвратить автоматические обновления этого пакета?

Какую версию Ubuntu вы используете? Ubuntu 24.04 имеет сложную систему сканирования на использование устаревших библиотек и перезапускает любой процесс, использующий заменённую библиотеку. Смотрите объявление о изменениях needrestart в Ubuntu 24.04: перезапусках служб. Это функция, которую я иногда отключаю (закомментировав строку в /etc/apt/apt.conf.d/99needrestart) из-за её агрессивности.

Смешно то, что я не думаю, что это работает для сред выполнения Java и процессов, которые её используют. Это может потребовать некоторого фактического обсуждения с Ubuntu.

Да, фиксация пакетов действительно удерживает обновления, включая обновления безопасности.

Ответ или решение

Проблема с Unattended Upgrades и Java Процессами

Недавно на вашем сервере возникла проблема после обновления пакетов Java через процедуру unattended-upgrades. Это связано с обновлением версии Java в связи с обнаруженной уязвимостью. В результате обновления, процессы Java продолжали работать, но с определенными сбоями, особенно в тех случаях, когда требовалось взаимодействие с внешними процессами. При этом возникла ошибка:

java.io.IOException error=0, Failed to exec spawn helper: pid: 2187894, exit value: 1.

Устранение Проблемы

Для решения возникшей проблемы потребовалась перезагрузка Java процессов. Данная ситуация открывает несколько дискуссионных вопросов, использование которых зависит от конкретной конфигурации системы.

1. Автоматическая Перезагрузка Служб

На системах с systemd можно настроить автоматическую перезагрузку служб, которые зависят от обновленных пакетов. Однако стоит учитывать, что в стандартной конфигурации такой функционал не всегда охватывает Java-сервисы, даже если они установлены через deb-пакеты, как, например, tomcat9.

Поскольку Java-процесс может не быть правильно выявлен системой как требующий перезагрузки, стоит рассмотреть следующие шаги:

  • Использование needrestart: Этот инструмент, начиная с Ubuntu 24.04, автоматически обнаруживает процессы, использующие устаревшие библиотеки, и предлагает их перезагрузить. Однако его способность управлять процессами Java может быть ограничена.

  • Создание юнитов systemd: Вы можете создать собственные юниты для управления запуском и остановкой Java-приложений, добавив следующее в файлы .service:

    [Service]
    ExecStart=/path/to/java -jar your-app.jar
    Restart=on-failure

Эти параметры обеспечат автоматическую перезагрузку ваших Java-приложений в случае сбоя.

2. Пиннинг Пакетов

Пакетный пиннинг является эффективным методом контроля обновлений, позволяющим удерживать пакеты от автоматического обновления. Если вы применяете пиннинг к пакету Java, например, с использованием файла /etc/apt/preferences, это предотвратит как обычные, так и безопасные обновления этого пакета.

Пример конфигурации для пиннинга:

Package: openjdk-17-jre
Pin: version 17.0.12+7-1ubuntu2~22.04
Pin-Priority: 1001

С помощью такой настройки вы можете избежать проблем, связанных с неожиданными обновлениями, однако будьте осторожны: это также может привести к отсутствию критических исправлений безопасности.

Заключение

В вашей ситуации важность правильной конфигурации автоматической перезагрузки Java-процессов, а также осознанного применения пакетного пиннинга не может быть переоценена. Рекомендуется внимательно оценивать риски, связанные с безопасностью, против удобства в управлении службами. Если требуется углубленное изучение возможностей автоматизации перезагрузки при обновлениях, рекомендуется обратиться к документации Ubuntu или соответствующим специализированным сообществам.

Оцените материал
Добавить комментарий

Капча загружается...