diff options
Diffstat (limited to 'system/flexbackup')
-rw-r--r-- | system/flexbackup/README | 13 | ||||
-rw-r--r-- | system/flexbackup/flexbackup-debian.patch | 290 | ||||
-rw-r--r-- | system/flexbackup/flexbackup.SlackBuild | 6 |
3 files changed, 299 insertions, 10 deletions
diff --git a/system/flexbackup/README b/system/flexbackup/README index 437915b26e972..b6b738dee398c 100644 --- a/system/flexbackup/README +++ b/system/flexbackup/README @@ -1,16 +1,11 @@ Flexbackup is for you if you have a single or small number of -machines, amanda is "too much", and tarring things up by hand isn't -nearly enough. +machines, Amanda is "too much", and tarring things up by hand +isn't nearly enough. -Features: +FEATURES: o Easy to configure o Uses dump, afio, GNU tar, cpio, star, pax, or zip archivers o Full and numbered levels of incremental backup (acts like "dump") o Compression and buffering options for all backup types - o Does remote filesystems (over rsh/ssh; no special service) - o Package delta mode can backup files not owned by rpm, or owned+changed files. - o Writes to tapes, on-disk archive files, or on-disk directory trees - o Keeps a table of contents so you know what archives are on each tape - o Nice log files + o Does remote filesystems over SSH -After installing, read the README for information on how to use. diff --git a/system/flexbackup/flexbackup-debian.patch b/system/flexbackup/flexbackup-debian.patch new file mode 100644 index 0000000000000..4e205efb566d3 --- /dev/null +++ b/system/flexbackup/flexbackup-debian.patch @@ -0,0 +1,290 @@ +--- flexbackup 2003-10-11 03:12:09.000000000 +1300 ++++ ../flexbackup-debian 2022-03-06 14:08:05.918918275 +1300 +@@ -269,6 +269,7 @@ + untie(%::index); + } + ++system ('rm', '-rf', $cfg::tmpdir); + exit(0); + + ###################################################################### +@@ -687,6 +688,8 @@ + $filename .= ".zip"; + } elsif ($cfg::compress eq "compress") { + $filename .= ".Z"; ++ } elsif ($cfg::compress eq "lzma") { ++ $filename .= ".lzma"; + } + } elsif ($cfg::type eq "afio") { + # tag these a little different, the archive file itself isn't a +@@ -701,6 +704,8 @@ + $filename .= "-zip"; + } elsif ($cfg::compress eq "compress") { + $filename .= "-Z"; ++ } elsif ($cfg::compress eq "lzma") { ++ $filename .= "-lzma"; + } + } + +@@ -811,6 +816,11 @@ + ($remove, @cmds) = &backup_filelist($label, $localdir, $title, $level, $remote); + } + ++ if(defined($remote)) { ++ # create our temporary directory as first remote command ++ unshift(@cmds, &maybe_remote_cmd("$::path{mkdir} -p $cfg::tmpdir", $remote)); ++ } ++ + # Nuke any tmp files used in the above routines + if ($remove ne '') { + push(@cmds, &maybe_remote_cmd("$::path{rm} -f $remove", $remote)); +@@ -827,6 +837,11 @@ + push(@cmds, &maybe_remote_cmd("$::path{rm} -f $pkglist", $remote)); + } + } ++ ++ if(defined($remote)) { ++ # remove temporary directory as our last remote command ++ push(@cmds, &maybe_remote_cmd("$::path{rm} -rf $cfg::tmpdir", $remote)); ++ } + + # Strip multiple spaces + foreach my $cmd (@cmds) { +@@ -1035,7 +1050,7 @@ + } else { + $prunekey = $dir; + } +- if (defined(%{$::prune{$prunekey}})) { ++ if ($::prune{$prunekey}) { + &log("| NOTE: \$prune is ignored for type=dump"); + } + +@@ -1057,7 +1072,7 @@ + } + + $cmd = ''; +- $cmd .= "dump -$level "; ++ $cmd .= "$::path{dump} -$level "; + $cmd .= "$::dump_blk_flag "; + if ($cfg::dump_use_dumpdates eq "true") { + $cmd .= "-u "; +@@ -1117,7 +1132,7 @@ + if (($cfg::compress !~ /^(false|hardware)$/) and ($cfg::afio_nocompress_types ne "")) { + $cmd = "$::path{printf} \"$cfg::afio_nocompress_types\" > $tmpnocompress"; + push(@cmds, &maybe_remote_cmd($cmd, $remote)); +- $no_compress = "-E $tmpnocompress"; ++ $no_compress = "-E +$tmpnocompress"; + $remove .= " $tmpnocompress"; + } + +@@ -1140,7 +1155,7 @@ + $cmd .= "$::path{afio} -o "; + $cmd .= "$no_compress "; + $cmd .= "-z "; +- $cmd .= "-1 m "; ++ $cmd .= "-1 mc "; + $cmd .= "$::afio_z_flag "; + $cmd .= "$::afio_verb_flag "; + $cmd .= "$::afio_sparse_flag "; +@@ -1390,11 +1405,11 @@ + $cmd .= "| "; + + $cmd .= "$::path{tar} --create "; ++ $cmd .= "--no-recursion "; + $cmd .= "--null "; + $cmd .= "--files-from=- "; + $cmd .= "--ignore-failed-read "; + $cmd .= "--same-permissions "; +- $cmd .= "--no-recursion "; + $cmd .= "--totals "; + if ($cfg::label ne 'false') { + if (length($title) > $::tar_max_label) { +@@ -2670,7 +2685,7 @@ + } + + # Flag old config file +- if (defined(@cfg::filesystems) or defined($cfg::mt_var_blksize)) { ++ if (@cfg::filesystems or defined($cfg::mt_var_blksize)) { + # so strict shuts up + my $junk = @cfg::filesystems; + $junk = $cfg::mt_var_blksize; +@@ -2700,7 +2715,7 @@ + # First check if things are defined in the config file + # Checks exist, true/false, or one of options + &checkvar(\$cfg::type,'type','dump afio cpio tar star pax zip ar shar lha copy rsync filelist','tar'); +- &checkvar(\$cfg::compress,'compress','gzip bzip2 lzop compress zip false hardware','gzip'); ++ &checkvar(\$cfg::compress,'compress','gzip bzip2 lzop compress zip false hardware lzma','gzip'); + &checkvar(\$cfg::compr_level,'compr_level','exist','4'); + &checkvar(\$cfg::verbose,'verbose','bool','true'); + &checkvar(\$cfg::sparse,'sparse','bool','true'); +@@ -2750,8 +2765,9 @@ + $::path{'find'} = &checkinpath('find'); + $::path{'dd'} = &checkinpath('dd'); + $::path{'printf'} = &checkinpath('printf'); ++ $::path{'mkdir'} = &checkinpath('mkdir'); + +- push(@::remoteprogs,($::path{'touch'},$::path{'rm'},$::path{'find'},$::path{'printf'})); ++ push(@::remoteprogs,($::path{'touch'},$::path{'rm'},$::path{'find'},$::path{'printf'},$::path{'mkdir'})); + + # Check device (or dir) + $::ftape = 0; +@@ -2890,11 +2906,11 @@ + # Traverse mountpoints? + &checkvar(\$cfg::traverse_fs,'traverse_fs','false local all','false'); + if ($cfg::traverse_fs eq "local") { +- $::mountpoint_flag = "! -fstype nfs ! -fstype smbfs ! -fstype bind ! -fstype proc ! -fstype devpts ! -fstype devfs ! -fstype tmpfs"; ++ $::late_mountpoint_flag = "! -fstype nfs ! -fstype smbfs ! -fstype bind ! -fstype proc ! -fstype devpts ! -fstype devfs ! -fstype tmpfs"; + } elsif ($cfg::traverse_fs eq "all") { +- $::mountpoint_flag = "! -fstype proc ! -fstype devpts ! -fstype devfs ! -fstype tmpfs"; ++ $::late_mountpoint_flag = "! -fstype proc ! -fstype devpts ! -fstype devfs ! -fstype tmpfs"; + } else { +- $::mountpoint_flag = "-xdev"; ++ $::early_mountpoint_flag = "-xdev"; + } + + # Block size +@@ -3001,6 +3017,16 @@ + $::z = " | $::path{zip} -$cfg::compr_level - -"; + $::unz = "$::path{funzip} | "; + } ++ } elsif ($cfg::compress eq "lzma") { ++ $::path{'lzma'} = &checkinpath($cfg::compress); ++ push(@::remoteprogs, $::path{$cfg::compress}); ++ if ($cfg::compr_level !~ m/^[123456789]$/) { ++ push(@::errors,"\$compr_level must be set to 1-9"); ++ } else { ++ $::z = " | $::path{$cfg::compress} -$cfg::compr_level "; ++ } ++ $::unz = "$::path{$cfg::compress} -d | "; ++ + } else { + $::z = ""; + $::unz = ""; +@@ -3224,7 +3250,7 @@ + &checkvar(\$cfg::afio_echo_block,'afio_echo_block','bool','false'); + &checkvar(\$cfg::afio_compress_cache_size,'afio_compress_cache_size','exist','2'); + &checkvar(\$cfg::afio_compress_threshold,'afio_compress_threshold','exist','3'); +- &checkvar(\$cfg::afio_nocompress_types,'afio_nocompress_types','exist','mp3 MP3 Z z gz gif zip ZIP lha jpeg jpg JPG taz tgz deb rpm bz2 lzo'); ++ &checkvar(\$cfg::afio_nocompress_types,'afio_nocompress_types','exist','.lzo'); + + $::path{'afio'} = &checkinpath('afio'); + push(@::remoteprogs, $::path{'afio'}); +@@ -3252,6 +3278,10 @@ + $::afio_z_flag = "-P $::path{$cfg::compress} -Q -c -Z"; + $::afio_unz_flag = "-P $::path{$cfg::compress} -Q -d -Q -c -Z"; + ++ } elsif ($cfg::compress eq "lzma") { ++ $::afio_z_flag = "-P $::path{$cfg::compress} -Q -$cfg::compr_level -Z"; ++ $::afio_unz_flag = "-P $::path{$cfg::compress} -Q -d -Z"; ++ + } + $::unz = ""; # Reset & just use this for reading the archive file. + +@@ -3415,7 +3445,7 @@ + $::path{'lha'} = &checkinpath('lha'); + push(@::remoteprogs, $::path{'lha'}); + +- if ($cfg::compress =~ /^(gzip|bzip2|lzop|compress|zip)$/) { ++ if ($cfg::compress =~ /^(gzip|bzip2|lzop|compress|zip|lzma)$/) { + warn("Using type \"lha\" with compress=$cfg::compress makes no sense"); + warn("Setting compression to false"); + $::unz = ""; +@@ -3442,6 +3472,15 @@ + push(@::errors,"\$tmpdir $cfg::tmpdir is not writable"); + } + ++ $cfg::hostname = `hostname`; ++ chomp($cfg::hostname); ++ ++ # Use a subdirectory of the user-specified directory as our tmpdir ++ # Also note that we make it closer to globally unique as we sometimes ++ # use this variable for remote systems, so PID isn't enough ++ $cfg::tmpdir = $cfg::tmpdir .'/flexbackup.'.$$.'.'.$cfg::hostname; ++ mkdir ($cfg::tmpdir) || die "Can't create temporary directory, $!"; ++ + # Levels + if (defined($::opt{'level'}) and + (defined($::opt{'incremental'}) or +@@ -3781,7 +3820,7 @@ + + # Try and guess file types and commpression scheme + # might as well since we are reading from a file in this case +- if ($file =~ m/\.(dump|cpio|tar|star|pax|a|shar|filelist)\.(gz|bz2|lzo|Z|zip)$/) { ++ if ($file =~ m/\.(dump|cpio|tar|star|pax|a|shar|filelist)\.(gz|bz2|lzo|Z|zip|lzma)$/) { + $cfg::type = $1; + $cfg::compress = $2; + $cfg::type =~ s/^a$/ar/; +@@ -3789,16 +3828,18 @@ + $cfg::compress =~ s/bz2/bzip2/; + $cfg::compress =~ s/lzo/lzop/; + $cfg::compress =~ s/Z/compress/; ++ $cfg::compress =~ s/lzma/lzma/; + &log("| Auto-set to type=$cfg::type compress=$cfg::compress"); + &optioncheck(); # redo to set a few variables over + +- } elsif ($file =~ m/\.afio-(gz|bz2|lzo|Z|zip)$/) { ++ } elsif ($file =~ m/\.afio-(gz|bz2|lzo|Z|zip|lzma)$/) { + $cfg::type = "afio"; + $cfg::compress = $1; + $cfg::compress =~ s/gz/gzip/; + $cfg::compress =~ s/bz2/bzip2/; + $cfg::compress =~ s/lzo/lzop/; + $cfg::compress =~ s/Z/compress/; ++ $cfg::compress =~ s/lzma/lzma/; + &log("| Auto-set to type=$cfg::type compress=$cfg::compress"); + &optioncheck(); # redo to set a few variables over + +@@ -4842,7 +4883,11 @@ + $prunekey = $dir; + } + +- if (defined(%{$::prune{$prunekey}})) { ++ if (defined($::early_mountpoint_flag)) { ++ $cmd .= "$::early_mountpoint_flag "; ++ } ++ ++ if ($::prune{$prunekey}) { + # FreeBSD needs -E (above) and no backslashes around the (|) chars + if ($::uname =~ /FreeBSD/) { + $cmd .= '-regex "\./('; +@@ -4861,7 +4906,9 @@ + $cmd .= "-depth "; + } + +- $cmd .= "$::mountpoint_flag "; ++ if (defined($::late_mountpoint_flag)) { ++ $cmd .= "$::late_mountpoint_flag "; ++ } + $cmd .= "! -type s "; + + if (defined($otherarg)) { +@@ -5236,8 +5283,8 @@ + # Create a script which tests the buffer program + open(SCR,"> $tmp_script") || die; + print SCR "#!/bin/sh\n"; +- print SCR "tmp_data=/tmp/bufftest\$\$.txt\n"; +- print SCR "tmp_err=/tmp/bufftest\$\$.err\n"; ++ print SCR "tmp_data=$cfg::tmpdir/buftest.$host.$$.txt\n"; ++ print SCR "tmp_err=$cfg::tmpdir/buftest.$host.$$.err\n"; + print SCR "echo testme > \$tmp_data\n"; + print SCR "$buffer_cmd > /dev/null 2> \$tmp_err < \$tmp_data\n"; + print SCR "res=\$?\n"; +@@ -5255,7 +5302,8 @@ + $pipecmd = "sh $tmp_script "; + } else { + print $::msg "| Checking '$cfg::buffer' on host $host... "; +- $pipecmd = "cat $tmp_script | ($::remoteshell $host 'cat > $tmp_script; sh $tmp_script; rm -f $tmp_script')"; ++ $pipecmd = "cat $tmp_script | ($::remoteshell $host 'mkdir -p $cfg::tmpdir; ++ cat - > $tmp_script; sh $tmp_script; rm -rf $cfg::tmpdir')"; + } + + if (!defined($::debug)) { +@@ -5287,6 +5335,8 @@ + close (PIPE); + + } else { ++ print $::msg "\n(debug) 'buffer' test script:\n($tmp_script)\n\n" ++ . `cat $tmp_script`; + print $::msg "\n(debug) $pipecmd\n"; + } + diff --git a/system/flexbackup/flexbackup.SlackBuild b/system/flexbackup/flexbackup.SlackBuild index a3c9aa568b6e6..9ef081cac6b65 100644 --- a/system/flexbackup/flexbackup.SlackBuild +++ b/system/flexbackup/flexbackup.SlackBuild @@ -1,7 +1,7 @@ #!/bin/bash # Slackware build script for flexbackup # -# Copyright 2013 klaatu at member.fsf.org +# Copyright 2013-22 klaatu at member.fsf.org # # GNU All-Permissive License # Copying and distribution of this file, with or without modification, @@ -51,6 +51,10 @@ find -L . \ #sed -i "s%/share/man%/man%" $TMP/$PRGNAM-$VERSION/Makefile #make install +# patch to account for ancient version of tar +# https://packages.debian.org/bullseye/all/flexbackup/download +patch -p0 < $CWD/flexbackup-debian.patch + # mkdir $PKG/etc $PKG/usr/bin/ $PKG/usr/man/man{1,5} install -m 0644 flexbackup.conf -D $PKG/etc/flexbackup.conf.new install -m 0755 flexbackup -D $PKG/usr/bin/flexbackup |