From b2c2944998b3d237c900bbcd95734363d4203cb8 Mon Sep 17 00:00:00 2001 From: Christopher Singley Date: Sun, 29 Oct 2017 19:37:56 -0500 Subject: nzbget.service override nzbget.conf broken paths with current derivation --- nixos/modules/services/misc/nzbget.nix | 47 +++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/nixos/modules/services/misc/nzbget.nix b/nixos/modules/services/misc/nzbget.nix index b39511624c8..a186d57ceba 100644 --- a/nixos/modules/services/misc/nzbget.nix +++ b/nixos/modules/services/misc/nzbget.nix @@ -4,9 +4,7 @@ with lib; let cfg = config.services.nzbget; - nzbget = pkgs.nzbget; -in -{ + nzbget = pkgs.nzbget; in { options = { services.nzbget = { enable = mkEnableOption "NZBGet"; @@ -42,21 +40,41 @@ in p7zip ]; preStart = '' - test -d /var/lib/nzbget || { - echo "Creating nzbget state directoy in /var/lib/" - mkdir -p /var/lib/nzbget + datadir=/var/lib/nzbget + cfgtemplate=${cfg.package}/share/nzbget/nzbget.conf + test -d $datadir || { + echo "Creating nzbget data directory in $datadir" + mkdir -p $datadir } - test -f /var/lib/nzbget/nzbget.conf || { - echo "nzbget.conf not found. Copying default config to /var/lib/nzbget/nzbget.conf" - cp ${cfg.package}/share/nzbget/nzbget.conf /var/lib/nzbget/nzbget.conf - echo "Setting file mode of nzbget.conf to 0700 (needs to be written and contains plaintext credentials)" - chmod 0700 /var/lib/nzbget/nzbget.conf + test -f $configfile || { + echo "nzbget.conf not found. Copying default config $cfgtemplate to $configfile" + cp $cfgtemplate $configfile + echo "Setting $configfile permissions to 0700 (needs to be written and contains plaintext credentials)" + chmod 0700 $configfile echo "Setting temporary \$MAINDIR variable in default config required in order to allow nzbget to complete initial start" echo "Remember to change this to a proper value once NZBGet startup has been completed" - sed -i -e 's/MainDir=.*/MainDir=\/tmp/g' /var/lib/nzbget/nzbget.conf + sed -i -e 's/MainDir=.*/MainDir=\/tmp/g' $configfile } - echo "Ensuring proper ownership of /var/lib/nzbget (${cfg.user}:${cfg.group})." - chown -R ${cfg.user}:${cfg.group} /var/lib/nzbget + echo "Ensuring proper ownership of $datadir (${cfg.user}:${cfg.group})." + chown -R ${cfg.user}:${cfg.group} $datadir + ''; + + script = '' + configfile=/var/lib/nzbget/nzbget.conf + args="--daemon --configfile $configfile" + # The script in preStart (above) copies nzbget's config template to datadir on first run, containing paths that point to the nzbget derivation installed at the time. + # These paths break when nzbget is upgraded & the original derivation is garbage collected. If such broken paths are found in the config file, override them to point to + # the currently installed nzbget derivation. + cfgfallback () { + local hit=`grep -Po "(?<=^$1=).*+" "$configfile" | sed 's/[ \t]*$//'` # Strip trailing whitespace + ( test $hit && test -e $hit ) || { + echo "In $configfile, valid $1 not found; falling back to $1=$2" + args+=" -o $1=$2" + } + } + cfgfallback ConfigTemplate ${cfg.package}/share/nzbget/nzbget.conf + cfgfallback WebDir ${cfg.package}/share/nzbget/webui + ${cfg.package}/bin/nzbget $args ''; serviceConfig = { @@ -64,7 +82,6 @@ in User = cfg.user; Group = cfg.group; PermissionsStartOnly = "true"; - ExecStart = "${cfg.package}/bin/nzbget --daemon --configfile /var/lib/nzbget/nzbget.conf"; Restart = "on-failure"; }; }; -- cgit 1.4.1