98
98
else "" ;
99
99
data-dir =
100
100
if cfg . args . data-dir != null
101
- then "--data-dir=${ cfg . args . data-dir } "
102
- else "--data-dir=%S/${ serviceName } " ;
101
+ then cfg . args . data-dir
102
+ else "%S/${ serviceName } " ;
103
+ data-dir-arg = "--data-dir=${ data-dir } " ;
103
104
104
105
scriptArgs = let
105
106
# filter out certain args which need to be treated differently
@@ -116,6 +117,10 @@ in {
116
117
"--metrics-port"
117
118
"--payload-builder-enable"
118
119
"--payload-builder-url"
120
+ "--keymanager-enable"
121
+ "--keymanager-token-file"
122
+ "--keymanager-address"
123
+ "--keymanager-port"
119
124
"--trusted-node-url" # only needed for checkpoint sync
120
125
] ;
121
126
isNormalArg = name : ( findFirst ( arg : hasPrefix arg name ) null specialArgs ) == null ;
@@ -137,10 +142,16 @@ in {
137
142
++ ( optionals cfg . args . payload-builder . enable [
138
143
"--payload-builder"
139
144
"--payload-builder-url=${ cfg . args . payload-builder . url } "
145
+ ] )
146
+ ++ ( optionals cfg . args . keymanager . enable [
147
+ "--keymanager"
148
+ "--keymanager-address=${ cfg . args . keymanager . address } "
149
+ "--keymanager-port=${ toString cfg . args . keymanager . port } "
150
+ "--keymanager-token-file=${ data-dir } /${ cfg . args . keymanager . token-file } "
140
151
] ) ;
141
152
in ''
142
153
${ jwt-secret } \
143
- ${ data-dir } \
154
+ ${ data-dir-arg } \
144
155
${ concatStringsSep " \\ \n " filteredArgs } \
145
156
${ lib . escapeShellArgs cfg . extraArgs }
146
157
'' ;
154
165
filteredArgs = builtins . filter isCheckpointArg args ;
155
166
in ''
156
167
--backfill=false \
157
- ${ data-dir } \
168
+ ${ data-dir-arg } \
158
169
${ concatStringsSep " \\ \n " filteredArgs }
159
170
'' ;
160
171
in
@@ -164,16 +175,21 @@ in {
164
175
description = "Nimbus Beacon Node (${ beaconName } )" ;
165
176
166
177
serviceConfig = mkMerge [
167
- baseServiceConfig
168
178
{
179
+ MemoryDenyWriteExecute = false ;
169
180
User =
170
181
if cfg . args . user != null
171
182
then cfg . args . user
172
183
else user ;
173
184
StateDirectory = user ;
174
- ExecStartPre = "${ cfg . package } /bin/nimbus_beacon_node trustedNodeSync ${ checkpointSyncArgs } " ;
185
+ ExecStartPre = lib . mkBefore [
186
+ '' ${ pkgs . coreutils-full } /bin/cp --no-preserve=all --update=none \
187
+ /proc/sys/kernel/random/uuid ${ data-dir } /${ cfg . args . keymanager . token-file } ''
188
+ "${ cfg . package } /bin/nimbus_beacon_node trustedNodeSync ${ checkpointSyncArgs } "
189
+ ] ;
175
190
ExecStart = "${ cfg . package } /bin/nimbus_beacon_node ${ scriptArgs } " ;
176
191
}
192
+ baseServiceConfig
177
193
( mkIf ( cfg . args . jwt-secret != null ) {
178
194
LoadCredential = [ "jwt-secret:${ cfg . args . jwt-secret } " ] ;
179
195
} )
0 commit comments