Skip to content

Commit 2e537d5

Browse files
committed
docs: add requirements.txt and explain why no Docker support
1 parent 4b4863e commit 2e537d5

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,22 @@ Most UPS shutdown solutions are **single-system focused**. Eneru is designed for
6262

6363
---
6464

65+
## 🤔 Why an Old-Fashioned Systemd Daemon? (No Docker)
66+
67+
You might wonder why Eneru runs as a traditional systemd service instead of a container. This is intentional:
68+
69+
**The Chicken-and-Egg Problem:** Eneru's job is to gracefully shut down Docker/Podman containers during power events. If Eneru itself ran inside a container, it would be stopped during its own shutdown sequence—potentially stalling the entire process and leaving the host in an undefined state.
70+
71+
Running as a systemd daemon ensures:
72+
- **Eneru survives container shutdown** - It can orchestrate the full sequence without being killed
73+
- **Direct host access** - Native access to systemd, virsh, SSH, and filesystem operations
74+
- **Reliability** - No container runtime dependency that could fail during a power event
75+
- **Simplicity** - While it's technically possible to code Eneru to run inside a container (with careful self-exclusion logic during shutdown), this would significantly increase codebase complexity and still introduce the possibility that something goes wrong—leaving Eneru unable to complete its job
76+
77+
This is the same reason critical infrastructure services like NUT itself run as system daemons, not containers.
78+
79+
---
80+
6581
## Features
6682

6783
### High-Performance Monitoring

requirements.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Eneru - Python Dependencies
2+
#
3+
# Install with: pip install -r requirements.txt
4+
#
5+
# Note: For production use, prefer system packages (apt/dnf) over pip
6+
# to ensure proper integration with system Python and security updates.
7+
8+
# Required
9+
PyYAML>=5.4.1
10+
11+
# Optional - for notifications (100+ services via Apprise)
12+
# Remove this line if you don't need notifications
13+
apprise>=1.9.6

0 commit comments

Comments
 (0)