2025-03-25 09:06:23 +00:00
# NUPST - Node.js UPS Shutdown Tool
NUPST is a command-line tool that monitors SNMP-enabled UPS devices and initiates system shutdown when power outages are detected and battery levels are low.
## Features
2025-03-25 09:49:30 +00:00
- Monitors UPS devices using SNMP (v1, v2c, and v3 supported)
2025-03-25 09:06:23 +00:00
- Automatic shutdown when battery level falls below threshold
- Automatic shutdown when runtime remaining falls below threshold
2025-03-25 09:49:30 +00:00
- Supports multiple UPS brands (CyberPower, APC, Eaton, TrippLite, Liebert/Vertiv)
2025-03-25 09:06:23 +00:00
- Simple systemd service integration
2025-03-25 09:49:30 +00:00
- Regular status logging for monitoring
- Real-time log viewing with journalctl
- Version checking and automatic updates
2025-03-25 09:06:23 +00:00
- Self-contained - includes its own Node.js runtime
## Installation
### Quick Install (One-line command)
```bash
# Install directly without cloning the repository (requires root privileges)
curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash
2025-03-25 11:31:24 +00:00
# Install with auto-yes for dependencies (will install git automatically if needed)
curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- -y
2025-03-25 09:06:23 +00:00
```
### Direct from Git
```bash
# Clone the repository
git clone https://code.foss.global/serve.zone/nupst.git
cd nupst
# Option 1: Quick install (requires root privileges)
sudo ./install.sh
2025-03-25 11:31:24 +00:00
# Option 1a: Quick install with auto-yes for dependencies
sudo ./install.sh -y
2025-03-25 09:06:23 +00:00
# Option 2: Manual setup
./setup.sh
sudo ln -s $(pwd)/bin/nupst /usr/local/bin/nupst
```
2025-03-25 11:31:24 +00:00
### Installation Options
The installer script (`install.sh` ) supports the following options:
```
-y, --yes Automatically answer yes to all prompts (like installing git)
-h, --help Show the help message
```
2025-03-25 09:06:23 +00:00
### From NPM
```bash
npm install -g @serve .zone/nupst
```
2025-03-25 11:31:24 +00:00
## System Changes
When installed, NUPST makes the following changes to your system:
### File System Changes
| Path | Description |
|------|-------------|
| `/opt/nupst/` | Main installation directory containing the NUPST files |
| `/etc/nupst/config.json` | Configuration file |
| `/usr/local/bin/nupst` | Symlink to the NUPST executable |
| `/etc/systemd/system/nupst.service` | Systemd service file (when enabled) |
### Service Changes
- Creates and enables a systemd service called `nupst.service` (when enabled with `nupst enable` )
- The service runs with root permissions to allow system shutdown capabilities
### Network Access
- NUPST only communicates with your UPS device via SNMP (default port 161)
- Brief connections to npmjs.org to check for updates
2025-03-25 09:06:23 +00:00
## Uninstallation
```bash
2025-03-25 11:31:24 +00:00
# Using the CLI tool:
sudo nupst uninstall
2025-03-25 09:06:23 +00:00
# If installed from git repository:
cd /path/to/nupst
sudo ./uninstall.sh
# If installed from npm:
npm uninstall -g @serve .zone/nupst
```
The uninstaller will:
- Stop and disable the systemd service (if installed)
2025-03-25 11:31:24 +00:00
- Remove the systemd service file from `/etc/systemd/system/nupst.service`
- Remove the symlink from `/usr/local/bin/nupst`
- Optionally remove configuration files from `/etc/nupst/`
- Remove the repository directory from `/opt/nupst/` (when using `nupst uninstall` )
2025-03-25 09:06:23 +00:00
## Usage
```
NUPST - Node.js UPS Shutdown Tool
Usage:
nupst enable - Install and enable the systemd service (requires root)
nupst disable - Stop and uninstall the systemd service (requires root)
nupst daemon-start - Start the daemon process directly
2025-03-25 09:49:30 +00:00
nupst logs - Show logs of the systemd service in real-time
2025-03-25 09:06:23 +00:00
nupst stop - Stop the systemd service
nupst start - Start the systemd service
nupst status - Show status of the systemd service and UPS status
nupst setup - Run the interactive setup to configure SNMP settings
2025-03-25 09:49:30 +00:00
nupst test - Test the current configuration by connecting to the UPS
2025-03-25 11:31:24 +00:00
nupst config - Display the current configuration
2025-03-25 09:49:30 +00:00
nupst update - Update NUPST from repository and refresh systemd service (requires root)
2025-03-25 11:31:24 +00:00
nupst uninstall - Completely uninstall NUPST from the system (requires root)
2025-03-25 09:06:23 +00:00
nupst help - Show this help message
2025-03-25 09:49:30 +00:00
Options:
--debug, -d - Enable debug mode for detailed SNMP logging
(Example: nupst test --debug)
2025-03-25 09:06:23 +00:00
```
## Configuration
NUPST provides an interactive setup to configure your UPS:
```bash
nupst setup
```
This will guide you through setting up:
- UPS IP address and SNMP settings
- Shutdown thresholds for battery percentage and runtime
- Monitoring interval
- Test the connection to your UPS
Alternatively, you can manually edit the configuration file at `/etc/nupst/config.json` . A default configuration will be created on first run:
```json
{
"snmp": {
2025-03-25 09:49:30 +00:00
"host": "192.168.1.100",
2025-03-25 09:06:23 +00:00
"port": 161,
"community": "public",
"version": 1,
2025-03-25 09:49:30 +00:00
"timeout": 5000,
"upsModel": "cyberpower"
2025-03-25 09:06:23 +00:00
},
"thresholds": {
"battery": 60,
"runtime": 20
},
"checkInterval": 30000
}
```
- `snmp` : SNMP connection settings
- `host` : IP address of your UPS (default: 127.0.0.1)
- `port` : SNMP port (default: 161)
- `version` : SNMP version (1, 2, or 3)
- `timeout` : Timeout in milliseconds (default: 5000)
2025-03-25 09:49:30 +00:00
- `upsModel` : The UPS model ('cyberpower', 'apc', 'eaton', 'tripplite', 'liebert', or 'custom')
2025-03-25 09:06:23 +00:00
- For SNMPv1/v2c:
- `community` : SNMP community string (default: public)
- For SNMPv3:
- `securityLevel` : Security level ('noAuthNoPriv', 'authNoPriv', or 'authPriv')
- `username` : SNMPv3 username
- `authProtocol` : Authentication protocol ('MD5' or 'SHA')
- `authKey` : Authentication password/key
- `privProtocol` : Privacy/encryption protocol ('DES' or 'AES')
- `privKey` : Privacy password/key
2025-03-25 09:49:30 +00:00
- For custom UPS models:
- `customOIDs` : Object containing custom OIDs for your UPS:
- `POWER_STATUS` : OID for power status
- `BATTERY_CAPACITY` : OID for battery capacity percentage
- `BATTERY_RUNTIME` : OID for runtime remaining in minutes
2025-03-25 09:06:23 +00:00
- `thresholds` : When to trigger shutdown
- `battery` : Battery percentage threshold (default: 60%)
- `runtime` : Runtime minutes threshold (default: 20 minutes)
- `checkInterval` : How often to check UPS status in milliseconds (default: 30000)
## Setup as a Service
To set up NUPST as a systemd service:
```bash
sudo nupst enable
sudo nupst start
```
To check the status:
```bash
nupst status
```
2025-03-25 09:49:30 +00:00
To view logs in real-time:
```bash
nupst logs
```
## Updating NUPST
NUPST checks for updates automatically and will notify you when an update is available. To update to the latest version:
```bash
sudo nupst update
```
This will:
1. Pull the latest changes from the git repository
2. Run the installation scripts
3. Refresh the systemd service configuration
4. Restart the service if it was running
## Security
NUPST was designed with security in mind:
### Minimal Dependencies
- **Zero Runtime NPM Dependencies**: NUPST is built without any external NPM packages to minimize the attack surface and avoid supply chain risks.
- **Self-contained Node.js**: NUPST ships with its own Node.js binary, isolated from the system's Node.js installation. This ensures:
- No dependency on system Node.js versions
- Zero external libraries that could become compromised
- Consistent, tested environment for execution
- Reduced risk of dependency-based attacks
### Implementation Security
- **Privilege Separation**: Only specific commands that require elevated permissions (`enable` , `disable` , `update` ) check for root access; all other functionality runs with minimal privileges.
- **Limited Network Access**: NUPST only communicates with the UPS device over SNMP and contacts npmjs.org only to check for updates.
- **Secure SNMPv3 Support**: Supports encrypted authentication and privacy for secure communication with the UPS device.
- **Isolated Execution**: The application runs in its working directory (`/opt/nupst` ) or specified installation location, minimizing the impact on the rest of the system.
### Installation Security
- The installation script can be reviewed before execution (`curl -sSL [url] | less` )
- All setup scripts download only verified versions and check integrity
- Installation is transparent and places files in standard locations (`/opt/nupst` , `/usr/local/bin` , `/etc/systemd/system` )
### Audit and Review
The codebase is small, focused, and designed to be easily auditable. All code is open source and available for review.
2025-03-25 09:06:23 +00:00
## License
MIT