Merge pull request #204 from bjornfor/apcupsd-service
Add apcupsd service
This commit is contained in:
commit
b09a0a49a5
|
@ -117,6 +117,7 @@
|
|||
./services/misc/rogue.nix
|
||||
./services/misc/svnserve.nix
|
||||
./services/misc/synergy.nix
|
||||
./services/monitoring/apcupsd.nix
|
||||
./services/monitoring/dd-agent.nix
|
||||
./services/monitoring/monit.nix
|
||||
./services/monitoring/nagios/default.nix
|
||||
|
|
83
modules/services/monitoring/apcupsd.nix
Normal file
83
modules/services/monitoring/apcupsd.nix
Normal file
|
@ -0,0 +1,83 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
let cfg = config.services.apcupsd;
|
||||
configFile = pkgs.writeText "apcupsd.conf" ''
|
||||
## apcupsd.conf v1.1 ##
|
||||
# apcupsd complains if the first line is not like above.
|
||||
${cfg.configText}
|
||||
'';
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
###### interface
|
||||
|
||||
options = {
|
||||
|
||||
services.apcupsd = {
|
||||
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
type = types.uniq types.bool;
|
||||
description = ''
|
||||
Whether to enable the APC UPS daemon. apcupsd monitors your UPS and
|
||||
permits orderly shutdown of your computer in the event of a power
|
||||
failure. User manual: http://www.apcupsd.com/manual/manual.html.
|
||||
Note that apcupsd runs as root (to allow shutdown of computer).
|
||||
You can check the status of your UPS with the "apcaccess" command.
|
||||
'';
|
||||
};
|
||||
|
||||
configText = mkOption {
|
||||
default = ''
|
||||
UPSTYPE usb
|
||||
NISIP 127.0.0.1
|
||||
BATTERYLEVEL 50
|
||||
MINUTES 5
|
||||
'';
|
||||
type = types.string;
|
||||
description = ''
|
||||
Contents of the runtime configuration file, apcupsd.conf. The default
|
||||
settings makes apcupsd autodetect USB UPSes, limit network access to
|
||||
localhost and shutdown the system when the battery level is below 50
|
||||
percent, or when the UPS has calculated that it has 5 minutes or less
|
||||
of remaining power-on time. See man apcupsd.conf for details.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
###### implementation
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
# Give users access to the "apcaccess" tool
|
||||
environment.systemPackages = [ pkgs.apcupsd ];
|
||||
|
||||
# NOTE 1: apcupsd runs as root because it needs permission to run
|
||||
# "shutdown"
|
||||
#
|
||||
# NOTE 2: When apcupsd calls "wall", it prints an error because stdout is
|
||||
# not connected to a tty (it is connected to the journal):
|
||||
# wall: cannot get tty name: Inappropriate ioctl for device
|
||||
# The message still gets through.
|
||||
#
|
||||
# TODO: apcupsd calls "mail" on powerfail etc. events, how should we
|
||||
# handle that? A configurable mail package or let the event logic be
|
||||
# configured from nix expressions?
|
||||
systemd.services.apcupsd = {
|
||||
description = "UPS daemon";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.apcupsd}/bin/apcupsd -b -f ${configFile} -d1";
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
Loading…
Reference in a new issue