aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorB Stack <bgstack15@gmail.com>2017-05-21 10:35:04 -0400
committerB Stack <bgstack15@gmail.com>2017-05-21 10:35:04 -0400
commit85f44c99269124007a6b016c8af5358ca8b504e3 (patch)
tree34acce6e5fd9b2f4dabe1ca86b2b68814664e644
downloadrbup-85f44c99269124007a6b016c8af5358ca8b504e3.tar.gz
rbup-85f44c99269124007a6b016c8af5358ca8b504e3.tar.bz2
rbup-85f44c99269124007a6b016c8af5358ca8b504e3.zip
initial commit for rbup
-rw-r--r--README.md13
-rw-r--r--etc/rbup/rbup.conf24
-rw-r--r--etc/rbup/rbup.conf.2017-05-21.0138
l---------usr/bin/rbup1
-rw-r--r--usr/share/rbup/docs/README.txt22
-rw-r--r--usr/share/rbup/docs/files-for-versioning.txt3
-rw-r--r--usr/share/rbup/docs/rbup.spec44
-rwxr-xr-xusr/share/rbup/inc/get-files38
-rwxr-xr-xusr/share/rbup/inc/pack136
-rwxr-xr-xusr/share/rbup/rbup.sh218
-rwxr-xr-xusr/share/rbup/rbup.sh.2017-05-21.01247
11 files changed, 784 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..afd30fc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+### Overview
+rbup is a shell script for conducting regular backups. Originally its name meant rsync backup.
+
+### Building
+The recommended way to build an rpm is:
+
+ pushd ~/rpmbuild; mkdir -p SOURCES RPMS SPECS BUILD BUILDROOT; popd
+ mkdir -p ~/rpmbuild/SOURCES/rbup-0.0-1/
+ cd ~/rpmbuild/SOURCES/rbup-0.0-1/
+ git clone https://github.com/bgstack15/rbup
+ usr/share/rbup/inc/pack rpm
+
+The generated rpm will be in ~/rpmbuild/RPMS/noarch
diff --git a/etc/rbup/rbup.conf b/etc/rbup/rbup.conf
new file mode 100644
index 0000000..34d3615
--- /dev/null
+++ b/etc/rbup/rbup.conf
@@ -0,0 +1,24 @@
+# File: /etc/rbup/rbup.conf
+# Hierarchy of precedence, and the last defined option being used.
+# conffile (default is /etc/rbup/rbup.conf)
+# command line environment
+# flags given to rbup.sh
+RBUP_NOW="$( date "+%Y-%m-%dT%H%M%S" )"
+RBUP_SYNC_CMD=/bin/rsync
+RBUP_SYNC_OPTS="-rlptgODwhatever"
+RBUP_SYNC_OPT_VERBOSE="-v"
+RBUP_SYNC_OPT_APPLY="-n"
+RBUP_DEST_MOUNT_CMD="mount -v jonathan:/volume1/sword /mnt/jonathan/"
+RBUP_DEST_UMOUNT_CMD="umount -l /mnt/jonathan/"
+RBUP_DEST=/mnt/jonathan
+RBUP_LOG_DIR=/var/log/rbup
+
+RBUP_VERBOSE=yes # can be overridden by the -v/-q flag or by the job options
+
+# JOB SPECIFIC VALUES
+RBUP_JOB_NAME="mainbackup"
+RBUP_SOURCE=/var/storage1/shares
+RBUP_CHECKSUM_COUNT=1
+RBUP_CHECKSUM_1_FILE="/var/storage1/shares/public/Age Of Empires/Installing-AoFE-on-Linux 2016-01-29.odt"
+RBUP_CHECKSUM_1_SHA256SUM=407ad21ce6b6ddb9a7f6a907134155431306a6b0450fedc3981d65311ff91c06
+RBUP_LOG_FILE=${RBUP_LOG_DIR}/${RBUP_JOB_NAME}.${RBUP_NOW}.log
diff --git a/etc/rbup/rbup.conf.2017-05-21.01 b/etc/rbup/rbup.conf.2017-05-21.01
new file mode 100644
index 0000000..810d43b
--- /dev/null
+++ b/etc/rbup/rbup.conf.2017-05-21.01
@@ -0,0 +1,38 @@
+# File: /etc/rbup/rbup.conf
+# Hierarchy of precedence, and the last defined option being used.
+# /etc/rbup/rbup.conf [rbup:default]
+# /etc/rbup/rbup.conf [rbup:job]
+# file from flag -c /etc/other-file.conf
+# command line environment
+# other flags
+[rbup:default]
+RBUP_SYNC_CMD=/bin/rsync
+RBUP_SYNC_OPTS="-rlptgODwhatever"
+RBUP_SYNC_OPT_VERBOSE="-v"
+RBUP_SYNC_OPT_APPLY="-n"
+RBUP_DEST_MOUNT_CMD="mount -v jonathan:/volume1/sword /mnt/jonathan/"
+RBUP_DEST_UMOUNT_CMD="umount -l /mnt/jonathan/"
+RBUP_DEST=/mnt/jonathan
+RBUP_LOG_DIR=/var/log/rbup/
+RBUP_LOG_FILE=${RBUP_LOG_DIR}/${RBUP_JOB_NAME}.${NOW}.log
+
+RBUP_VERBOSE=yes # can be overridden by the -v/-q flag or by the job options
+
+[rbup:main]
+RBUP_JOB_NAME="mainbackup"
+RBUP_JOB_DESCRIPTION="Any extra notes can go here."
+RBUP_SOURCE=/var/storage1/shares
+#RBUP_JOB_DEST=${RBUP_DEST_DEFAULT}/backups/shares # in case you want to override it
+RBUP_CHECKSUM_COUNT=1
+RBUP_CHECKSUM_1_FILE="/var/storage1/shares/public/Age Of Empires/Installing-AoFE-on-Linux 2016-01-29.odt"
+RBUP_CHECKSUM_1_SHA256SUM=407ad21ce6b6ddb9a7f6a907134155431306a6b0450fedc3981d65311ff91c06
+
+[rbup:test]
+RBUP_JOB_NAME="testjob5"
+RBUP_JOB_DESCRIPTION="test job"
+RBUP_SOURCE=/var/storage1/shares/public
+#RBUP_JOB_DEST=${RBUP_DEST_DEFAULT}/backups/shares # in case you want to override it
+RBUP_CHECKSUM_COUNT=1
+RBUP_CHECKSUM_1_FILE="/var/storage1/shares/public/Age Of Empires/Installing-AoFE-on-Linux 2016-01-29.odt"
+RBUP_CHECKSUM_1_SHA256SUM=407ad21ce6b6ddb9a7f6a907134155431306a6b0450fedc3981d65311ff91c06
+RBUP_DEST=/mnt/foo
diff --git a/usr/bin/rbup b/usr/bin/rbup
new file mode 120000
index 0000000..a763635
--- /dev/null
+++ b/usr/bin/rbup
@@ -0,0 +1 @@
+../share/rbup/rbup.sh \ No newline at end of file
diff --git a/usr/share/rbup/docs/README.txt b/usr/share/rbup/docs/README.txt
new file mode 100644
index 0000000..456ce3a
--- /dev/null
+++ b/usr/share/rbup/docs/README.txt
@@ -0,0 +1,22 @@
+File: usr/share/rbup/docs/README.txt
+Package: rbup
+Author: bgstack15
+Startdate: 2017-05-21
+Title: Readme file for rbup
+Purpose: All packages should come with a readme
+Usage: Read it.
+Reference: README.txt
+Improve:
+Document: Below this line
+
+### WELCOME
+Please read /etc/rbup/rbup.conf to learn how to configure rbup.
+
+### NOTES
+
+### REFERENCE
+
+### CHANGELOG
+
+2017-05-21 B Stack <bgstack15@gmail.com> 0.0-1
+- Initial rpm release.
diff --git a/usr/share/rbup/docs/files-for-versioning.txt b/usr/share/rbup/docs/files-for-versioning.txt
new file mode 100644
index 0000000..306563d
--- /dev/null
+++ b/usr/share/rbup/docs/files-for-versioning.txt
@@ -0,0 +1,3 @@
+docs/README.txt
+docs/rbup.spec
+docs/debian-rbup/control
diff --git a/usr/share/rbup/docs/rbup.spec b/usr/share/rbup/docs/rbup.spec
new file mode 100644
index 0000000..f561baf
--- /dev/null
+++ b/usr/share/rbup/docs/rbup.spec
@@ -0,0 +1,44 @@
+# ref: http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html
+Summary: rbup for EL7
+Name: rbup
+Version: 0.0
+Release: 1
+License: CC BY-SA 4.0
+Group: Applications/System
+Source: rbup.tgz
+URL: https://bgstack15.wordpress.com/
+#Distribution:
+#Vendor:
+Packager: B Stack <bgstack15@gmail.com>
+Requires: bgscripts-core >= 1.2-10
+Buildarch: noarch
+
+%description
+rbup is a shell script for conducting regular backups. It provides features such as auto-mount and dismount of the destination location.
+
+%prep
+%setup
+
+%build
+
+%install
+rm -rf %{buildroot}
+rsync -a . %{buildroot}/ --exclude='**/.*.swp' --exclude='**/.git'
+
+%clean
+rm -rf %{buildroot}
+
+%preun
+exit 0
+
+%postun
+exit 0
+
+%post
+exit 0
+
+%files
+
+%changelog
+* Sun May 21 2017 B Stack <bgstack15@gmail.com> 0.0-1
+- Initial rpm release. See docs/README.txt.
diff --git a/usr/share/rbup/inc/get-files b/usr/share/rbup/inc/get-files
new file mode 100755
index 0000000..9c875c5
--- /dev/null
+++ b/usr/share/rbup/inc/get-files
@@ -0,0 +1,38 @@
+#!/bin/sh
+# File: get-files
+case "${1}" in
+ rpm)
+
+### for rpm
+find * -type d -regextype grep \
+ \( -regex 'usr\/share\/rbup.*' -o -regex 'etc\/rbup.*' \) \
+ | sed -e 's/^/%dir \//;'
+find * -mindepth 1 ! -name "${package}.spec.$$.swp" \
+ ! -type d -regextype grep \
+ ! -regex '.*.swp' \
+ ! -regex '.*DEBIAN.*' \
+ | sed -r -e '
+s/^/\//;
+s/(.*\.txt)/%doc %attr(444, -, -) \1/;
+s/(.*bin.*)/%verify(link) \1/;
+s/(.*)\.py$/\1\.py\n\1\.pyc\n\1\.pyo/;
+s/(.*\.conf)/%config %attr(666, -, -) \1/;
+s/(\/usr)?\/lib\/systemd\/system\/(.*)/%{_unitdir}\/\2/;
+'
+
+ ;;
+ deb)
+
+### for deb
+find . -mindepth 1 ! -name "${package}.spec\.$$\.swp" \
+ ! -type d -regextype grep \
+ ! -regex '.*hg.*' ! -regex '.*?debian-binary.*' \
+ ! -regex '.*DEBIAN.*' ! -regex '.*\.swp' ! -regex '.*\.git.*' ! -name 'README.md' \
+ -printf '%P '
+
+ ;;
+ *)
+ echo "FATAL ERROR: check ./pack or get-files. Please use [ rpm | deb ] option. Aborted." 1>&2
+ exit 1
+ ;;
+esac
diff --git a/usr/share/rbup/inc/pack b/usr/share/rbup/inc/pack
new file mode 100755
index 0000000..4928237
--- /dev/null
+++ b/usr/share/rbup/inc/pack
@@ -0,0 +1,136 @@
+#!/bin/bash
+
+# DETERMINE LOCATION OF FRAMEWORK
+while read flocation; do if test -x ${flocation} && test "$( ${flocation} --fcheck )" -ge 20170111; then frameworkscript="${flocation}"; break; fi; done <<EOFLOCATIONS
+/usr/share/bgscripts/framework.sh
+../framework.sh
+usr/share/bgscripts/framework.sh
+~/rpmbuild/SOURCES/bgscripts-1.1-31/usr/share/bgscripts/framework.sh
+EOFLOCATIONS
+test -z "${frameworkscript}" && echo "$0: framework not found. Aborted." 1>&2 && exit 4
+
+. ${frameworkscript} || echo "$0: framework did not run properly. Continuing..." 1>&2
+
+type="";
+
+case "${thisflavor}" in
+ redhat|rhel|centos|fedora|korora) type=rpm;;
+ debian|ubuntu) type=dpkg;;
+ *) type=targz;;
+esac
+
+echo " $@ " | grep -qiE -- "help|usage|\s-h\s|\s-\?" 1>/dev/null 2>&1 && {
+ # display help and exit
+ less -F <<EOF
+pack utility version 2017-05-21a-rbup
+usage: pack [ rpm | deb | tar | scrub ] [ --debug | -d {0-10} ]
+Provides a single command for building a package. This script is customized to each package.
+optional arguments:
+ [ rpm | deb | tar | scrub ] Build that type of package. Scrub calls the scrub.py script.
+ The default depends on the local os flavor. This system is "${thisflavor}"
+ [ --debug {0-10} | -d {0-10} ] Display package type to build and exit. Debuglev not implemented here.
+EOF
+exit 1
+}
+
+# Derive package name and version number, for my simple package versions only.
+fullname="$( pwd | sed -e 's/.*\(SOURCES\|deb\)\///;s/\/.*//;' )"
+version="$( echo "${fullname}" | grep -oiE -- "-[0-9]{0,3}\.[0-9a-zA-Z]{0,5}-[0-9]{0,4}" | sed -e 's/^-//;' )"
+shortversion="$( echo "${version}" | sed -e 's/-.*//;' )"
+package="$( echo "${fullname}" | sed -e "s/-${version}//;" )"
+
+echo " $@ " | grep -qiE -- "rpm|rhel|redhat|centos|fedora|korora" 1>/dev/null 2>&1 && type=rpm
+echo " $@ " | grep -qiE -- "debian|ubuntu|deb\s|dpkg" 1>/dev/null 2>&1 && type=dpkg
+echo " $@ " | grep -qiE -- "tar|tgz|gz" 1>/dev/null 2>&1 && type=targz
+echo " $@ " | grep -qiE -- "scrub" 1>/dev/null 2>&1 && type=scrub
+
+# Display information
+echo "packaging ${package}-${version} as ${type}"
+echo " $@ " | grep -qiE -- "debug|\s-d[ 0-9]{0,3}\s" 1>/dev/null 2>&1 && exit 0
+
+case "${type}" in
+ rpm)
+
+########## PACKAGING for rhel/centos
+# if you copy-paste this, be sure to define package, version, shortversion
+rpmbuilddir=~/rpmbuild/
+sub1="core"
+packagespecfile="${package}-${version}/usr/share/${package}/docs/${package}.spec"
+sed -n -e '1,/^\%files$/p;' "${rpmbuilddir}/SOURCES/${packagespecfile}" > "${rpmbuilddir}/SOURCES/${packagespecfile}.$$.swp" # removes files and changelog
+cd ${rpmbuilddir}/SOURCES/"${package}-${version}"
+"${rpmbuilddir}/SOURCES/${package}-${version}/usr/share/${package}/inc/get-files" rpm >> "${rpmbuilddir}/SOURCES/${packagespecfile}.$$.swp"
+{ printf "\n%%files ${sub1}\n" ; "${rpmbuilddir}/SOURCES/${package}-${version}/usr/share/${package}/inc/get-files-${sub1}" rpm ; } >> "${rpmbuilddir}/SOURCES/${packagespecfile}.$$.swp"
+{ printf '\n'; sed -n -e '/^\%changelog/,$p' "${rpmbuilddir}/SOURCES/${packagespecfile}"; } >> "${rpmbuilddir}/SOURCES/${packagespecfile}.$$.swp"
+mv -f "${rpmbuilddir}/SOURCES/${packagespecfile}.$$.swp" "${rpmbuilddir}/SOURCES/${packagespecfile}"
+rm -rf "${rpmbuilddir}/SOURCES/${package}-${shortversion}"; cp -prf "${rpmbuilddir}/SOURCES/${package}-${version}" "${rpmbuilddir}/SOURCES/${package}-${shortversion}"
+rm -rf "${rpmbuilddir}/SOURCES/${package}-${shortversion}/DEBIAN"
+cd "${rpmbuilddir}/SOURCES"
+rm -rf "${package}.tgz"; tar -zc --exclude='.git' --exclude='README.md' -f "${package}.tgz" "${package}-${shortversion}"
+cp -p "${rpmbuilddir}/SOURCES/${packagespecfile}" "${rpmbuilddir}/SPECS"
+mkdir -p "${rpmbuilddir}/RPMS/noarch"; cd "${rpmbuilddir}/RPMS/noarch"
+rpmbuild -bb "${rpmbuilddir}/SPECS/${package}.spec"
+rm -rf "${rpmbuilddir}/SOURCES/${package}-${shortversion}/" "${rpmbuilddir}/SOURCES/${package}.tgz"
+
+ ;;
+ dpkg)
+
+########## PACKAGING for ubuntu
+# You need package dpkg-dev to build packages.
+# if you copy-paste this, be sure to define package, version
+debdir=~/deb
+sub1="core"
+debiandirmain="${package}-${version}/usr/share/${package}/docs/debian-${package}"
+debiandirsub1="${package}-${version}/usr/share/${package}/docs/debian-${package}-${sub1}"
+cd "${debdir}/${package}-${version}"
+"${debdir}/${package}-${version}/usr/share/${package}/inc/get-files" deb | xargs md5sum > "${debdir}/${debiandirmain}/md5sums"
+"${debdir}/${package}-${version}/usr/share/${package}/inc/get-files-${sub1}" deb | xargs md5sum > "${debdir}/${debiandirsub1}/md5sums"
+#mkdir -p "${debdir}/$$"; mv "${debdir}/${package}-${version}/.git" "${debdir}/${package}-${version}/README.md" "${debdir}/$$/"
+cd "${debdir}"
+
+# sub1
+rm -rf "${debdir}/${package}-${version}/DEBIAN/" 2>/dev/null; mkdir -p "${debdir}/${package}-${version}/DEBIAN/"
+cp -pf "${debdir}/${debiandirsub1}"/* "${debdir}/${package}-${version}/DEBIAN/"
+mkdir "${debdir}/${package}" 2>/dev/null; rm -rf "${debdir}/${package}-${version}-work.tgz"
+tar -zc --exclude='.git' --exclude='README.md' -f "${debdir}/${package}-${version}-work.tgz" -C "${debdir}/${package}-${version}" $( awk '{print $2}' "${debdir}/${package}-${version}/DEBIAN/md5sums" ) DEBIAN
+tar -zx -C "${debdir}/${package}" -f "${debdir}/${package}-${version}-work.tgz"
+fakeroot dpkg-deb -b "${debdir}/${package}"
+mv -f "${debdir}/${package}.deb" "${debdir}/${package}-${sub1}-${version}.deb"
+rm -rf "${debdir}/${package}-${version}-work.tgz" "${debdir}/${package}"
+
+# main
+rm -rf "${debdir}/${package}-${version}/DEBIAN/" 2>/dev/null; mkdir -p "${debdir}/${package}-${version}/DEBIAN/"
+cp -pf "${debdir}/${debiandirmain}"/* "${debdir}/${package}-${version}/DEBIAN/"
+mkdir "${debdir}/${package}" 2>/dev/null; rm -rf "${debdir}/${package}-${version}-work.tgz"
+tar -zc --exclude='.git' --exclude='README.md' -f "${debdir}/${package}-${version}-work.tgz" -C "${debdir}/${package}-${version}" $( awk '{print $2}' "${debdir}/${package}-${version}/DEBIAN/md5sums" ) DEBIAN
+tar -zx -C "${debdir}/${package}" -f "${debdir}/${package}-${version}-work.tgz"
+fakeroot dpkg-deb -b "${debdir}/${package}"
+mv -f "${debdir}/${package}.deb" "${debdir}/${package}-${version}.deb"
+rm -rf "${debdir}/${package}-${version}-work.tgz" "${debdir}/${package}"
+
+#mv "${debdir}/$$/.git" "${debdir}/$$/"* "${debdir}/${package}-${version}/"; rmdir "${debdir}/$$"
+
+ ;;
+ targz)
+
+########## PACKAGING in a master.tgz
+# if you copy-paste this, be sure to define package, version
+cd ~/deb 2>/dev/null || cd ~/rpmbuild/SOURCES
+rm -rf ./"${package}-${version}".master.tgz
+tar -zcf "${package}-${version}".master.tgz "${package}-${version}"/
+
+ ;;
+ scrub)
+
+########## SCRUB for publication
+# if you copy-paste this, be sure to define package, version
+#cd ~/deb 2>/dev/null || cd ~/rpmbuild/SOURCES
+#cd "$( find . -name "*scrub.txt" | grep -iE "${package}-${version}\/" | xargs dirname )"
+#/usr/share/bgscripts/scrub.py
+echo "Gotta say unh. Feature not yet implemented: scrub. Aborted." 1>&2
+exit 1
+
+ ;;
+ unknown)
+ echo "error: check $0 for errors on type ${type}." 1>&2
+ ;;
+esac
diff --git a/usr/share/rbup/rbup.sh b/usr/share/rbup/rbup.sh
new file mode 100755
index 0000000..c5b9608
--- /dev/null
+++ b/usr/share/rbup/rbup.sh
@@ -0,0 +1,218 @@
+#!/bin/sh
+# Filename: rbup.sh
+# Location: /usr/share/rbup/
+# Author: bgstack15@gmail.com
+# Startdate: 2017-05-21 09:25:16
+# Title: Script that Performs Regular Backups
+# Purpose: Allows customizable jobs from an easy config file
+# Package: rbup
+# History:
+# 2016
+# Usage:
+# Reference: ftemplate.sh 2017-04-17a; framework.sh 2017-04-17a
+# /mnt/bgirton/Backups/bup_data.sh which itself was modified from darmok:/usr/local/bin/sync_smash.sh
+# dnskeepalive.sh from package bgscripts-core
+# Improve:
+fiversion="2017-04-29a"
+rbupversion="2017-05-21a"
+
+usage() {
+ less -F >&2 <<ENDUSAGE
+usage: rbup.sh [-duV] [-c <conffile>]
+version ${rbupversion}
+ -d debug Show debugging info, including parsed variables.
+ -u usage Show this usage block.
+ -V version Show script version number.
+ -c conffile Use this conf instead of default, which is /etc/rbup/rbup.conf
+Return values:
+0 Normal
+1 Help or version info displayed
+2 Count or type of flaglessvals is incorrect
+3 Incorrect OS type
+4 Unable to find dependency
+5 Not run as root or sudo
+6 Unable to mount destination
+7 Invalid checksum(s) on file(s)
+ENDUSAGE
+}
+
+# DEFINE FUNCTIONS
+get_conf() {
+ local _infile="$1"
+ local _tmpfile1="$( mktemp )"
+ grep -viE '^\s*((#).*)?$' "${_infile}" | while read _line;
+ do
+ local _left="$( echo "${_line}" | cut -d'=' -f1 )"
+ eval "_thisval=\"\${${_left}}\""
+ test -z "${_thisval}" && echo "${_line}" >> "${_tmpfile1}"
+ done
+ test -f "${_tmpfile1}" && . "${_tmpfile1}" 1>/dev/null 2>&1
+ /bin/rm -rf "${_tmpfile1}"
+}
+
+log() {
+ # WORKHERE: figure out how logging will work
+ echo "$@"
+}
+
+# DEFINE TRAPS
+
+clean_rbup() {
+ #use at end of entire script if you need to clean up tmpfiles
+ fistruthy "${RBUP_NO_CLEANUP}" || rm -rf "${tmpdir}" 1>/dev/null 2>&1
+ :
+}
+
+CTRLC() {
+ #trap "CTRLC" 2
+ [ ] #useful for controlling the ctrl+c keystroke
+ clean_rbup
+}
+
+CTRLZ() {
+ #trap "CTRLZ" 18
+ [ ] #useful for controlling the ctrl+z keystroke
+}
+
+parseFlag() {
+ flag="$1"
+ hasval=0
+ case ${flag} in
+ # INSERT FLAGS HERE
+ "d" | "debug" | "DEBUG" | "dd" ) setdebug; ferror "debug level ${debug}";;
+ "u" | "usage" | "help" | "h" ) usage; exit 1;;
+ "V" | "fcheck" | "version" ) ferror "${scriptfile} version ${rbupversion}"; exit 1;;
+ #"i" | "infile" | "inputfile" ) getval;infile1=${tempval};;
+ "c" | "conf" | "config" | "conffile" | "configfile" ) getval; conffile="${tempval}";;
+ esac
+
+ debuglev 10 && { test ${hasval} -eq 1 && ferror "flag: ${flag} = ${tempval}" || ferror "flag: ${flag}"; }
+}
+
+# DETERMINE LOCATION OF FRAMEWORK
+while read flocation; do if test -x ${flocation} && test "$( ${flocation} --fcheck )" -ge 20170111; then frameworkscript="${flocation}"; break; fi; done <<EOFLOCATIONS
+./framework.sh
+${scriptdir}/framework.sh
+~/bin/bgscripts/framework.sh
+~/bin/framework.sh
+~/bgscripts/framework.sh
+~/framework.sh
+/usr/local/bin/bgscripts/framework.sh
+/usr/local/bin/framework.sh
+/usr/bin/bgscripts/framework.sh
+/usr/bin/framework.sh
+/bin/bgscripts/framework.sh
+/usr/share/bgscripts/framework.sh
+EOFLOCATIONS
+test -z "${frameworkscript}" && echo "$0: framework not found. Aborted." 1>&2 && exit 4
+
+# INITIALIZE VARIABLES
+# variables set in framework:
+# today server thistty scriptdir scriptfile scripttrim
+# is_cronjob stdin_piped stdout_piped stderr_piped sendsh sendopts
+. ${frameworkscript} || echo "$0: framework did not run properly. Continuing..." 1>&2
+infile1=
+outfile1=
+logfile=${scriptdir}/${scripttrim}.${today}.out
+interestedparties="bgstack15@gmail.com"
+
+# REACT TO OPERATING SYSTEM TYPE
+case $( uname -s ) in
+ Linux) [ ];;
+ FreeBSD) [ ];;
+ *) echo "${scriptfile}: 3. Indeterminate OS: $( uname -s )" 1>&2 && exit 3;;
+esac
+
+## REACT TO ROOT STATUS
+#case ${is_root} in
+# 1) # proper root
+# [ ] ;;
+# sudo) # sudo to root
+# [ ] ;;
+# "") # not root at all
+# #ferror "${scriptfile}: 5. Please run as root or sudo. Aborted."
+# #exit 5
+# [ ]
+# ;;
+#esac
+
+# SET CUSTOM SCRIPT AND VALUES
+#setval 1 sendsh sendopts<<EOFSENDSH # if $1="1" then setvalout="critical-fail" on failure
+#/usr/share/bgscripts/send.sh -hs # setvalout maybe be "fail" otherwise
+#/usr/local/bin/send.sh -hs # on success, setvalout="valid-sendsh"
+#/usr/bin/mail -s
+#EOFSENDSH
+#test "${setvalout}" = "critical-fail" && ferror "${scriptfile}: 4. mailer not found. Aborted." && exit 4
+
+# VALIDATE PARAMETERS
+# objects before the dash are options, which get filled with the optvals
+# to debug flags, use option DEBUG. Variables set in framework: fallopts
+validateparams - "$@"
+
+# CONFIRM TOTAL NUMBER OF FLAGLESSVALS IS CORRECT
+#if test ${thiscount} -lt 2;
+#then
+# ferror "${scriptfile}: 2. Fewer than 2 flaglessvals. Aborted."
+# exit 2
+#fi
+
+# CONFIGURE VARIABLES AFTER PARAMETERS
+
+## START READ CONFIG FILE TEMPLATE
+get_conf /home/bgirton-local/rpmbuild/SOURCES/rbup-0.0-1/etc/rbup/rbup.conf
+#oIFS="${IFS}"; IFS="$( printf '\n' )"
+#infiledata=$( ${sed} ':loop;/^\/\*/{s/.//;:ccom;s,^.[^*]*,,;/^$/n;/^\*\//{s/..//;bloop;};bccom;}' "${infile1}") #the crazy sed removes c style multiline comments
+#IFS="${oIFS}"; infilelines=$( echo "${infiledata}" | wc -l )
+#{ echo "${infiledata}"; echo "ENDOFFILE"; } | {
+# while read line; do
+# # the crazy sed removes leading and trailing whitespace, blank lines, and comments
+# if test ! "${line}" = "ENDOFFILE";
+# then
+# line=$( echo "${line}" | sed -e 's/^\s*//;s/\s*$//;/^[#$]/d;s/\s*[^\]#.*$//;' )
+# if test -n "${line}";
+# then
+# debuglev 8 && ferror "line=\"${line}\""
+# if echo "${line}" | grep -qiE "\[.*\]";
+# then
+# # new zone
+# zone=$( echo "${line}" | tr -d '[]' )
+# debuglev 7 && ferror "zone=${zone}"
+# else
+# # directive
+# varname=$( echo "${line}" | awk -F= '{print $1}' )
+# varval=$( echo "${line}" | awk -F= '{$1=""; printf "%s", $0}' | sed 's/^ //;' )
+# debuglev 7 && ferror "${zone}${varname}=\"${varval}\""
+# # simple define variable
+# eval "${zone}${varname}=\${varval}"
+# fi
+# ## this part is untested
+# #read -p "Please type something here:" response < ${thistty}
+# #echo "${response}"
+# fi
+# else
+
+## REACT TO BEING A CRONJOB
+#if test ${is_cronjob} -eq 1;
+#then
+# [ ]
+#else
+# [ ]
+#fi
+
+# SET TRAPS
+trap "CTRLC" 2
+#trap "CTRLZ" 18
+trap "clean_rbup" 0
+
+# MAIN LOOP
+#{
+ [ ]
+ set | grep -iE "^RBUP_"
+#} | tee -a ${logfile}
+
+# EMAIL LOGFILE
+#${sendsh} ${sendopts} "${server} ${scriptfile} out" ${logfile} ${interestedparties}
+
+## STOP THE READ CONFIG FILE
+#exit 0
+#fi; done; }
diff --git a/usr/share/rbup/rbup.sh.2017-05-21.01 b/usr/share/rbup/rbup.sh.2017-05-21.01
new file mode 100755
index 0000000..631319a
--- /dev/null
+++ b/usr/share/rbup/rbup.sh.2017-05-21.01
@@ -0,0 +1,247 @@
+#!/bin/sh
+# Filename: rbup.sh
+# Location: /usr/share/rbup/
+# Author: bgstack15@gmail.com
+# Startdate: 2017-05-21 09:25:16
+# Title: Script that Performs Regular Backups
+# Purpose: Allows customizable jobs from an easy config file
+# Package: rbup
+# History:
+# 2016
+# Usage:
+# Reference: ftemplate.sh 2017-04-17a; framework.sh 2017-04-17a
+# /mnt/bgirton/Backups/bup_data.sh which itself was modified from darmok:/usr/local/bin/sync_smash.sh
+# dnskeepalive.sh from package bgscripts-core
+# Improve:
+fiversion="2017-04-29a"
+rbupversion="2017-05-21a"
+
+usage() {
+ less -F >&2 <<ENDUSAGE
+usage: rbup.sh [-duV] [-c <conffile>] [ -j <jobname>]
+version ${rbupversion}
+ -d debug Show debugging info, including parsed variables.
+ -u usage Show this usage block.
+ -V version Show script version number.
+ -i infile Overrides default infile value. Default is none.
+ -c conffile Use this conf instead of default, which is /etc/rbup/rbup.conf
+ -j jobname Run only this job. Can be repeated.
+Return values:
+0 Normal
+1 Help or version info displayed
+2 Count or type of flaglessvals is incorrect
+3 Incorrect OS type
+4 Unable to find dependency
+5 Not run as root or sudo
+6 Unable to mount destination
+7 Invalid checksum(s) on file(s)
+ENDUSAGE
+}
+
+# DEFINE FUNCTIONS
+get_conf() {
+ # call: get_conf /etc/rbup/rbup.conf [ job1 [ job2 ... ] ]
+ # copied in from dnskeepalive, but modified
+ local _infile="$1"
+ #local _tmpfile1="$( mktemp -p /tmp/rbup )"
+ shift; local _requestedzones="default $@"
+ local _zone=""
+ grep -viE '^\s*((#).*)?$' "${_infile}" | while read _line;
+ do
+ local _left="$( echo "${_line}" | cut -d'=' -f1 )"
+ # check if line is a zone [rbup:default]
+ if echo "${_left}" | grep -qiE '^\[rbup:.*\]';
+ then
+ _zone="$( echo "${_left}" | sed -r -e 's/^.*://;s/\]$//;' )"
+ echo "new zone ${_zone}"
+ else
+ eval "_thisval=\"\${${_left}}\""
+ if test -z "${_thisval}" && { test -z "$@" || echo "${_requestedzones}" | grep -qiE "${_zone}"; };
+ then
+ echo "${_line}" >> "/tmp/rbup/${_zone}.conf"
+ echo "${_line} added to /tmp/rbup/${_zone}.conf"
+ fi
+ fi
+ done
+ #test -f "${_tmpfile1}" && . "${_tmpfile1}" 1>/dev/null 2>&1
+ #/bin/rm -rf "${_tmpfile1}"
+}
+
+reset_vars() {
+ for word in $( set | grep -oIE "^RBUP_.+=" | sed -r -e 's/=$//;' ); do unset ${word}; done
+}
+
+log() {
+ # WORKHERE: figure out how logging will work
+ echo "$@"
+}
+
+# DEFINE TRAPS
+
+clean_rbup() {
+ #use at end of entire script if you need to clean up tmpfiles
+ test "${RBUP_CLEANUP}"="1" || rm -rf "${tmpdir}" 1>/dev/null 2>&1
+ :
+}
+
+CTRLC() {
+ #trap "CTRLC" 2
+ [ ] #useful for controlling the ctrl+c keystroke
+ clean_rbup
+}
+
+CTRLZ() {
+ #trap "CTRLZ" 18
+ [ ] #useful for controlling the ctrl+z keystroke
+}
+
+parseFlag() {
+ flag="$1"
+ hasval=0
+ case ${flag} in
+ # INSERT FLAGS HERE
+ "d" | "debug" | "DEBUG" | "dd" ) setdebug; ferror "debug level ${debug}";;
+ "u" | "usage" | "help" | "h" ) usage; exit 1;;
+ "V" | "fcheck" | "version" ) ferror "${scriptfile} version ${rbupversion}"; exit 1;;
+ #"i" | "infile" | "inputfile" ) getval;infile1=${tempval};;
+ esac
+
+ debuglev 10 && { test ${hasval} -eq 1 && ferror "flag: ${flag} = ${tempval}" || ferror "flag: ${flag}"; }
+}
+
+# DETERMINE LOCATION OF FRAMEWORK
+while read flocation; do if test -x ${flocation} && test "$( ${flocation} --fcheck )" -ge 20170111; then frameworkscript="${flocation}"; break; fi; done <<EOFLOCATIONS
+./framework.sh
+${scriptdir}/framework.sh
+~/bin/bgscripts/framework.sh
+~/bin/framework.sh
+~/bgscripts/framework.sh
+~/framework.sh
+/usr/local/bin/bgscripts/framework.sh
+/usr/local/bin/framework.sh
+/usr/bin/bgscripts/framework.sh
+/usr/bin/framework.sh
+/bin/bgscripts/framework.sh
+/usr/share/bgscripts/framework.sh
+EOFLOCATIONS
+test -z "${frameworkscript}" && echo "$0: framework not found. Aborted." 1>&2 && exit 4
+
+# INITIALIZE VARIABLES
+# variables set in framework:
+# today server thistty scriptdir scriptfile scripttrim
+# is_cronjob stdin_piped stdout_piped stderr_piped sendsh sendopts
+. ${frameworkscript} || echo "$0: framework did not run properly. Continuing..." 1>&2
+infile1=
+outfile1=
+logfile=${scriptdir}/${scripttrim}.${today}.out
+interestedparties="bgstack15@gmail.com"
+tmpdir=/tmp/rbup
+mkdir -p "${tmpdir}" 2>/dev/null || { ferror "${script}: 4. Unable to make ${tmpdir} temporary directory. Aborted."; exit 4; }
+
+# REACT TO OPERATING SYSTEM TYPE
+case $( uname -s ) in
+ Linux) [ ];;
+ FreeBSD) [ ];;
+ *) echo "${scriptfile}: 3. Indeterminate OS: $( uname -s )" 1>&2 && exit 3;;
+esac
+
+## REACT TO ROOT STATUS
+#case ${is_root} in
+# 1) # proper root
+# [ ] ;;
+# sudo) # sudo to root
+# [ ] ;;
+# "") # not root at all
+# #ferror "${scriptfile}: 5. Please run as root or sudo. Aborted."
+# #exit 5
+# [ ]
+# ;;
+#esac
+
+# SET CUSTOM SCRIPT AND VALUES
+#setval 1 sendsh sendopts<<EOFSENDSH # if $1="1" then setvalout="critical-fail" on failure
+#/usr/share/bgscripts/send.sh -hs # setvalout maybe be "fail" otherwise
+#/usr/local/bin/send.sh -hs # on success, setvalout="valid-sendsh"
+#/usr/bin/mail -s
+#EOFSENDSH
+#test "${setvalout}" = "critical-fail" && ferror "${scriptfile}: 4. mailer not found. Aborted." && exit 4
+
+# VALIDATE PARAMETERS
+# objects before the dash are options, which get filled with the optvals
+# to debug flags, use option DEBUG. Variables set in framework: fallopts
+validateparams - "$@"
+
+# CONFIRM TOTAL NUMBER OF FLAGLESSVALS IS CORRECT
+#if test ${thiscount} -lt 2;
+#then
+# ferror "${scriptfile}: 2. Fewer than 2 flaglessvals. Aborted."
+# exit 2
+#fi
+
+# CONFIGURE VARIABLES AFTER PARAMETERS
+
+## START READ CONFIG FILE TEMPLATE
+get_conf /home/bgirton-local/rpmbuild/SOURCES/rbup-0.0-1/etc/rbup/rbup.conf
+#oIFS="${IFS}"; IFS="$( printf '\n' )"
+#infiledata=$( ${sed} ':loop;/^\/\*/{s/.//;:ccom;s,^.[^*]*,,;/^$/n;/^\*\//{s/..//;bloop;};bccom;}' "${infile1}") #the crazy sed removes c style multiline comments
+#IFS="${oIFS}"; infilelines=$( echo "${infiledata}" | wc -l )
+#{ echo "${infiledata}"; echo "ENDOFFILE"; } | {
+# while read line; do
+# # the crazy sed removes leading and trailing whitespace, blank lines, and comments
+# if test ! "${line}" = "ENDOFFILE";
+# then
+# line=$( echo "${line}" | sed -e 's/^\s*//;s/\s*$//;/^[#$]/d;s/\s*[^\]#.*$//;' )
+# if test -n "${line}";
+# then
+# debuglev 8 && ferror "line=\"${line}\""
+# if echo "${line}" | grep -qiE "\[.*\]";
+# then
+# # new zone
+# zone=$( echo "${line}" | tr -d '[]' )
+# debuglev 7 && ferror "zone=${zone}"
+# else
+# # directive
+# varname=$( echo "${line}" | awk -F= '{print $1}' )
+# varval=$( echo "${line}" | awk -F= '{$1=""; printf "%s", $0}' | sed 's/^ //;' )
+# debuglev 7 && ferror "${zone}${varname}=\"${varval}\""
+# # simple define variable
+# eval "${zone}${varname}=\${varval}"
+# fi
+# ## this part is untested
+# #read -p "Please type something here:" response < ${thistty}
+# #echo "${response}"
+# fi
+# else
+
+## REACT TO BEING A CRONJOB
+#if test ${is_cronjob} -eq 1;
+#then
+# [ ]
+#else
+# [ ]
+#fi
+
+# SET TRAPS
+trap "CTRLC" 2
+#trap "CTRLZ" 18
+trap "clean_rbup" 0
+
+# MAIN LOOP
+#{
+ [ ]
+ for word in $( cd "${tmpdir}"; find -type f -regextype grep ! -regex './default.conf' ! -regex './cli.conf' );
+ do
+ echo "working on ${word}"
+ reset_vars
+ . /tmp/rbup/default.conf
+ . /tmp/rbup/"${word}"
+ set | grep -iE "^RBUP_"
+ done
+#} | tee -a ${logfile}
+
+# EMAIL LOGFILE
+#${sendsh} ${sendopts} "${server} ${scriptfile} out" ${logfile} ${interestedparties}
+
+## STOP THE READ CONFIG FILE
+#exit 0
+#fi; done; }
bgstack15