Add nix import and export to nncp

This commit is contained in:
Ehmry - 2022-02-07 13:06:10 +01:00
parent 7b512e337c
commit a02e4625da
3 changed files with 36 additions and 9 deletions

View File

@ -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" ]);
};

View File

@ -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; }; }; }

View File

@ -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";