borgmatic: init at 1.5.12

This commit is contained in:
imlonghao 2021-02-17 12:49:52 +08:00
parent 7b9c208260
commit c026da4056
4 changed files with 110 additions and 0 deletions

View file

@ -243,6 +243,7 @@
./services/backup/automysqlbackup.nix
./services/backup/bacula.nix
./services/backup/borgbackup.nix
./services/backup/borgmatic.nix
./services/backup/duplicati.nix
./services/backup/duplicity.nix
./services/backup/mysql-backup.nix

View file

@ -0,0 +1,57 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.borgmatic;
cfgfile = pkgs.writeText "config.yaml" (builtins.toJSON cfg.settings);
in {
options.services.borgmatic = {
enable = mkEnableOption "borgmatic";
settings = mkOption {
description = ''
See https://torsion.org/borgmatic/docs/reference/configuration/
'';
type = types.submodule {
freeformType = with lib.types; attrsOf anything;
options.location = {
source_directories = mkOption {
type = types.listOf types.str;
description = ''
List of source directories to backup (required). Globs and
tildes are expanded.
'';
example = [ "/home" "/etc" "/var/log/syslog*" ];
};
repositories = mkOption {
type = types.listOf types.str;
description = ''
Paths to local or remote repositories (required). Tildes are
expanded. Multiple repositories are backed up to in
sequence. Borg placeholders can be used. See the output of
"borg help placeholders" for details. See ssh_command for
SSH options like identity file or port. If systemd service
is used, then add local repository paths in the systemd
service file to the ReadWritePaths list.
'';
example = [
"user@backupserver:sourcehostname.borg"
"user@backupserver:{fqdn}"
];
};
};
};
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.borgmatic ];
environment.etc."borgmatic/config.yaml".source = cfgfile;
systemd.packages = [ pkgs.borgmatic ];
};
}

View file

@ -0,0 +1,50 @@
{ borgbackup, coreutils, lib, python3Packages, systemd }:
python3Packages.buildPythonApplication rec {
pname = "borgmatic";
version = "1.5.12";
src = python3Packages.fetchPypi {
inherit pname version;
sha256 = "sha256-XLbBJvNRmH8W9SnOjF7zUbazRYFCMW6SEO2wKN/2VTY=";
};
checkInputs = with python3Packages; [ flexmock pytestCheckHook pytest-cov ];
# - test_borgmatic_version_matches_news_version
# The file NEWS not available on the pypi source, and this test is useless
# - test_collect_configuration_run_summary_logs_outputs_merged_json_results
# Upstream fixed in the next version, see
# https://github.com/witten/borgmatic/commit/ea6cd53067435365a96786b006aec391714501c4
disabledTests = [
"test_borgmatic_version_matches_news_version"
"test_collect_configuration_run_summary_logs_outputs_merged_json_results"
];
propagatedBuildInputs = with python3Packages; [
borgbackup
colorama
pykwalify
ruamel_yaml
requests
setuptools
];
postInstall = ''
mkdir -p $out/lib/systemd/system
cp sample/systemd/borgmatic.timer $out/lib/systemd/system/
substitute sample/systemd/borgmatic.service \
$out/lib/systemd/system/borgmatic.service \
--replace /root/.local/bin/borgmatic $out/bin/borgmatic \
--replace systemd-inhibit ${systemd}/bin/systemd-inhibit \
--replace sleep ${coreutils}/bin/sleep
'';
meta = with lib; {
description = "Simple, configuration-driven backup software for servers and workstations";
homepage = "https://torsion.org/borgmatic/";
license = licenses.gpl3Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ imlonghao ];
};
}

View file

@ -1703,6 +1703,8 @@ in
borgbackup = callPackage ../tools/backup/borg { };
borgmatic = callPackage ../tools/backup/borgmatic { };
boringtun = callPackage ../tools/networking/boringtun { };
# Upstream recommends qt5.12 and it doesn't build with qt5.15