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), гипервизоры и другие аппаратные комплексы. Проект получил многочисленные доработки как от конечных пользователей, так и от представителей вендоров электрооборудования (уделяющих документацию на протоколы, образцы устройств, а зачастую и собственные драйверы и правки кода по результатам обратной связи сообщества).
Примечания
- ↑ 3493/tcp. Дата обращения: 10 августа 2022. Архивировано 26 августа 2025 года.
- ↑ RFC 9271: UPS management protocol (англ.). ietf.org (август 2022). Архивировано 22 августа 2025 года.
- ↑ Jim Klimov. NUT for Windows (GitHub wiki page) (англ.). GitHub (22 мая 2024). Архивировано 15 сентября 2025 года.
- ↑ Russell Kroll. Network UPS Tools: Acknowledgements (25 ноября 2004). Дата обращения: 9 июня 2010. Архивировано 4 октября 2025 года.
- ↑ 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 года.
- ↑ Файл README к smartupstools-0.20.
- ↑ Updates to NUT project leadership. Nut-upsdev (mailing list) (13 ноября 2020). Архивировано 26 августа 2025 года.
- ↑ NUT coding quality improvements. Nut-upsdev (mailing list) (28 ноября 2020). Архивировано 26 августа 2025 года.
- ↑ NUT v2.8.0 unveiled, just a few years (too many) in the making. Nut-upsdev (mailing list) (26 апреля 2022). Архивировано 26 августа 2025 года.
- ↑ 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 года.
- ↑ Jim Klimov. Building NUT for in-place upgrades or non-disruptive tests (GitHub wiki page) (англ.). GitHub (28 июля 2024). Архивировано 18 января 2025 года.