]> git.sesse.net Git - backup.sh/commitdiff
Support changing compressors (e.g. to get zstd or xz).
authorSteinar H. Gunderson <sesse@samfundet.no>
Sun, 9 Dec 2018 21:24:09 +0000 (22:24 +0100)
committerSteinar H. Gunderson <sesse@samfundet.no>
Sun, 9 Dec 2018 21:24:09 +0000 (22:24 +0100)
backup.sh
conf/backup.config.example

index dfe8d45564859a4cc317814404d78e8cd44c00a3..e64312f529f68b3021a2751c2c75ef186092f85a 100755 (executable)
--- a/backup.sh
+++ b/backup.sh
@@ -117,6 +117,13 @@ backup()
        # a GPG command line.
        storageprogram=$( findconf storageprogram $computer $sfilesystem )
 
+       # Find compressor and decompressor for this filesystem.
+       fscompressor=$( findconf compressor $computer $filesystem )
+       if [ -z "$fscompressor" ]; then
+               fscompressor=$compressor
+       fi
+       decompressor=$( findconf decompressor $computer $filesystem )
+
        # We try to run tar on the remote computer
        #    c create archive
        #    C change to directory first
@@ -128,8 +135,8 @@ backup()
        #    Pipe the stuff over ssh to ourselves, run pee to cat the contents to a
        #    file and build a file list, respectivly.  
        TARFILE=$DATE.tmp
-       TARCMD="ssh -n $username@$computer \"$nice tar --one-file-system --use-compress-program $compressor -cf - -C $filesystem . $lastcmd \
-               --exclude-from=$remotehome/.backup/exclude\" | pee \"$storageprogram > $TARFILE\" \"tar tzvf -\""
+       TARCMD="ssh -n $username@$computer \"$nice tar --one-file-system --use-compress-program $fscompressor -cf - -C $filesystem . $lastcmd \
+               --exclude-from=$remotehome/.backup/exclude\" | pee \"$storageprogram > $TARFILE\" \"$decompressor | tar tvf -\""
        infomsg "Running $TARCMD"
        eval $TARCMD > $DATE.idx
 
@@ -236,12 +243,15 @@ if [ -z "$remotehome" ]; then
        diemsg "Could not expand ~ for user $username"
 fi
 
-# Check if pigz is available
-if ssh -n $username@$computer "pigz -V 2>/dev/null"; then
-       compressor=pigz
-else
-       infomsg "pigz missing; falling back to gzip."
-       compressor=gzip
+# Check if pigz is available. Note that this may be overridden per-filesystem later.
+compressor=$( findconf compressor $computer )
+if [ -z "$compressor" ]; then
+       if ssh -n $username@$computer "pigz -V 2>/dev/null"; then
+               compressor=pigz
+       else
+               infomsg "pigz missing; falling back to gzip."
+               compressor=gzip
+       fi
 fi
 
 # Check if nice and ionice are available
index 254092d13f202cb79a4a3cf0f738ecba5d86f58b..0324ae7135a83894e16ff1f345f356e8db772948 100644 (file)
        # Otherwise, assume root privileges.
        nonpriv =
 
+       # If set, use the given program to compress and decompress the backup
+       # (compressor must exist on the host to be backed up, and decompressor
+       # must exist on the backup host). compressor can be unset; if so,
+       # either pigz or gzip (autodetected) will be used. You can give flags
+       # (e.g. -9) if you wish.
+       #
+       # Not used for nonpriv (change output-encrypted-backup instead).
+       # The file will be called .tgz no matter what the compressor is.
+       compressor =
+       decompressor = gzip -d
+
 # Config for a given host
 [pannekake.samfundet.no]
        maxnumfull = 2