Merge pull request #10988 from Shados/improve-rsnapshot-service

rsnapshot service: Avoid package rebuild, create+use /etc/rsnapshot.conf
This commit is contained in:
Joachim Fasting 2016-05-12 05:24:01 +02:00
commit 1aff127b56
2 changed files with 31 additions and 46 deletions

View File

@ -2,12 +2,30 @@
with lib; with lib;
let cfg = config.services.rsnapshot; let
cfg = config.services.rsnapshot;
cfgfile = pkgs.writeText "rsnapshot.conf" ''
config_version 1.2
cmd_cp ${pkgs.coreutils}/bin/cp
cmd_rsync ${pkgs.rsync}/bin/rsync
cmd_ssh ${pkgs.openssh}/bin/ssh
cmd_logger ${pkgs.inetutils}/bin/logger
cmd_du ${pkgs.coreutils}/bin/du
lockfile /run/rsnapshot.pid
${cfg.extraConfig}
'';
in in
{ {
options = { options = {
services.rsnapshot = { services.rsnapshot = {
enable = mkEnableOption "rsnapshot backups"; enable = mkEnableOption "rsnapshot backups";
enableManualRsnapshot = mkOption {
description = "Whether to enable manual usage of the rsnapshot command with this module.";
default = true;
example = false;
type = types.bool;
};
extraConfig = mkOption { extraConfig = mkOption {
default = ""; default = "";
@ -39,37 +57,17 @@ in
as retain options. as retain options.
''; '';
}; };
package = mkOption {
type = types.package;
default = pkgs.rsnapshot;
defaultText = "pkgs.rsnapshot";
example = literalExample "pkgs.rsnapshotGit";
description = ''
RSnapshot package to use.
'';
};
}; };
}; };
config = mkIf cfg.enable (let config = mkIf cfg.enable (mkMerge [
myRsnapshot = cfg.package.override { configFile = rsnapshotCfg; }; {
rsnapshotCfg = with pkgs; writeText "gen-rsnapshot.conf" (''
config_version 1.2
cmd_cp ${coreutils}/bin/cp
cmd_rsync ${rsync}/bin/rsync
cmd_ssh ${openssh}/bin/ssh
cmd_logger ${inetutils}/bin/logger
cmd_du ${coreutils}/bin/du
lockfile /run/rsnapshot.pid
${cfg.extraConfig}
'');
in {
environment.systemPackages = [ myRsnapshot ];
services.cron.systemCronJobs = services.cron.systemCronJobs =
mapAttrsToList (interval: time: "${time} root ${myRsnapshot}/bin/rsnapshot ${interval}") cfg.cronIntervals; mapAttrsToList (interval: time: "${time} root ${pkgs.rsnapshot}/bin/rsnapshot -c ${cfgfile} ${interval}") cfg.cronIntervals;
} }
); (mkIf cfg.enableManualRsnapshot {
environment.systemPackages = [ pkgs.rsnapshot ];
environment.etc."rsnapshot.conf".source = cfgfile;
})
]);
} }

View File

@ -1,20 +1,5 @@
{ fetchurl, stdenv, writeText, perl, openssh, rsync, logger, { fetchurl, stdenv, writeText, perl, openssh, rsync, logger }:
configFile ? "/etc/rsnapshot.conf" }:
let patch = writeText "rsnapshot-config.patch" ''
--- rsnapshot-program.pl 2013-10-05 20:31:08.715991442 +0200
+++ rsnapshot-program.pl 2013-10-05 20:31:42.496193633 +0200
@@ -383,7 +383,7 @@
}
# set global variable
- $config_file = $default_config_file;
+ $config_file = '${configFile}';
}
# accepts no args
'';
in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "rsnapshot-1.4.1"; name = "rsnapshot-1.4.1";
@ -25,10 +10,12 @@ stdenv.mkDerivation rec {
propagatedBuildInputs = [perl openssh rsync logger]; propagatedBuildInputs = [perl openssh rsync logger];
configureFlags = [ "--sysconfdir=/etc --prefix=/" ];
makeFlags = [ "DESTDIR=$(out)" ];
patchPhase = '' patchPhase = ''
substituteInPlace "Makefile.in" --replace \ substituteInPlace "Makefile.in" --replace \
"/usr/bin/pod2man" "${perl}/bin/pod2man" "/usr/bin/pod2man" "${perl}/bin/pod2man"
patch -p0 <${patch}
''; '';
meta = with stdenv.lib; { meta = with stdenv.lib; {