mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-13 21:50:33 +03:00
nixos/borgbackup: install job wrappers to systemPackages for easy borg access
Currently to run borg job manually, you have to use systemctl: ``` $ systemctl start borgbackup-job-jobname.service ``` This commit makes wrappers around borg jobs available in $PATH, which have BORG_REPO and connection args set correctly: ``` $ borg-job-jobname list $ borg-job-jobname mount ::jobname-archive-2019-12-25T00:01:29 /mnt/some-path $ borg-job-jobname create ::test /some/path ``` Closes: https://github.com/NixOS/nixpkgs/pull/64888 Co-authored-by: Danylo Hlynskyi <abcz2.uprola@gmail.com>
This commit is contained in:
parent
aa1a41b60b
commit
470c8a2a36
1 changed files with 24 additions and 3 deletions
|
@ -68,7 +68,7 @@ let
|
||||||
{ BORG_PASSPHRASE = passphrase; }
|
{ BORG_PASSPHRASE = passphrase; }
|
||||||
else { };
|
else { };
|
||||||
|
|
||||||
mkBackupService = name: cfg:
|
mkBackupService = name: cfg:
|
||||||
let
|
let
|
||||||
userHome = config.users.users.${cfg.user}.home;
|
userHome = config.users.users.${cfg.user}.home;
|
||||||
in nameValuePair "borgbackup-job-${name}" {
|
in nameValuePair "borgbackup-job-${name}" {
|
||||||
|
@ -98,6 +98,23 @@ let
|
||||||
inherit (cfg) startAt;
|
inherit (cfg) startAt;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# utility function around makeWrapper
|
||||||
|
mkWrapperDrv = {
|
||||||
|
original, name, set ? {}
|
||||||
|
}:
|
||||||
|
pkgs.runCommandNoCC "${name}-wrapper" {
|
||||||
|
buildInputs = [ pkgs.makeWrapper ];
|
||||||
|
} (with lib; ''
|
||||||
|
makeWrapper "${original}" "$out/bin/${name}" \
|
||||||
|
${concatStringsSep " \\\n " (mapAttrsToList (name: value: ''--set ${name} "${value}"'') set)}
|
||||||
|
'');
|
||||||
|
|
||||||
|
mkBorgWrapper = name: cfg: mkWrapperDrv {
|
||||||
|
original = "${pkgs.borgbackup}/bin/borg";
|
||||||
|
name = "borg-job-${name}";
|
||||||
|
set = { BORG_REPO = cfg.repo; } // (mkPassEnv cfg) // cfg.environment;
|
||||||
|
};
|
||||||
|
|
||||||
# Paths listed in ReadWritePaths must exist before service is started
|
# Paths listed in ReadWritePaths must exist before service is started
|
||||||
mkActivationScript = name: cfg:
|
mkActivationScript = name: cfg:
|
||||||
let
|
let
|
||||||
|
@ -176,7 +193,11 @@ in {
|
||||||
###### interface
|
###### interface
|
||||||
|
|
||||||
options.services.borgbackup.jobs = mkOption {
|
options.services.borgbackup.jobs = mkOption {
|
||||||
description = "Deduplicating backups using BorgBackup.";
|
description = ''
|
||||||
|
Deduplicating backups using BorgBackup.
|
||||||
|
Adding a job will cause a borg-job-NAME wrapper to be added
|
||||||
|
to your system path, so that you can perform maintenance easily.
|
||||||
|
'';
|
||||||
default = { };
|
default = { };
|
||||||
example = literalExample ''
|
example = literalExample ''
|
||||||
{
|
{
|
||||||
|
@ -623,6 +644,6 @@ in {
|
||||||
|
|
||||||
users = mkMerge (mapAttrsToList mkUsersConfig repos);
|
users = mkMerge (mapAttrsToList mkUsersConfig repos);
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [ borgbackup ];
|
environment.systemPackages = with pkgs; [ borgbackup ] ++ (mapAttrsToList mkBorgWrapper jobs);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue