modules: add tsvnstat start using it in various places
This commit is contained in:
parent
194ce0caab
commit
06593a97fa
@ -1,4 +1,4 @@
|
|||||||
{ config, pkgs, lib, isUnstable, ... }:
|
{ config, pkgs, lib, isUnstable, inputs, ... }:
|
||||||
with pkgs;
|
with pkgs;
|
||||||
let
|
let
|
||||||
restic = pkgs.writeScriptBin "restic"
|
restic = pkgs.writeScriptBin "restic"
|
||||||
@ -26,6 +26,7 @@ in {
|
|||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../modules/gotosocial.nix
|
../../modules/gotosocial.nix
|
||||||
../../modules/yarr.nix
|
../../modules/yarr.nix
|
||||||
|
../../modules/tsvnstat.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.loader.grub.enable = true;
|
boot.loader.grub.enable = true;
|
||||||
@ -77,6 +78,11 @@ in {
|
|||||||
mode = "400";
|
mode = "400";
|
||||||
sopsFile = config.xin-secrets.h.services;
|
sopsFile = config.xin-secrets.h.services;
|
||||||
};
|
};
|
||||||
|
# TODO: rename
|
||||||
|
router_stats_ts_key = {
|
||||||
|
sopsFile = config.xin-secrets.h.services;
|
||||||
|
owner = config.users.users.tsvnstat.name;
|
||||||
|
};
|
||||||
wireguard_private_key = { sopsFile = config.xin-secrets.h.services; };
|
wireguard_private_key = { sopsFile = config.xin-secrets.h.services; };
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -181,7 +187,10 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
vnstat.enable = true;
|
tsvnstat = {
|
||||||
|
enable = true;
|
||||||
|
keyPath = "${config.sops.secrets.router_stats_ts_key.path}";
|
||||||
|
};
|
||||||
yarr.enable = true;
|
yarr.enable = true;
|
||||||
gotosocial = {
|
gotosocial = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -9,7 +9,6 @@ let
|
|||||||
userBase = {
|
userBase = {
|
||||||
openssh.authorizedKeys.keys = pubKeys ++ config.myconf.managementPubKeys;
|
openssh.authorizedKeys.keys = pubKeys ++ config.myconf.managementPubKeys;
|
||||||
};
|
};
|
||||||
inherit (inputs.tsvnstat.packages.${pkgs.system}) tsvnstat;
|
|
||||||
|
|
||||||
wan = "enp5s0f0";
|
wan = "enp5s0f0";
|
||||||
trunk = "enp5s0f1";
|
trunk = "enp5s0f1";
|
||||||
@ -272,7 +271,7 @@ let
|
|||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
_module.args.isUnstable = false;
|
_module.args.isUnstable = false;
|
||||||
imports = [ ./hardware-configuration.nix ];
|
imports = [ ./hardware-configuration.nix ../../modules/tsvnstat.nix ];
|
||||||
|
|
||||||
boot.kernel.sysctl = {
|
boot.kernel.sysctl = {
|
||||||
"net.ipv4.conf.all.forwarding" = true;
|
"net.ipv4.conf.all.forwarding" = true;
|
||||||
@ -284,6 +283,10 @@ in {
|
|||||||
wireguard_private_key = {
|
wireguard_private_key = {
|
||||||
sopsFile = config.xin-secrets.router.networking;
|
sopsFile = config.xin-secrets.router.networking;
|
||||||
};
|
};
|
||||||
|
router_stats_ts_key = {
|
||||||
|
sopsFile = config.xin-secrets.router.networking;
|
||||||
|
owner = config.users.users.tsvnstat.name;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
@ -403,7 +406,10 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
vnstat.enable = true;
|
tsvnstat = {
|
||||||
|
enable = true;
|
||||||
|
keyPath = "${config.sops.secrets.router_stats_ts_key.path}";
|
||||||
|
};
|
||||||
atftpd = {
|
atftpd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraOptions = [
|
extraOptions = [
|
||||||
@ -444,28 +450,7 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [ bmon termshark tcpdump tsvnstat ];
|
environment.systemPackages = with pkgs; [ bmon termshark tcpdump ];
|
||||||
|
|
||||||
users.groups.tsvnstat = { };
|
|
||||||
|
|
||||||
users.users.tsvnstat = {
|
|
||||||
createHome = true;
|
|
||||||
isSystemUser = true;
|
|
||||||
home = "/var/lib/tsvnstat";
|
|
||||||
group = "tsvnstat";
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.tsvnstat = {
|
|
||||||
wantedBy = [ "network.target" ];
|
|
||||||
serviceConfig = {
|
|
||||||
User = "tsvnstat";
|
|
||||||
Group = "tsvnstat";
|
|
||||||
Restart = "always";
|
|
||||||
WorkingDirectory = "/var/lib/tsvnstat";
|
|
||||||
ExecStart =
|
|
||||||
"${tsvnstat}/bin/tsvnstat -name ${config.networking.hostName}-stats";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
users.users.root = userBase;
|
users.users.root = userBase;
|
||||||
users.users.qbit = userBase;
|
users.users.qbit = userBase;
|
||||||
|
94
modules/tsvnstat.nix
Normal file
94
modules/tsvnstat.nix
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
{ config, lib, pkgs, inputs, ... }:
|
||||||
|
with pkgs;
|
||||||
|
let
|
||||||
|
cfg = config.services.tsvnstat;
|
||||||
|
inherit (inputs.tsvnstat.packages.${pkgs.system}) tsvnstat;
|
||||||
|
in {
|
||||||
|
options = with lib; {
|
||||||
|
services.tsvnstat = {
|
||||||
|
enable = mkEnableOption "Enable tsvnstat";
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
type = with types; oneOf [ str int ];
|
||||||
|
default = "tsvnstat";
|
||||||
|
description = ''
|
||||||
|
The user the service will use.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
keyPath = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
Path to the TS API key file
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
nodeName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "${config.networking.hostName}-stats";
|
||||||
|
description = ''
|
||||||
|
The name of the TS node.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
group = mkOption {
|
||||||
|
type = with types; oneOf [ str int ];
|
||||||
|
default = "tsvnstat";
|
||||||
|
description = ''
|
||||||
|
The user the service will use.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
package = mkOption {
|
||||||
|
type = types.package;
|
||||||
|
default = tsvnstat;
|
||||||
|
defaultText = literalExpression "pkgs.tsvnstat";
|
||||||
|
description = "The package to use for tsvnstat";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
users.groups.${cfg.group} = { };
|
||||||
|
users.users.${cfg.user} = {
|
||||||
|
description = "tsvnstat service user";
|
||||||
|
isSystemUser = true;
|
||||||
|
home = "/var/lib/tsvnstat";
|
||||||
|
createHome = true;
|
||||||
|
group = "${cfg.group}";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.vnstat.enable = true;
|
||||||
|
|
||||||
|
systemd.services.tsvnstat = {
|
||||||
|
enable = true;
|
||||||
|
description = "tsvnstat server";
|
||||||
|
wantedBy = [ "network-online.target" ];
|
||||||
|
after = [ "network-online.target" ];
|
||||||
|
|
||||||
|
path = [
|
||||||
|
pkgs.vnstat
|
||||||
|
pkgs.coreutils
|
||||||
|
pkgs.bash
|
||||||
|
];
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
HOME = "/var/lib/tsvnstat";
|
||||||
|
HOSTNAME = config.networking.hostName;
|
||||||
|
};
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
User = cfg.user;
|
||||||
|
Group = cfg.group;
|
||||||
|
|
||||||
|
RuntimeDirectory = "tsvnstat";
|
||||||
|
StateDirectory = "tsvnstat";
|
||||||
|
StateDirectoryMode = "0755";
|
||||||
|
CacheDirectory="tsvnstat";
|
||||||
|
CacheDirectoryMode = "0755";
|
||||||
|
|
||||||
|
ExecStart =
|
||||||
|
"${cfg.package}/bin/tsvnstat -vnstati ${pkgs.vnstat}/bin/vnstati -name ${cfg.nodeName} -key ${cfg.keyPath}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user