Network UPS Tools

Network UPS Tools (NUT) — комплект программных компонентов, предназначенных для мониторинга источников электропитания, таких как источники бесперебойного питания, устройства распределения питания, солнечные контроллеры и серверные блоки питания. Поддерживается множество производителей и моделей, к которым осуществляется доступ через сетевой протокол и стандартизированный интерфейс.

Общие сведения
Network UPS Tools
Разработчики Evgeny "Jim" Klimov
Arnaud Quette
Arjen de Korte
Charles Lepple
Numerous contributors (...)
Написана на C
Операционная система кросс-платформенное приложение
Первый выпуск 8 марта 1998
Последняя версия 2.8.4 (8 августа 2025)
Репозиторий github.com/networkupstoo…
Лицензия GNU GPL
Сайт networkupstools.org

Описание

Архитектура NUT построена по трёхуровневой модели. Десятки специфичных драйверов устройств (демонов) взаимодействуют с привязанным оборудованием по специфическим для вендора протоколам. Сервер NUT (upsd) публикует доступ к этим драйверам в сети (по умолчанию на порту 3493/tcp, зарегистрированном IANA[1]) по стандартному протоколу NUT, а клиенты NUT (как на localhost, так и на удалённых системах) способны управлять электропитанием и запрашивать его состояние и прочие параметры для различных целей — от ведения истории до автоматического завершения работы, сценариев отказоустойчивости и миграции виртуальных машин.

На основе архитектуры и протокола NUT участниками сообщества был подготовлен документ «UPS management protocol», опубликованный в качестве RFC 9271 информационного характера (IETF, август 2022 года)[2], а IANA обновила реестр портов с учётом данного протокола (хотя он и не формализован как официальный стандарт Интернет).

В составе проекта поддерживаются клиенты upsc, upsrw, upscmd для работы в командной строке, upsmon для мониторинга и корректного завершения работы (с учётом количества и доступности источников электропитания), upssched для сложных сценариев мониторинга, upscgi — для простой web-интерфейсной работы, графический клиент NUT-Monitor под X11, а также библиотеки на C, C++ и Python для создания сторонних клиентов. Существуют и внешние проекты с дополнительными клиентами и привязками для других языков программирования.

Будучи кросс-платформенным проектом, NUT работает на большинстве UNIX-, BSD- и Linux-систем на разных аппаратных архитектурах — от встраиваемых систем до серверов Solaris, HP-UX, AIX. Ранее существовали отдельные сборки для Windows (до версии 2.6.5); после выпуска NUT 2.8.0 сборка для Windows вернулась в основную ветку в сентябре 2022 года (при этом часть компонентов пока служит только как заглушки и ещё не портирована, а готовых пакетов для Windows проект не предоставляет). Для версий NUT с 2.8.1 по 2.8.3[3] доступны архивные сборки для Windows из CI, однако полноценные интегрированные пакеты пока отсутствуют.

История

Исходный проект apcd Павела Коренского послужил основой для реализации поддержки протокола APC Smart-UPS в 1996 году[4]. Это то же исходное ПО, от которого произошёл и Apcupsd, как пояснил сопровождающий последнего в Debian[5].

Расселл Кролл (Russell Kroll), первый координатор проекта и автор NUT, выпустил первый пакет под названием smartupstools в 1998 году. Архитектура уже тогда предусматривала два демона: upsd (служебный сервис данных) и upsmon (защита системы), набор драйверов и примеров, CGI-модули и клиентскую интеграцию, а также набор CLI-инструментов (upsc, upsrw, upscmd) для подключения к конкретным моделям ИБП[6]. С выпуском версии 0.42.0 (31 октября 1999 года) проект был переименован в Network UPS Tools для отражения поддержки разных производителей и во избежание конфликтов с APC.

С 2005 года Арно Кетт (Arnaud Quette) возглавил проект, расширил его представленность и привлёк новых участников через размещение на Debian Alioth Forge, освободив проект от зависимости от одного человека. Работая в MGE UPS Systems, а затем Eaton, он обеспечил сотрудничество с производителями ИБП и встраиваемых систем, расширил спектр драйверов и программ для разных протоколов и устройств, добавил новые средства и привязки для enterprise-интеграций. Многие драйверы были переработаны для использования общей архитектуры и лучшего переиспользования кода.

С 2020 года проект возглавляет Евгений «Jim» Климов[7], сосредоточившись, прежде всего, на автоматическом тестировании и проверке качества уже существующей кодовой базы, снижении числа ошибок при внедрении новых изменений, устранении технических «долгов» и нестыковок, выявленных современными анализаторами и средствами покрытия[8], а также на долгожданном релизе версии 2.8.0, выпущенном 26 апреля 2022 года[9].

Необходимость тестирования NUT на большем количестве платформ, чем позволяет обычный облачный CI (например, Debian/Ubuntu, MacOS, Windows), привела к созданию собственной инфраструктуры из виртуальных машин и контейнеров у разных облачных провайдеров. Ферма сборки CI NUT, базирующаяся на Jenkins, охватывает платформы, не охваченные основными провайдерами, и использует гибкую Jenkins Shared Library «jenkins-dynamatrix»[10] для организации матрицы сборок согласно доступным узлам. Это позволило выполнять до 300 сценариев проверки для различных ОС, дистрибутивов, системных библиотек, компиляторов, shell- и make-программ — наглядно подтверждая работоспособность каждой системы при каждом изменении кода.

Дальнейшая работа Климова направлена на помощь участникам по внедрению новых драйверов и модулей, расширение совместимости с различными ОС и фреймворками, а также на сохранение документированной возможности собирать NUT на всех поддерживавшихся за прошедшие десятилетия платформах под девизом: «Если эти компьютеры ещё работают — они заслуживают защиты!»

В последние годы ведутся улучшения удобства для конечных пользователей: интеграция с управляющими фреймворками сервисов ОС, новые опции командной строки, взаиморасширяющаяся архитектура программ NUT, настройки и открытость для решений проблем и устранения неисправностей. Особое внимание уделяется поддержке сборки NUT для тестирования обновлений «на месте» или бесшовной замены[11], позволяя пользователям опробовать новую версию NUT, не нарушая текущей конфигурации системы.

За более чем 20-летнюю историю NUT стал de facto стандартом мониторинга ИБП, распространённым в дистрибутивах ОС, встраиваемым в сетевые хранилища (NAS), гипервизоры и другие аппаратные комплексы. Проект получил многочисленные доработки как от конечных пользователей, так и от представителей вендоров электрооборудования (уделяющих документацию на протоколы, образцы устройств, а зачастую и собственные драйверы и правки кода по результатам обратной связи сообщества).

Примечания

  1. 3493/tcp. Дата обращения: 10 августа 2022. Архивировано 26 августа 2025 года.
  2. RFC 9271: UPS management protocol (англ.). ietf.org (август 2022). Архивировано 22 августа 2025 года.
  3. Jim Klimov. NUT for Windows (GitHub wiki page) (англ.). GitHub (22 мая 2024). Архивировано 15 сентября 2025 года.
  4. Russell Kroll. Network UPS Tools: Acknowledgements (25 ноября 2004). Дата обращения: 9 июня 2010. Архивировано 4 октября 2025 года.
  5. Nils Rennebarth. apcupsd, genpower, and PowerChute(TM) "Black" cable. debian-user@lists.debian.org (mailing list) (1 июля 1997). — «apcupsd is derived from apcd by Pavel Korensky». Дата обращения: 9 июня 2010. Архивировано 9 июня 2011 года.
  6. Файл README к smartupstools-0.20.
  7. Updates to NUT project leadership. Nut-upsdev (mailing list) (13 ноября 2020). Архивировано 26 августа 2025 года.
  8. NUT coding quality improvements. Nut-upsdev (mailing list) (28 ноября 2020). Архивировано 26 августа 2025 года.
  9. NUT v2.8.0 unveiled, just a few years (too many) in the making. Nut-upsdev (mailing list) (26 апреля 2022). Архивировано 26 августа 2025 года.
  10. Jim Klimov. Jenkins is the way to build multi-platform NUT, and jenkinsfile-dynamatrix is the way to find what can be built today (2 октября 2022). Архивировано 5 августа 2025 года.
  11. Jim Klimov. Building NUT for in-place upgrades or non-disruptive tests (GitHub wiki page) (англ.). GitHub (28 июля 2024). Архивировано 18 января 2025 года.