Compare commits

..

3 Commits

Author SHA1 Message Date
Jan-Bulthuis
d2f2065042 feat: Implemented madd client module 2025-08-09 23:29:36 +02:00
Jan-Bulthuis
3eae747a0d fix: Restricted monitoring client to ipv4 2025-08-09 23:29:12 +02:00
Jan-Bulthuis
1c9b1893c4 feat: Monitoring client 2025-08-09 23:10:49 +02:00
3 changed files with 85 additions and 4 deletions

View File

@ -40,7 +40,7 @@
overlays.madd = final: prev: mkPackages final; overlays.madd = final: prev: mkPackages final;
overlays.default = overlays.madd; overlays.default = overlays.madd;
nixosModules.madd = import ./nixos.nix; nixosModules.madd = import ./nixos.nix { overlay = overlays.madd; };
nixosModules.default = nixosModules.madd; nixosModules.default = nixosModules.madd;
}; };
} }

15
monitor.sh Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env bash
interface="${MADD_INTERFACE:-"eth0"}"
interface="wlp0s20f3"
client_script="${MADD_CLIENT_SCRIPT:-"./client.sh"}"
ip -4 monitor address label dev "$interface" | while read event; do
if [[ $event == \[ADDR\]* ]]; then
ipv4=$(ip -4 addr show dev "$interface" | grep -Po 'inet \K[\d.]+')
if [ -n "$ipv4" ]; then
export MADD_IP="$ipv4"
$client_script
fi
fi
done

View File

@ -1,12 +1,78 @@
{ lib, config, ... }: { overlay }:
{
lib,
pkgs,
config,
...
}:
with lib; with lib;
{ {
option.madd-client = { options.services.madd-client = {
enable = mkEnableOption "MADD client"; enable = mkEnableOption "MADD client";
endpoint = mkOption {
type = types.str;
description = "Endpoint for MADD client to connect to.";
};
interface = mkOption {
type = types.str;
default = "eth0";
description = "Network interface to use for MADD client.";
};
priv-key-file = mkOption {
type = types.str;
default = "/etc/ssh/ssh_host_ed25519_key";
description = "Path to the private SSH key file identifying this machine.";
};
pub-key-file = mkOption {
type = types.str;
default = "${config.services.madd-client.priv_key_file}.pub";
description = "Path to the public SSH key file identifying this machine.";
};
hostname = mkOption {
type = types.str;
default = config.networking.hostName;
description = "Hostname to use for MADD client.";
};
}; };
options.madd-server = { options.services.madd-server = {
enable = mkEnableOption "MADD server"; enable = mkEnableOption "MADD server";
}; };
config = {
nixpkgs.overlays = [ overlay ];
}
// (
let
cfg = config.services.madd-client;
in
optionalAttrs config.madd-client.enable {
systemd.services.madd-client = {
description = "MADD Client Service";
wantedBy = [ "multi-user.target" ];
before = [ "network-pre.target" ];
requires = [ "network-pre.target" ];
script = ''
${pkgs.iproute2}/bin/ip -4 monitor address label dev "${cfg.interface}" | while read -r event; do
if [[ $event == \[ADDR\]* ]]; then
ipv4=$(${pkgs.iproute2}/bin/ip -4 addr show dev "${cfg.interface}" | grep -Po 'inet \K[\d.]+')
if [ -n "$ipv4" ]; then
export MADD_ENDPOINT="${cfg.endpoint}"
export MADD_PRIV_KEY="${cfg.priv-key-file}"
export MADD_PUB_KEY="${cfg.pub-key-file}"
export MADD_HOSTNAME="${cfg.hostname}"
export MADD_IP="$ipv4"
${pkgs.madd-client}/bin/madd-client
fi
done
'';
};
}
)
// (optionalAttrs config.madd-server.enable {
});
} }