Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adding store-backup #892

Merged
merged 1 commit into from
Aug 31, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions pkgs/tools/backup/store-backup/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
{stdenv, which, coreutils, perl, fetchurl, perlPackages, makeWrapper, diffutils , writeScriptBin, bzip2}:

# quick usage:
# storeBackup.pl --sourceDir /home/user --backupDir /tmp/my_backup_destination
# Its slow the first time because it compresses all files bigger than 1k (default setting)
# The backup tool is bookkeeping which files got compressed

# btrfs warning: you may run out of hardlinks soon

# known impurity: test cases seem to bu using /tmp/storeBackup.lock ..

let dummyMount = writeScriptBin "mount" "#!/bin/sh";
in

stdenv.mkDerivation {

name = "store-backup-3.4";

enableParallelBuilding = true;

buildInputs = [ perl makeWrapper ];

src = fetchurl {
url = http://download.savannah.gnu.org/releases/storebackup/storeBackup-3.4.tar.bz2;
sha256 = "101k3nhyfjj8y8hg0v0xqxsr4vlcfkmlczgbihvlv722fb7n5gi3";
};

installPhase = ''
ensureDir $out/scripts
mv * $out
mv $out/_ATTENTION_ $out/doc
mv $out/{correct.sh,cron-storebackup} $out/scripts
find $out -name "*.pl" | xargs sed -i \
-e 's@/bin/pwd@${coreutils}/bin/pwd@' \
-e 's@/bin/sync@${coreutils}/bin/sync@' \
-e '1 s@/usr/bin/env perl@${perl}/bin/perl@'
for p in $out/bin/*
do wrapProgram "$p" \
--prefix PERL5LIB ":" "${perlPackages.DBFile}/lib/perl5/site_perl" \
--prefix PATH ":" "${which}/bin:${bzip2}/bin"
done
patchShebangs $out
# do a dummy test ensuring this works
PATH=$PATH:${dummyMount}/bin
{ # simple sanity test, test backup/restore of simple store paths
mkdir backup
backupRestore(){
source="$2"
echo =========
echo RUNNING TEST "$1" source: "$source"
mkdir restored
$out/bin/storeBackup.pl --sourceDir "$source" --backupDir backup
latestBackup=backup/default/$(ls -1 backup/default | sort | tail -n 1)
$out/bin/storeBackupRecover.pl -b "$latestBackup" -t restored -r /
${diffutils}/bin/diff -r "$source" restored
# storeBackupCheckSource should return 0
$out/bin/storeBackupCheckSource.pl -s "$source" -b "$latestBackup"
# storeBackupCheckSource should return not 0 when using different source
! $out/bin/storeBackupCheckSource.pl -s $TMP -b "$latestBackup"
# storeBackupCheckBackup should return 0
$out/bin/storeBackupCheckBackup.pl -c "$latestBackup"
chmod -R +w restored
rm -fr restored
}
testDir=$TMP/testDir
mkdir $testDir
echo X > $testDir/X
ln -s ./X $testDir/Y
backupRestore 'test 1: backup, restore' $testDir
# test huge blocks, according to docs files bigger than 100MB get split
# into pieces
dd if=/dev/urandom bs=100M of=block-1 count=1
dd if=/dev/urandom bs=100M of=block-2 count=1
cat block-1 block-2 > $testDir/block
backupRestore 'test 1 with huge block' $testDir
cat block-2 block-1 > $testDir/block
backupRestore 'test 1 with huge block reversed' $testDir
backupRestore 'test 2: backup, restore' $out
backupRestore 'test 3: backup, restore' $out
backupRestore 'test 4: backup diffutils to same backup locations, restore' ${diffutils}
}
'';

meta = {
description = "Storebackup is a backup suite that stores files on other disks";
homepage = http://savannah.nongnu.org/projects/storebackup;
license = stdenv.lib.licenses.gpl3Plus;
maintainers = [stdenv.lib.maintainers.marcweber];
platforms = stdenv.lib.platforms.linux;
};
}
2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1744,6 +1744,8 @@ let

ssss = callPackage ../tools/security/ssss { };

storeBackup = callPackage ../tools/backup/store-backup { };

stun = callPackage ../tools/networking/stun { };

stunnel = callPackage ../tools/networking/stunnel { };
Expand Down