From a02e4625dac7510e9cebc4e148185e9d76482bc8 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Mon, 7 Feb 2022 13:06:10 +0100 Subject: [PATCH] Add nix import and export to nncp --- hosts/containers/nncp/default.nix | 6 +++--- hosts/containers/nncp/neighbours.nix | 19 +++++++++++++++++++ modules/nncp.nix | 20 ++++++++++++++------ 3 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 hosts/containers/nncp/neighbours.nix diff --git a/hosts/containers/nncp/default.nix b/hosts/containers/nncp/default.nix index e9a36aa5..84f0b600 100644 --- a/hosts/containers/nncp/default.nix +++ b/hosts/containers/nncp/default.nix @@ -1,6 +1,8 @@ { config, lib, pkgs, ... }: { + imports = [ ./neighbours.nix ]; + c3d2.mergeNncpSettings = false; c3d2.hq.statistics.enable = true; c3d2.autoUpdate = true; @@ -27,9 +29,7 @@ in lib.mapAttrs (name: value: value // { via = lib.lists.remove "c3d2" value.via; - } // (if (value.addrs or { }) == { } then - { } - else { + } // (lib.attrsets.optionalAttrs (value.addrs or { } != { }) { calls = [ nightCall ]; })) (builtins.removeAttrs config.c3d2.nncp.neigh [ "c3d2" ]); }; diff --git a/hosts/containers/nncp/neighbours.nix b/hosts/containers/nncp/neighbours.nix new file mode 100644 index 00000000..d10158ea --- /dev/null +++ b/hosts/containers/nncp/neighbours.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: + +let + exec = { + # A command to asynchronously export store paths to a remote caller. + nix-store-export = with pkgs; + [ + (writeScript "nncp-nix-store-export.sh" '' + #!${bash}/bin/bash + set -euo pipefail + ${config.nix.package}/bin/nix-store --export $@ | \ + ${config.programs.nncp.package}/bin/nncp-exec -nice $NNCP_NICE $NNCP_SENDER nix-store-import + '') + ]; + + # A command to import store paths from a remote caller. + nix-store-import = [ "${config.nix.package}/bin/nix-store" "--import" ]; + }; +in { programs.nncp.settings.neigh = { emery = { inherit exec; }; }; } diff --git a/modules/nncp.nix b/modules/nncp.nix index f27d39a6..a78f9bea 100644 --- a/modules/nncp.nix +++ b/modules/nncp.nix @@ -8,12 +8,20 @@ let daemonCfg = config.services.nncp.daemon; settingsFormat = pkgs.formats.json { }; jsonCfgFile = settingsFormat.generate "nncp.json" programCfg.settings; + pkg = programCfg.package; in { options = { programs.nncp = { enable = mkEnableOption "NNCP (Node to Node copy) utilities"; + package = mkOption { + type = types.package; + default = pkgs.nncp; + defaultText = literalExpression "pkgs.nncp"; + description = "The NNCP package to use system-wide."; + }; + secrets = mkOption { type = with types; listOf str; example = [ "/run/keys/nncp.hjson" ]; @@ -108,7 +116,7 @@ in { }; environment = mkIf programCfg.enable { - systemPackages = [ pkgs.nncp ]; + systemPackages = [ pkg ]; etc."nncp.hjson".source = nncpCfgFile; }; @@ -121,12 +129,12 @@ in { nncpCfgDir=$(mktemp --directory nncp.XXXXXXXXXX) for f in ${jsonCfgFile} ${toString config.programs.nncp.secrets}; do tmpdir=$(mktemp --directory nncp.XXXXXXXXXX) - ${pkgs.nncp}/bin/nncp-cfgdir -cfg $f -dump $tmpdir + ${pkg}/bin/nncp-cfgdir -cfg $f -dump $tmpdir ${pkgs.findutils}/bin/find $tmpdir -size 1c -delete cp -a $tmpdir/* $nncpCfgDir/ rm -rf $tmpdir done - ${pkgs.nncp}/bin/nncp-cfgdir -load $nncpCfgDir > ${nncpCfgFile} + ${pkg}/bin/nncp-cfgdir -load $nncpCfgDir > ${nncpCfgFile} rm -rf $nncpCfgDir chgrp uucp ${nncpCfgFile} ''; @@ -139,7 +147,7 @@ in { wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = '' - ${pkgs.nncp}/bin/nncp-caller -noprogress -cfg "${nncpCfgFile}" ${ + ${pkg}/bin/nncp-caller -noprogress -cfg "${nncpCfgFile}" ${ lib.strings.escapeShellArgs callerCfg.extraArgs }''; Group = "uucp"; @@ -155,7 +163,7 @@ in { wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = '' - ${pkgs.nncp}/bin/nncp-daemon -noprogress -cfg "${nncpCfgFile}" ${ + ${pkg}/bin/nncp-daemon -noprogress -cfg "${nncpCfgFile}" ${ lib.strings.escapeShellArgs daemonCfg.extraArgs }''; Restart = "on-failure"; @@ -170,7 +178,7 @@ in { after = [ "network.target" ]; serviceConfig = { ExecStart = '' - ${pkgs.nncp}/bin/nncp-daemon -noprogress -ucspi -cfg "${nncpCfgFile}" ${ + ${pkg}/bin/nncp-daemon -noprogress -ucspi -cfg "${nncpCfgFile}" ${ lib.strings.escapeShellArgs daemonCfg.extraArgs }''; Group = "uucp";