Skip to content

Commit f7010af

Browse files
committed
feat(demeter-run-cli): init package
Signed-off-by: Alexander V. Nikolaev <[email protected]>
1 parent 8ee8252 commit f7010af

File tree

7 files changed

+208
-0
lines changed

7 files changed

+208
-0
lines changed

flake.lock

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
url = "github:txpipe/oura/v1.9.4";
2525
inputs.crane.follows = "crane";
2626
};
27+
demeter-run-cli = {
28+
url = "github:demeter-run/cli";
29+
flake = false;
30+
};
2731
crane = {
2832
url = "github:ipetkov/crane";
2933
};

modules/default.nix

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@
7373
./monitoring.nix
7474
];
7575
};
76+
demeter-run = {
77+
imports = [
78+
./demeter-run.nix
79+
./services/demeter-run.nix
80+
];
81+
};
7682
# the default module imports all modules
7783
default = {
7884
imports = [

modules/demeter-run.nix

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{ config, lib, ... }:
2+
3+
let
4+
cfg = config.cardano.demeter-run;
5+
dmtr_cfg = config.services.demeter-run;
6+
inherit (lib)
7+
mkEnableOption
8+
mkIf
9+
mkOption
10+
types
11+
;
12+
in
13+
{
14+
options.cardano.demeter-run = {
15+
node = {
16+
enable = mkEnableOption "Demeter run tunnel";
17+
instance = mkOption {
18+
type = types.str;
19+
};
20+
21+
configFile = mkOption {
22+
type = types.str;
23+
description = ''
24+
Config file for demeter setup (contain secrets, use agenix or sops)
25+
26+
This is config file generated by dmtrctl init ... command invocation,
27+
contains random generated id, and token is obviously a secret obtained from demeter service during init.
28+
'';
29+
};
30+
};
31+
32+
# FIXME: not implemented yet
33+
kupo = { };
34+
35+
# FIXME: not implemented yet
36+
ogmios = { };
37+
};
38+
39+
config = mkIf cfg.node.enable {
40+
services.demeter-run = {
41+
enable = true;
42+
inherit (cfg.node) instance;
43+
inherit (cfg.node) configFile;
44+
};
45+
46+
# Register as cardano-node socket provider
47+
cardano.providers.node = {
48+
socketPath = dmtr_cfg.socket;
49+
accessGroup = dmtr_cfg.group;
50+
requires = "demeter-run.service";
51+
after = "demeter-run.service";
52+
};
53+
};
54+
}

modules/services/demeter-run.nix

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
{
2+
config,
3+
lib,
4+
pkgs,
5+
...
6+
}:
7+
let
8+
cfg = config.services.demeter-run;
9+
in
10+
{
11+
options.services.demeter-run = with lib; {
12+
enable = mkEnableOption "Demeter run tunnel";
13+
14+
package = mkOption {
15+
type = types.package;
16+
description = "The demeter-run-cli package.";
17+
default = pkgs.demeter-run-cli;
18+
};
19+
20+
user = mkOption {
21+
type = types.str;
22+
default = "demeter-run";
23+
description = "User account under which demeter-run is run";
24+
};
25+
26+
group = mkOption {
27+
type = types.str;
28+
default = "demeter-run";
29+
description = "Group account under which demeter-run is run";
30+
};
31+
32+
socket = mkOption {
33+
type = types.str;
34+
default = "${cfg.socketDir}/node.socket";
35+
};
36+
37+
socketDir = mkOption {
38+
type = types.str;
39+
default = "/run/demeter-run";
40+
};
41+
42+
instance = mkOption {
43+
type = types.str;
44+
};
45+
46+
configFile = mkOption {
47+
type = types.path;
48+
description = ''
49+
Config file for demeter setup (contain secrets, use agenix or sops)
50+
'';
51+
};
52+
};
53+
config = lib.mkIf cfg.enable {
54+
environment.systemPackages = [ pkgs.demeter-run-cli ];
55+
users.users.${cfg.user} = {
56+
inherit (cfg) group;
57+
isSystemUser = true;
58+
};
59+
60+
users.groups.${cfg.group} = { };
61+
systemd.tmpfiles.rules = [
62+
"d '${cfg.socketDir}' - ${cfg.user} ${cfg.group} - -"
63+
];
64+
65+
systemd.services.demeter-run = {
66+
enable = true;
67+
path = [ cfg.package ];
68+
wants = [
69+
"network-online.target"
70+
];
71+
72+
script = ''
73+
rm -f ${cfg.socket}
74+
${cfg.package}/bin/dmtrctl ports tunnel --socket ${cfg.socket} ${cfg.instance}
75+
'';
76+
77+
preStart = ''
78+
${pkgs.coreutils}/bin/install -m 0700 -g ${cfg.group} -o ${cfg.user} ${cfg.configFile} ${cfg.socketDir}/config.toml
79+
'';
80+
81+
# Prevent secret leaking
82+
postStop = ''
83+
rm ${cfg.socketDir}/config.toml
84+
'';
85+
86+
wantedBy = [ "multi-user.target" ];
87+
serviceConfig = {
88+
Restart = "always";
89+
RestartSec = 10;
90+
Group = cfg.group;
91+
User = cfg.user;
92+
Environment = [
93+
"DMTR_ROOT_DIR=${cfg.socketDir}"
94+
];
95+
UMask = "006";
96+
};
97+
};
98+
};
99+
}

packages/default.nix

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
imports = [
44
./cardano.nix
5+
./demeter-run-cli.nix
56
./ogmios.nix
67
./kupo.nix
78
./oura.nix
@@ -11,6 +12,7 @@
1112
inherit ((config.perSystem final.system).packages)
1213
cardano-cli
1314
cardano-node
15+
demeter-run-cli
1416
ogmios
1517
kupo
1618
oura

packages/demeter-run-cli.nix

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{ inputs, ... }:
2+
{
3+
perSystem =
4+
{ pkgs, ... }:
5+
{
6+
packages =
7+
let
8+
craneLib = inputs.crane.mkLib pkgs;
9+
commonArgs = {
10+
pname = "demeter-run-cli";
11+
version = "0-unstable-git-${inputs.demeter-run-cli.shortRev}";
12+
strictDeps = true;
13+
src = inputs.demeter-run-cli.outPath;
14+
};
15+
demeter-run-cli = craneLib.buildPackage (
16+
commonArgs
17+
// {
18+
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
19+
}
20+
);
21+
in
22+
{
23+
inherit demeter-run-cli;
24+
};
25+
};
26+
}

0 commit comments

Comments
 (0)