From ae67327df3faaf106d2bcb352d4151774576bf00 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 29 Dec 2023 22:40:38 +0100 Subject: ... --- hosts/surtr/postgresql/default.nix | 8 +++++++- hosts/vidhar/pgbackrest/default.nix | 8 +++++++- modules/pgbackrest.nix | 41 ++++++++++++++++++++++++++++--------- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/hosts/surtr/postgresql/default.nix b/hosts/surtr/postgresql/default.nix index faf74588..f0e42ee8 100644 --- a/hosts/surtr/postgresql/default.nix +++ b/hosts/surtr/postgresql/default.nix @@ -1,6 +1,11 @@ { pkgs, sources, config, flake, flakeInputs, ... }: let versioning = sources.psql-versioning.src; + + nixpkgs-pgbackrest = import (flakeInputs.nixpkgs-pgbackrest.outPath + "/pkgs/top-level") { + overlays = [ flake.overlays.libdscp ]; + localSystem = config.nixpkgs.system; + }; in { config = { assertions = [ @@ -16,7 +21,8 @@ in { services.pgbackrest = { enable = true; - package = flakeInputs.nixpkgs-pgbackrest.legacyPackages.${config.nixpkgs.system}.pgbackrest; + package = nixpkgs-pgbackrest.pgbackrest; + dscpPackage = nixpkgs-pgbackrest.libdscp; settings = { "surtr" = { diff --git a/hosts/vidhar/pgbackrest/default.nix b/hosts/vidhar/pgbackrest/default.nix index fec0c1fb..ffb149f5 100644 --- a/hosts/vidhar/pgbackrest/default.nix +++ b/hosts/vidhar/pgbackrest/default.nix @@ -2,6 +2,11 @@ let surtrRepoCfg = flake.nixosConfigurations."surtr".config.services.pgbackrest.settings.surtr; + + nixpkgs-pgbackrest = import (flakeInputs.nixpkgs-pgbackrest.outPath + "/pkgs/top-level") { + overlays = [ flake.overlays.libdscp ]; + localSystem = config.nixpkgs.system; + }; in { config = { assertions = [ @@ -12,7 +17,8 @@ in { services.pgbackrest = { enable = true; - package = flakeInputs.nixpkgs-pgbackrest.legacyPackages.${config.nixpkgs.system}.pgbackrest; + package = nixpkgs-pgbackrest.pgbackrest; + dscpPackage = nixpkgs-pgbackrest.libdscp; tlsServer = { enable = true; diff --git a/modules/pgbackrest.nix b/modules/pgbackrest.nix index cc865bca..e02849f5 100644 --- a/modules/pgbackrest.nix +++ b/modules/pgbackrest.nix @@ -36,6 +36,10 @@ let } "="; }; + mkDSCPOption = options: mkOption { + type = types.numbers.between 0 63; + } // options; + loglevelType = types.enum ["off" "error" "warn" "info" "detail" "debug" "trace"]; inherit (utils.systemdUtils.unitOptions) unitOption; in { @@ -44,6 +48,10 @@ in { enable = mkEnableOption "pgBackRest"; package = mkPackageOption pkgs "pgbackrest" {}; + dscpPackage = mkPackageOption pkgs "libdscp" { nullable = true; default = null; }; + + dscp.archive-push = mkDSCPOption { default = 24; }; + dscp.backup = mkDSCPOption { default = 8; }; configurePostgresql = { enable = mkEnableOption "configuring PostgreSQL for sending WAL to pgBackRest" // { @@ -145,14 +153,32 @@ in { environment.systemPackages = [ cfg.package ]; services.postgresql.settings = mkIf cfg.configurePostgresql.enable { - archive_command = "pgbackrest --stanza ${escapeSystemdExecArg cfg.configurePostgresql.stanza} archive-push %p"; + archive_command = let + pgbackrest-dscp-wrapped = pkgs.writeShellApplication { + name = "pgbackrest-dscp"; + runtimeInputs = [ cfg.package ]; + text = '' + export LD_PRELOAD + LD_PRELOAD=''${LD_PRELOAD:+':'$LD_PRELOAD':'} + if [[ $LD_PRELOAD != *':'''${cfg.dscpPackage}/lib/libdscp.so''':'* ]]; then + LD_PRELOAD='${cfg.dscpPackage}/lib/libdscp.so'$LD_PRELOAD + fi + LD_PRELOAD=''${LD_PRELOAD#':'} + LD_PRELOAD=''${LD_PRELOAD%':'} + + : "''${DSCP:=${toString cfg.dscp.archive-push}}" + + exec -- pgbackrest "$@" + ''; + }; + pgbackrest = if cfg.dscpPackage != null then "${pgbackrest-dscp-wrapped}/bin/pgbackrest-dscp" else "${cfg.package}/bin/pgbackrest"; + in "${pgbackrest} --stanza ${escapeShellArg cfg.configurePostgresql.stanza} archive-push %p"; archive_mode = true; max_wal_senders = mkDefault 3; wal_level = "replica"; }; systemd.services = { - postgresql.path = mkIf cfg.configurePostgresql.enable [ cfg.package ]; pgbackrest-tls-server = mkIf cfg.tlsServer.enable { description = "pgBackRest TLS-Server"; wantedBy = [ "multi-user.target" ]; @@ -172,11 +198,6 @@ in { Group = cfg.tlsServer.group; ExecStart = "${cfg.package}/bin/pgbackrest server"; ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; - - Environment = [ - "LD_PRELOAD=${pkgs.libdscp}/lib/libdscp.so" - "DSCP=8" - ]; }; }; } // mapAttrs' (name: backupCfg: nameValuePair "pgbackrest-backup@${escapeSystemdPath name}" { @@ -189,9 +210,9 @@ in { Restart = "on-failure"; RestartSec = "5min"; - Environment = [ - "LD_PRELOAD=${pkgs.libdscp}/lib/libdscp.so" - "DSCP=8" + Environment = mkIf (cfg.dscpPackage != null) [ + "LD_PRELOAD=\"${cfg.dscpPackage}/lib/libdscp.so\"" + "DSCP=\"${toString cfg.dscp.backup}\"" ]; }; }) cfg.backups; -- cgit v1.2.3