Skip to content

Commit 739a637

Browse files
committed
fix: use bind mount - Failed at step STATE_DIRECTORY
1 parent 809ce62 commit 739a637

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

hosts/idols-aquamarine/monitoring/module/default.nix

+1-4
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ with lib; let
88
cfg = config.services.my-victoriametrics;
99
settingsFormat = pkgs.formats.yaml {};
1010

11-
workingDir = "/var/lib/" + cfg.stateDir;
1211
startCLIList =
1312
[
1413
"${cfg.package}/bin/victoria-metrics"
15-
"-storageDataPath=${workingDir}"
14+
"-storageDataPath=/var/lib/${cfg.stateDir}"
1615
"-httpListenAddr=${cfg.listenAddress}"
1716
"-retentionPeriod=${cfg.retentionPeriod}"
1817
]
@@ -133,12 +132,10 @@ in {
133132

134133
DynamicUser = true;
135134
User = "victoriametrics";
136-
Group = "victoriametrics";
137135
RestartSec = 1;
138136
Restart = "on-failure";
139137
RuntimeDirectory = "victoriametrics";
140138
RuntimeDirectoryMode = "0700";
141-
WorkingDirectory = workingDir;
142139
StateDirectory = cfg.stateDir;
143140
StateDirectoryMode = "0700";
144141

hosts/idols-aquamarine/monitoring/victoriametrics.nix

+12-2
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,23 @@
33
myvars,
44
...
55
}: {
6+
# Since victoriametrics use DynamicUser, the user & group do not exists before the service starts.
7+
# this group is used as a supplementary Unix group for the service to access our data dir(/data/apps/xxx)
8+
users.groups.victoriametrics-data = {};
9+
610
# Workaround for victoriametrics to store data in another place
711
# https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html#Type
812
systemd.tmpfiles.rules = [
9-
"D /data/apps/victoriametrics 0751 victoriametrics victoriametrics - -"
10-
"L+ /var/lib/victoriametrics - - - - /data/apps/victoriametrics"
13+
"D /data/apps/victoriametrics 0770 root victoriametrics-data - -"
1114
];
1215

16+
# Symlinks do not work with DynamicUser, so we should use bind mount here.
17+
# https://github.com/systemd/systemd/issues/25097#issuecomment-1929074961
18+
systemd.services.victoriametrics.serviceConfig = {
19+
SupplementaryGroups = ["victoriametrics-data"];
20+
BindPaths = ["/data/apps/victoriametrics:/var/lib/victoriametrics:rbind"];
21+
};
22+
1323
# https://victoriametrics.io/docs/victoriametrics/latest/configuration/configuration/
1424
services.my-victoriametrics = {
1525
enable = true;

0 commit comments

Comments
 (0)