diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-01-11 16:39:20 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-01-11 16:39:20 +0000 |
| commit | af12eb7baa949bc40155c837741bfd597fd0764e (patch) | |
| tree | f631896caab4184ac2cbb14b13d836a26ff7736e | |
| parent | 1b401d98048a88c9068fb916d363a4e4bb4e3db5 (diff) | |
fix(nix): use systemd tmpfiles for data directory creation
The preStart script was trying to chown directories but running as an
unprivileged user, causing permission errors. Instead, use systemd
tmpfiles.rules which run as root during system activation.
This ensures data directories are created with correct ownership before
the service starts.
| -rw-r--r-- | nix/module.nix | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/nix/module.nix b/nix/module.nix index 53a4d77..a175639 100644 --- a/nix/module.nix +++ b/nix/module.nix | |||
| @@ -282,13 +282,7 @@ let | |||
| 282 | SystemCallErrorNumber = "EPERM"; | 282 | SystemCallErrorNumber = "EPERM"; |
| 283 | }; | 283 | }; |
| 284 | 284 | ||
| 285 | # Ensure data directories exist before starting | 285 | # Directory creation handled by systemd tmpfiles (see config section below) |
| 286 | preStart = '' | ||
| 287 | mkdir -p ${cfg.dataDir}/git | ||
| 288 | mkdir -p ${cfg.dataDir}/relay | ||
| 289 | chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir} | ||
| 290 | chmod 750 ${cfg.dataDir} | ||
| 291 | ''; | ||
| 292 | }; | 286 | }; |
| 293 | 287 | ||
| 294 | enabledInstances = | 288 | enabledInstances = |
| @@ -340,5 +334,13 @@ in { | |||
| 340 | systemd.services = mapAttrs' | 334 | systemd.services = mapAttrs' |
| 341 | (name: cfg: nameValuePair "ngit-grasp-${name}" (mkService name cfg)) | 335 | (name: cfg: nameValuePair "ngit-grasp-${name}" (mkService name cfg)) |
| 342 | enabledInstances; | 336 | enabledInstances; |
| 337 | |||
| 338 | # Create data directories with proper ownership using tmpfiles | ||
| 339 | # This runs as root before the service starts | ||
| 340 | systemd.tmpfiles.rules = flatten (mapAttrsToList (name: cfg: [ | ||
| 341 | "d ${cfg.dataDir} 0750 ${cfg.user} ${cfg.group} -" | ||
| 342 | "d ${cfg.dataDir}/git 0750 ${cfg.user} ${cfg.group} -" | ||
| 343 | "d ${cfg.dataDir}/relay 0750 ${cfg.user} ${cfg.group} -" | ||
| 344 | ]) enabledInstances); | ||
| 343 | }; | 345 | }; |
| 344 | } | 346 | } |