From edb891e22454179bd9b18d6a3fd879c46b721ef0 Mon Sep 17 00:00:00 2001 From: nyanloutre Date: Fri, 1 Nov 2019 15:24:50 +0100 Subject: [PATCH] LoutreOS: refactor services --- systems/LoutreOS/medias.nix | 42 ++++++ systems/LoutreOS/monitoring.nix | 113 ++++++++++++++ systems/LoutreOS/services.nix | 256 +------------------------------- systems/LoutreOS/web.nix | 113 ++++++++++++++ 4 files changed, 275 insertions(+), 249 deletions(-) create mode 100644 systems/LoutreOS/medias.nix create mode 100644 systems/LoutreOS/monitoring.nix create mode 100644 systems/LoutreOS/web.nix diff --git a/systems/LoutreOS/medias.nix b/systems/LoutreOS/medias.nix new file mode 100644 index 0000000..6b92d33 --- /dev/null +++ b/systems/LoutreOS/medias.nix @@ -0,0 +1,42 @@ +{ config, lib, pkgs, ... }: + +{ + services = { + transmission = { + enable = true; + home = "/var/lib/transmission"; + settings = { + rpc-bind-address = "127.0.0.1"; + rpc-host-whitelist = "*"; + rpc-whitelist-enabled = false; + peer-port = 51413; + }; + }; + + radarr.enable = true; + sonarr.enable = true; + jackett.enable = true; + + jellyfin.enable = true; + + slimserver = { + enable = true; + dataDir = "/var/lib/slimserver"; + }; + + airsonic = { + enable = true; + maxMemory = 500; + }; + }; + + networking = { + firewall.allowedTCPPorts = [ + config.services.transmission.settings.peer-port + ]; + + firewall.allowedUDPPorts = [ + config.services.transmission.settings.peer-port + ]; + }; +} diff --git a/systems/LoutreOS/monitoring.nix b/systems/LoutreOS/monitoring.nix new file mode 100644 index 0000000..4c5bcd2 --- /dev/null +++ b/systems/LoutreOS/monitoring.nix @@ -0,0 +1,113 @@ +{ config, lib, pkgs, ... }: + +let + domaine = "nyanlout.re"; +in +{ + services = { + smartd = { + enable = true; + defaults.monitored = "-a -o on -s (S/../.././02|L/../../1/04)"; + notifications.mail = { + enable = true; + recipient = "paul@nyanlout.re"; + }; + }; + + influxdb = { + enable = true; + dataDir = "/var/db/influxdb"; + }; + + telegraf = { + enable = true; + extraConfig = { + inputs = { + zfs = { poolMetrics = true; }; + net = { interfaces = [ "eno1" "eno2" "eno3" "eno4" ]; }; + netstat = {}; + cpu = { totalcpu = true; }; + kernel = {}; + mem = {}; + processes = {}; + system = {}; + disk = {}; + ipmi_sensor = { path = "${pkgs.ipmitool}/bin/ipmitool"; }; + smart = { + path = "${pkgs.writeShellScriptBin "smartctl" "/run/wrappers/bin/sudo ${pkgs.smartmontools}/bin/smartctl $@"}/bin/smartctl"; + }; + exec= [ + { commands = [ + "${pkgs.python}/bin/python ${ + pkgs.fetchgit { + url = "https://gitlab.com/nyanloutre/tplink-smartplug.git"; + rev = "a0996112fc451b76448589698de440ad5fd6ea79"; + sha256 = "1f1625g7rfsddgk428g76p8fr7vz5gfhq3f452q17bjni3rf2pj3"; + } + }/tplink_smartplug.py -t 10.30.50.7 -c energy" + ]; + data_format = "json"; + name_suffix = "_tplink-smartplug"; + } + { + commands = [ + "${pkgs.python3}/bin/python ${pkgs.writeText "zpool.py" '' + import json + from subprocess import check_output + + columns = ["NAME", "SIZE", "ALLOC", "FREE", "EXPANDSZ", "FRAG", "CAP", "DEDUP", "HEALTH", "ALTROOT"] + health = {'ONLINE':0, 'DEGRADED':11, 'OFFLINE':21, 'UNAVAIL':22, 'FAULTED':23, 'REMOVED':24} + + stdout = check_output(["${pkgs.zfs}/bin/zpool", "list", "-Hp"],encoding='UTF-8').split('\n') + parsed_stdout = list(map(lambda x: dict(zip(columns,x.split('\t'))), stdout))[:-1] + + for pool in parsed_stdout: + for item in pool: + if item in ["SIZE", "ALLOC", "FREE", "FRAG", "CAP"]: + pool[item] = int(pool[item]) + if item in ["DEDUP"]: + pool[item] = float(pool[item]) + if item == "HEALTH": + pool[item] = health[pool[item]] + + print(json.dumps(parsed_stdout)) + ''}" + ]; + tag_keys = [ "NAME" ]; + data_format = "json"; + name_suffix = "_python_zpool"; + } + ]; + }; + outputs = { + influxdb = { database = "telegraf"; urls = [ "http://localhost:8086" ]; }; + }; + }; + }; + + udev.extraRules = '' + KERNEL=="ipmi*", MODE="660", OWNER="telegraf" + ''; + + grafana = { + enable = true; + addr = "127.0.0.1"; + dataDir = "/var/lib/grafana"; + extraOptions = { + SERVER_ROOT_URL = "https://grafana.${domaine}"; + SMTP_ENABLED = "true"; + SMTP_FROM_ADDRESS = "grafana@${domaine}"; + SMTP_SKIP_VERIFY = "true"; + AUTH_DISABLE_LOGIN_FORM = "true"; + AUTH_DISABLE_SIGNOUT_MENU = "true"; + AUTH_ANONYMOUS_ENABLED = "true"; + AUTH_ANONYMOUS_ORG_ROLE = "Admin"; + AUTH_BASIC_ENABLED = "false"; + }; + }; + }; + + security.sudo.extraRules = [ + { commands = [ { command = "${pkgs.smartmontools}/bin/smartctl"; options = [ "NOPASSWD" ]; } ]; users = [ "telegraf" ]; } + ]; +} diff --git a/systems/LoutreOS/services.nix b/systems/LoutreOS/services.nix index 158b7af..df277e4 100644 --- a/systems/LoutreOS/services.nix +++ b/systems/LoutreOS/services.nix @@ -5,25 +5,6 @@ with lib; let domaine = "nyanlout.re"; - riot_port = 52345; - pgmanage_port = 52347; - max_port = 52348; - musique_port = 52349; - factorio_port = 52351; - airsonic_port = 4040; - wkd_port = 52352; - - jellyfin_backend = '' - http-request set-header X-Forwarded-Port %[dst_port] - http-request add-header X-Forwarded-Proto https if { ssl_fc } - ''; - sonarr_acl = '' - acl API path_beg /api - ''; - sonarr_auth = '' - !AUTH_OK !API - ''; - sendMail = to: subject: message: pkgs.writeShellScriptBin "mail.sh" '' ${pkgs.system-sendmail}/bin/sendmail ${to} <