diff --git a/lib/maintainers.nix b/lib/maintainers.nix index cbf7e02d3f4..5fccdcb4ae3 100644 --- a/lib/maintainers.nix +++ b/lib/maintainers.nix @@ -251,6 +251,7 @@ olcai = "Erik Timan "; orbitz = "Malcolm Matalka "; osener = "Ozan Sener "; + otwieracz = "Slawomir Gonet "; oxij = "Jan Malakhovski "; page = "Carles Pagès "; paholg = "Paho Lurie-Gregg "; diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 3dd60ad99dc..d317333f963 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -114,6 +114,7 @@ ./services/backup/rsnapshot.nix ./services/backup/sitecopy-backup.nix ./services/backup/tarsnap.nix + ./services/backup/znapzend.nix ./services/cluster/fleet.nix ./services/cluster/kubernetes.nix ./services/cluster/panamax.nix diff --git a/nixos/modules/services/backup/znapzend.nix b/nixos/modules/services/backup/znapzend.nix new file mode 100644 index 00000000000..648089f90b7 --- /dev/null +++ b/nixos/modules/services/backup/znapzend.nix @@ -0,0 +1,36 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.znapzend; +in +{ + options = { + services.znapzend = { + enable = mkEnableOption "ZnapZend daemon"; + }; + }; + + config = mkIf cfg.enable { + environment.systemPackages = [ pkgs.znapzend ]; + + systemd.services = { + "znapzend" = { + description = "ZnapZend - ZFS Backup System"; + after = [ "zfs.target" ]; + + path = with pkgs; [ znapzend zfs mbuffer openssh ]; + + script = '' + znapzend + ''; + + reload = '' + /bin/kill -HUP $MAINPID + ''; + }; + }; + + }; +} diff --git a/pkgs/tools/backup/znapzend/default.nix b/pkgs/tools/backup/znapzend/default.nix new file mode 100644 index 00000000000..1534a0bab0a --- /dev/null +++ b/pkgs/tools/backup/znapzend/default.nix @@ -0,0 +1,72 @@ +{ stdenv, fetchFromGitHub, zfs, mbuffer, perl, perlPackages, wget, autoconf, automake }: + +let + version = "0.15.3"; + checksum = "1xk0lgb23kv1cl0wc2rav75hjrjigd0cp3hjw9gxab835vsvnkq0"; +in +stdenv.mkDerivation rec { + name = "znapzend-${version}"; + + src = fetchFromGitHub{ + owner = "oetiker"; + repo = "znapzend"; + rev = "v${version}"; + sha256 = checksum; + }; + + buildInputs = [ perl perlPackages.TestHarness perlPackages.Mojolicious + perlPackages.TAPParserSourceHandlerpgTAP perlPackages.MojoIOLoopForkCall + perlPackages.IOPipely wget ]; + + nativeBuildInputs = [ autoconf automake ]; + + preConfigure = '' + sed -i 's/^SUBDIRS =.*$/SUBDIRS = lib/' Makefile.am + + grep -v thirdparty/Makefile configure.ac > configure.ac.tmp + mv configure.ac.tmp configure.ac + + autoconf + ''; + + preBuild = '' + aclocal + automake + ''; + + postInstall = '' + substituteInPlace $out/bin/znapzend --replace "${perl}/bin/perl" \ + "${perl}/bin/perl \ + -I${perlPackages.TestHarness}/${perl.libPrefix} \ + -I${perlPackages.Mojolicious}/${perl.libPrefix} \ + -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \ + -I${perlPackages.MojoIOLoopForkCall}/${perl.libPrefix} \ + -I${perlPackages.IOPipely}/${perl.libPrefix} \ + " + substituteInPlace $out/bin/znapzendzetup --replace "${perl}/bin/perl" \ + "${perl}/bin/perl \ + -I${perlPackages.TestHarness}/${perl.libPrefix} \ + -I${perlPackages.Mojolicious}/${perl.libPrefix} \ + -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \ + -I${perlPackages.MojoIOLoopForkCall}/${perl.libPrefix} \ + -I${perlPackages.IOPipely}/${perl.libPrefix} \ + " + substituteInPlace $out/bin/znapzendztatz --replace "${perl}/bin/perl" \ + "${perl}/bin/perl \ + -I${perlPackages.TestHarness}/${perl.libPrefix} \ + -I${perlPackages.Mojolicious}/${perl.libPrefix} \ + -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \ + -I${perlPackages.MojoIOLoopForkCall}/${perl.libPrefix} \ + -I${perlPackages.IOPipely}/${perl.libPrefix} \ + " + ''; + + + meta = with stdenv.lib; { + description = "High performance open source ZFS backup with mbuffer and ssh support"; + homepage = http://www.znapzend.org; + license = licenses.gpl3; + maintainers = with maintainers; [ otwieracz ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 665e4144527..e5716d5dc01 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3274,6 +3274,8 @@ in talkfilters = callPackage ../misc/talkfilters {}; + znapzend = callPackage ../tools/backup/znapzend { }; + tarsnap = callPackage ../tools/backup/tarsnap { }; tcpcrypt = callPackage ../tools/security/tcpcrypt { }; diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index 83a70775843..e3cdfd49ce4 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -7792,17 +7792,43 @@ let self = _self // overrides; _self = with self; { description = "Embed a Perl interpreter in the Apache HTTP server"; }; }; - - Mojolicious = buildPerlPackage { - name = "Mojolicious-4.63"; + Mojolicious = buildPerlPackage rec { + name = "Mojolicious-6.56"; src = fetchurl { - url = mirror://cpan/authors/id/S/SR/SRI/Mojolicious-4.63.tar.gz; - sha256 = "f20f77e86fc560dac1c958e765ed64242dcf6343939ed605b45f2bbe2596d5e9"; + url = "mirror://cpan/authors/id/S/SR/SRI/${name}.tar.gz"; + sha256 = "82f73553836ac378edf825fd9f24be982653be9e0d78f8ba38b7841aabdafb02"; + }; + propagatedBuildInputs = [ JSONPP ]; + meta = { + homepage = http://mojolicious.org; + description = "Real-time web framework"; + license = with stdenv.lib.licenses; [ artistic2 ]; + }; + }; + + MojoIOLoopForkCall = buildPerlModule rec { + name = "Mojo-IOLoop-ForkCall-0.17"; + src = fetchurl { + url = "mirror://cpan/authors/id/J/JB/JBERGER/${name}.tar.gz"; + sha256 = "886de5c3b44194a86228471075fac4036073bda19093e776c702aa65c3ef1824"; + }; + propagatedBuildInputs = [ IOPipely Mojolicious ]; + meta = { + description = "Run blocking functions asynchronously by forking"; + license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ]; + }; + }; + + IOPipely = buildPerlPackage rec { + name = "IO-Pipely-0.005"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RC/RCAPUTO/${name}.tar.gz"; + sha256 = "e33b6cf5cb2b46ee308513f51e623987a50a89901e81bf19701dce35179f2e74"; }; meta = { - homepage = http://mojolicio.us; - description = "Real-time web framework"; - license = stdenv.lib.licenses.artistic2; + homepage = http://search.cpan.org/dist/IO-Pipely/; + description = "Portably create pipe() or pipe-like handles"; + license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ]; }; };