It is recommended to avoid creating a single package for all NUT features, installation of which may cause a huge footprint by both NUT programs and their third-party dependencies. Each end-user system has a different set of needs based on the devices they need to talk to and the user interface they prefer.
The aim of the package split suggested below is to:
This standard was created by:
Package names, library ABI suffixes and dependency names vary by operating system. The following groups describe useful boundaries rather than a mandatory set of package names. A distribution may combine groups where that matches its packaging policy.
Many packaging ecosystems support short and long descriptions of each package.
* The short description is used in the package manager’s list of installed
packages, and should be concise and informative. It is recommended to use
a common format like Network UPS Tools (NUT) - Group Name (with the
"Group Name" suffix taken from the table below) for this.
* The long description is used in the package manager’s detailed view of the
package, and should be more verbose and descriptive. The initial paragraph
common to all NUT packages should be:
Network UPS Tools (NUT) is a client/server monitoring system that allows computers to share uninterruptible power supply (UPS) and power distribution unit (PDU) hardware. Clients access the hardware through the server, and are notified whenever the power status changes.
| Group and suggested package name | Purpose and contents | Dependency considerations |
|---|---|---|
Umbrella package
| Provide what the end-users commonly require to get started and can further append specific packages to. | At least |
Common integration
| Shared configuration examples, account setup and service integration
used by the selected NUT components. Contents are platform-dependent,
e.g. | Keep ownership, permissions and runtime-directory creation consistent across packages; avoid installing the same shared file in multiple packages. Depended-on by most other NUT packages. |
Data server and basic drivers
|
| Include or depend on the libraries required by the drivers actually shipped.
On MacOS, the |
Monitoring and command-line clients
|
| A remote monitoring client should not require local hardware drivers.
Include (depend on) the NUT client runtime library and selected SSL
backend as applicable. On space-constrained systems, consider providing
the |
Client libraries
| Runtime C and, when built, C++ client libraries. | Follow the platform’s shared-library ABI naming and dependency policy; derive the package name from the library built for this release. The number in the package name, where required, is the latest compatible ABI version ("major" minus "age"). |
Development files
| Installed headers, linker metadata and | Depend on the corresponding runtime libraries and follow platform policy
for development-package naming. Package name suffixes like |
CGI interface
| The built CGI programs, templates, configuration examples and manuals. | Include their linked libraries; web-server configuration remains a separate integration task and depends on the web-server of choice. |
Device discovery
|
| When dynamic library loading is enabled, distinguish direct linked
dependencies from optional libraries needed for individual scan types.
May be further separated into |
Optional driver families
| Drivers using SNMP, NetXML, IPMI, Modbus, PowerMan, GPIO, I2C, UPower or
platform-specific interfaces, as supported by the selected build.
See the | Split by the dependencies or platform requirements of the actual driver
binaries rather than assuming every host needs every family.
Note that while serial port support is commonly available on all known
platforms (does not require extra libraries on the target system), it
may be still prudent to split the serial-only drivers into a separate
|
Python interface and client
|
| Keep the module available independently of the graphical application,
as it may have third-party consumers. Some packagers prefer to rely
on the PyPI published package rather than building the module from NUT
sources. The client module should be compatible with Python 2.7 and 3.x,
so you may package it for each interpreter version. There are separate
implementations of |
Documentation
| Generated user, developer, packaging and QA guides, and manual pages as appropriate for the documentation policy of the target distribution. | Decide whether individual manuals travel with their programs or with a documentation package, and avoid duplicate file ownership. This depends on the documentation policy of the target distribution, and technologies in their packaging systems (e.g. "facets" to optionally install some files). |
When documenting package sizes, measure installed and archive sizes for the release, architecture and build configuration concerned. State that context alongside the measurements, since sizes vary between builds.