From 58d69519718d71f5794c87404bac4ee44b16a5cd Mon Sep 17 00:00:00 2001 From: Alex Whitt Date: Wed, 13 Feb 2019 11:38:33 -0500 Subject: nzbget: Fix script for copying default config file template (#51235) * nzbget: Fix configFile / dataDir checking in service script * nzbget: improve the description for the `configFile` option * nzbget: Add detail to the `configFile` option description * nzbget: Improve wording of `configFile` option * nzbget: Refactor dataDir management into systemd config * nzbget: Remove debug --- nixos/modules/services/misc/nzbget.nix | 40 ++++++++++++++++------------------ 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/nixos/modules/services/misc/nzbget.nix b/nixos/modules/services/misc/nzbget.nix index e24cecf2080..6ab98751c57 100644 --- a/nixos/modules/services/misc/nzbget.nix +++ b/nixos/modules/services/misc/nzbget.nix @@ -4,6 +4,7 @@ with lib; let cfg = config.services.nzbget; + dataDir = builtins.dirOf cfg.configFile; in { options = { services.nzbget = { @@ -41,6 +42,12 @@ in { default = "nzbget"; description = "Group under which NZBGet runs"; }; + + configFile = mkOption { + type = types.str; + default = "/var/lib/nzbget/nzbget.conf"; + description = "Path for NZBGet's config file. (If this doesn't exist, the default config template is copied here.)"; + }; }; }; @@ -54,36 +61,25 @@ in { p7zip ]; preStart = '' - datadir=${cfg.dataDir} - configfile=${cfg.dataDir}/nzbget.conf cfgtemplate=${cfg.package}/share/nzbget/nzbget.conf - test -d $datadir || { - echo "Creating nzbget data directory in $datadir" - mkdir -p $datadir - } - 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 + if [ ! -f ${cfg.configFile} ]; then + echo "${cfg.configFile} not found. Copying default config $cfgtemplate to ${cfg.configFile}" + install -m 0700 $cfgtemplate ${cfg.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' $configfile - } - echo "Ensuring proper ownership of $datadir (${cfg.user}:${cfg.group})." - chown -R ${cfg.user}:${cfg.group} $datadir + sed -i -e 's/MainDir=.*/MainDir=\/tmp/g' ${cfg.configFile} + fi ''; script = '' - configfile=${cfg.dataDir}/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 + args="--daemon --configfile ${cfg.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 + local hit=`grep -Po "(?<=^$1=).*+" "${cfg.configFile}" | sed 's/[ \t]*$//'` # Strip trailing whitespace ( test $hit && test -e $hit ) || { - echo "In $configfile, valid $1 not found; falling back to $1=$2" + echo "In ${cfg.configFile}, valid $1 not found; falling back to $1=$2" args+=" -o $1=$2" } } @@ -93,6 +89,8 @@ in { ''; serviceConfig = { + StateDirectory = dataDir; + StateDirectoryMode = "0700"; Type = "forking"; User = cfg.user; Group = cfg.group; -- cgit 1.4.1