aboutsummaryrefslogtreecommitdiff
path: root/system/flexbackup
diff options
context:
space:
mode:
Diffstat (limited to 'system/flexbackup')
-rw-r--r--system/flexbackup/README13
-rw-r--r--system/flexbackup/flexbackup-debian.patch290
-rw-r--r--system/flexbackup/flexbackup.SlackBuild6
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