Преглед на файлове

Initial conversion to git

mike преди 5 години
родител
ревизия
43565ee787
променени са 7 файла, в които са добавени 636 реда и са изтрити 602 реда
  1. 9 0
      DEBIAN/changelog
  2. 0 6
      DEBIAN/changes
  3. 1 1
      DEBIAN/control
  4. 595 0
      opt/TopGunSoftware/PicturesBackup3
  5. 0 595
      usr/local/bin/PicturesBackup3
  6. 1 0
      usr/local/bin/PicturesBackup3
  7. 30 0
      usr/share/man/man1/PicturesBackup3.1

+ 9 - 0
DEBIAN/changelog

@@ -0,0 +1,9 @@
+PicturesBackup3 (0.1.1)
+
+ * First Release under git structure
+  - Core Files under /opt/TopGunSoftware
+  - Symlink in /usr/local/bin/
+  - Began early edits on man pages
+-- maintainer Mike Stagl <M_Stagl@hotmail.com> Wed, 8 Jun 2020 13:17:00
+
+

+ 0 - 6
DEBIAN/changes

@@ -1,6 +0,0 @@
-WOL (0.1)
-
- * New release
-  - First release
-
--- maintainer Mike Stagl <M_Stagl@hotmail.com> Wed, 30 Nov 2017 13:17:00

+ 1 - 1
DEBIAN/control

@@ -1,5 +1,5 @@
 Package: PicturesBackup
-Version: 0.1
+Version: 0.1.1
 Architecture: all
 Maintainer: Mike Stagl
 Description: Script to back up Picture on Windows PC

+ 595 - 0
opt/TopGunSoftware/PicturesBackup3

@@ -0,0 +1,595 @@
+#!/bin/bash
+
+############
+##
+##THIS NEW SCRIPT WILL RESIDE ON TOMCAT AND DO THE FOLLOWING
+##
+##
+##NEEDED UPGRADES
+##	Check if required servers are online
+##	If not, activate them via WOL, wait, anc check again
+##
+##	8/6/2019 - changed builtar to not use chown.  Instead, use chgrp to change to familyshare
+##		MUST ensure sync function works with this change on ENTERPRISE!!
+##		This eliminates need for sudo to run script
+##
+##	ADD command -v wol2 to check if script is installed
+##
+##	use wol2 to start and stop enterprise
+##
+##	Build debian to place this script in either:
+##		- /.local for user
+##		- /usr/local/bin for global
+##		Symlink to /usr/local/bin for ease of use
+##
+##	Interactive Menu Mode:
+##
+##	If no flags passed, start interactive mode with promopts for:
+##		- What needs to be done (build tar, sync, or clean)
+##		- Based on result, what source and destintation (if syncing or building tar)
+##		-
+##
+#############
+
+##  DEFINE VARIABLES  ##
+DATE=$(date +%b-%d-%T)
+
+VERSION=0.04
+
+LOCALARCHIVEPATH=/storage/backup
+
+PIHOMEPATHTOFILES=home/pi/ 			## Folder containing data that will be backed up
+#PIHOMEPATHTOFILES=home/pi/scripts 		## USE THIS PROFILE ONLY FOR TESTING- ARCHIVES ONLY A SMALL FOLDER
+PIHOMEFOLDER=PiHomeBackup			## Name of Folder that will store the archives
+PIHOMEFILENAME=PiHomeBackup-$DATE.tar.gz	## Filename structure for archives
+
+OWNCLOUDPATHTOFILES=storage/owncloud/		## Folder containing data that will be backed up
+#OWNCLOUDPATHTOFILES=storage/owncloud/data/mike/files/Network		## Folder containing data that will be backed up
+OWNCLOUDFOLDER=PiOwncloudBackup			## Name of Folder that will store the archives
+OWNCLOUDFILENAME=PiOwncloudArchive-$DATE.tar.gz ## Filename structure for archives
+
+ENTERPRISESTORAGE=/storage/backup/
+ENTERPRISESHARE=/storage/ENTERPRISESHARE
+PCSHARE=/storage/PCSHARE
+PATHTOLOG=/var/log/TOMCAT.log
+
+VERBOSITY=2					## Default Verbosity Normal (Debug Level 1 -C flag, Critical Level 3 -S flag)
+LOGLEVEL=1
+
+PIHOMEKEEPFILES=4				## Number of local backups that will be kept after cleaning
+OWNCLOUDKEEPFILES=7				## Number of local backups that will be kept after cleaning
+
+##   Arrays for servers to sync  ##
+## arrNAME=(Common Name, IP, remote folder to mount, local location for mount, username, password) ##
+arrENTERPRISE=(ENTERPRISE 192.168.100.27 /backup $ENTERPRISESHARE mike cherokee2)
+##arrPC=(PC 192.168.100.51 /Mavrick_Pictures $PCSHARE NetworkUser cherokee2)  ## <- Use for Windows
+arrPC=(PC 192.168.100.51 /PicturesBackup $PCSHARE mike cherokee2) ## <- Use for Linux
+
+## FLAGS ##
+FLAGBUILD=0
+FLAGSYNC=0
+FLAGHOME=0
+FLAGOWNCLOUD=0
+FLAGPICTURES=0
+FLAGPHONE=0
+FLAGCLEAN=0				## If 0, -C must be called to clean after archiving.  If 1, cleaning will occur automatically
+FLAGTESTING=0 				## TEST MODE ACTIVE IF 1 OR HIGHER ##
+## END VARIABLES  ##
+
+## BEGIN FUNCTIONS  ##
+
+
+addtolog () {
+
+	####LOG LEVELS####
+	# Log levels:
+	# 0 - Write to log file only
+	# 1 - Write to Log file and screen at debug verbosity level (useful for debugging)
+	# 2 - Write to Log file and screen at Normal Verbosity Level
+	# 3 - Write to Log File and screen at CRITICAL Verbosity Level 
+	# default - level 1 (debgug verbosity)
+	##################
+
+	if [ -z "$2" ]; then
+		intLOGLEVEL="2"			#if no variable passed, assume level 2
+	else
+		intLOGLEVEL="$2"		 #otherwise, use variable passed
+	fi
+
+#	echo "$intLOGLEVEL $VERBOSITY message: $1"
+
+	DATESTAMP=$(date +%b-%d-%T)
+	echo "$DATESTAMP | $USER | $1" >> $PATHTOLOG
+
+	if [ $intLOGLEVEL -gt "0" ]; then	#If verbosity level is greater than zero, pass message to write()
+		write "$1" $intLOGLEVEL
+#		echo "wrote $1"
+	fi
+}
+
+write () {
+	##This function will write to the terminal screen based on the set VERBOSITY level##
+	##This function takes arguments [string] and intVERBOSITY"
+
+	## NEW PROTOCOL
+	##
+	## default verbosity (set by VERBOSITY flag = 2 (Normal Verbosity)
+	##
+	## -C argument sets verbosity to 0 (debug Verbosity) (show all higher than 0)
+	## -S argument sets verbosity to 3 (Silent / Only Critical Verbosity)
+	## 
+	## Level 0 - Not used
+	## Level 1 - Debug Messages
+	## Level 2 - Normal (default)
+	## Level 3 - Critical
+	##
+	########
+
+	if [ -z "$2" ]; then  		##if no verbosity level is given, assume level 2 (default)
+		intVERBOSE="2"
+	else
+		intVERBOSE="$2"  	##Otherwise, use the provided verbosity level"
+	fi
+
+#		echo "write got $1 at $intVERBOSE with $VERBOSITY"
+
+	if [ $intVERBOSE -ge $VERBOSITY ]; then
+		echo "$1"
+	fi
+}
+
+
+buildtar () {
+
+	addtolog "buildtar: buildtar started for $1."
+	case $1 in
+		PiHome)
+			FILENAME=$PIHOMEFOLDER/$PIHOMEFILENAME
+			PATHTOFILES=$PIHOMEPATHTOFILES
+			KEEPFILES=$PIHOMEKEEPFILES  #Number of archives to keep on TOMCAT
+			;;
+		Owncloud)
+			FILENAME=$OWNCLOUDFOLDER/$OWNCLOUDFILENAME
+			PATHTOFILES=$OWNCLOUDPATHTOFILES
+			KEEPFILES=$OWNCLOUDKEEPFILES	#Number of archives to keep on TOMCAT
+			;;
+	esac
+
+	if [ ! $FLAGTESTING -gt "0" ]; then
+		tar -czf $LOCALARCHIVEPATH/$FILENAME -C / $PATHTOFILES 2>> $PATHTOLOG
+
+		if [ "$?" = "0" ]; then
+			addtolog "buildtar: successfully archived $PATHTOFILES to $LOCALARCHIVEPATH/$FILENAME"
+		else
+			addtolog "buildtar: FAILED to build .tar for $1."
+		fi
+	else
+		addtolog "buildtar: TEST MODE: .tar not built"
+		addtolog "buildtar: SIMULATED backup of $PATHTOFILES"
+		addtolog "buildtar: SIMULATED archive built $LOCALARCHIVEPATH/$FILENAME"
+	fi
+
+	if [ ! $FLAGTESTING -gt 0 ]; then
+		if [ "$EUID" -ne 0 ]; then
+			chgrp familyshare $LOCALARCHIVEPATH/$FILENAME && addtolog "buildtar: set permissions on $FILENAME" || addtolog "buildtar: FAILED to set permissions on $FILENAME"
+		else
+			chown pi:familyshare $LOCALARCHIVEPATH/$FILENAME && addtolog "buildtar: set permissions on $FILENAME from root" || addtolog "buildtar: FAILED to change permissions on $FILENAME"
+		fi
+	else
+		addtolog "Test Mode - File Permission change not attempted"
+	fi
+
+	if [ $FLAGCLEAN -gt "0" ]; then 
+		cleanfiles $1 $KEEPFILES 
+	fi
+
+}
+
+mountfiles () {
+
+	echo "$(id -u)"
+
+   addtolog "mountfiles: mountfiles started for $1."
+   if mount | grep $4 > /dev/null; then
+    	addtolog "mountfiles: $1 files already mounted."
+   else
+#    	sudo mount -t cifs //$2$3 $4 -o username=$5,password=$6 >> $PATHTOLOG 2>&1 &&
+#    	addtolog "mountfiles: successfully mounted $1 files." ||
+#	addtolog "mountfiles: FAILED to mount $1." & failscript
+	sudo mount -t cifs //$2$3 $4 -o username=$5,password=$6,uid=1000 >> $PATHTOLOG 2>&1
+	if sudo mountpoint -q 	$4; then
+		addtolog "mountfiles: successfully mounted $1 files."
+	else
+		addtolog "mountfiles: FAILED to mount $1." & failscript
+	fi
+   fi
+}
+
+unmountfiles () {
+  addtolog "unmountfiles: unmountfiles started for $1."
+  if mount | grep $4 > /dev/null; then
+    sudo umount $4 &&
+    addtolog "unmountfiles: successfully unmounted $1 files." || 
+    addtolog "unmountfiles: FAILED to unmount $1"
+  else
+    addtolog "unmountfiles: $1 Files already unmounted."
+  fi
+}
+
+checkpackage () {
+	## This script is used to check for the installation of other packages / scripts required
+	## returns 0 if package exists; 1 if package not found; fails if no variable passed
+
+	if [ -z "$1" ]; then
+		addtolog "checkpackages: Package Variable not received.  Exiting" 3
+		failscript
+	else
+		command -v $1 1>/dev/null 2>&1 && PACKAGEEXISTS=0 || PACKAGEEXISTS=1
+		addtolog "checkpackages: Package $1 - flag set to $PACKAGEEXISTS" 1
+		return $PACKAGEEXISTS
+	fi
+
+
+}
+
+cleanfiles () {
+
+#####
+## This Function will be run manually, or automatically after Tomcat builds a new Owncloud backup .tar file
+## This Funtion take the following arguments:
+##  1 - Name of server to clean (currently Enterprise or Owncloud)
+##  2 - (optional) number of files to keep (default 4)
+####
+
+	if [ -z "$2" ]; then  # If argument 2 is not set
+		filestokeep=4  # Default to 4
+	else
+		filestokeep="$2"  # Otherwise use argument
+	fi
+
+	addtolog "cleanfiles: cleanfiles started for $1. Keeping $filestokeep files."
+
+	case $1 in
+		Enterprise)
+			##This is a future upgrade
+			##Endure share is mounted
+			##Sort and delete files
+			##Log files deleted
+			addtolog "Enterprise cleanfiles not available at this time." 3
+			;;
+		PiHome)
+			cleanpath="$LOCALARCHIVEPATH/$PIHOMEFOLDER"
+			;;
+		Owncloud)
+			cleanpath="$LOCALARCHIVEPATH/$OWNCLOUDFOLDER"
+			;;
+		*)
+			addtolog "Cannot call cleanfiles with $1" 3
+			failscript
+	esac
+
+			arrFiles=($(ls -t -- $cleanpath/*.tar.gz 2>/dev/null))
+
+			totalfiles=${#arrFiles[@]}
+
+			addtolog "cleanfiles: found $totalfiles files in $cleanpath"
+
+			if [ "$totalfiles" -le "$filestokeep" ]
+				then
+				addtolog "cleanfiles will not delete files on $cleanpath.  Total Files is less than or equal to $filestokeep"
+			else
+				filestoremove=$((totalfiles - filestokeep))
+				addtolog "cleanfiles will attempt to remove the oldest $filestoremove files"
+
+				for index in "${!arrFiles[@]}"
+				do
+					if [ "$index" -gt "$((filestokeep - 1))" ]; then
+						#Array is 0 based, so -1
+						if [  $FLAGTESTING -lt "1" ]; then 	#Do Nothing if Testing flag is set true
+						rm -f ${arrFiles[$index]}
+						addtolog "cleanfiles: DELETED: ${arrFiles[$index]}" 
+						else
+							addtolog "cleanfiles: TEST MODE | SIMULATED DELETE: ${arrFiles[$index]}" 
+						fi
+					fi
+				done
+			fi
+}
+
+syncfiles () {
+	addtolog "syncfiles: syncfiles started for $1."
+	# determine server shares needed and file paths
+	SOURCEPATH=$LOCALARCHIVEPATH
+	DESTPATH=$ENTERPRISESHARE
+	case $1 in
+		PiHome)
+			SOURCEPATH=${SOURCEPATH}/$PIHOMEFOLDER/$PIHOMEFILENAME
+			DESTPATH=${DESTPATH}/TOMCAT/PiHomeDir/
+#			DESTPATH=/home/pi/
+			mountfiles ${arrENTERPRISE[@]}
+			;;
+		Owncloud)
+			SOURCEPATH=${SOURCEPATH}/$OWNCLOUDFOLDER/
+			DESTPATH=${DESTPATH}/TOMCAT/Owncloud/
+			mountfiles ${arrENTERPRISE[@]}
+			;;
+		Pictures)
+			SOURCEPATH=$PCSHARE/
+			DESTPATH=${DESTPATH}/Pictures/
+			mountfiles ${arrENTERPRISE[@]}
+			mountfiles ${arrPC[@]}
+			;;
+		phone)
+			SOURCEPATH=/storage/backup/phone/mike/
+			DESTPATH=${DESTPATH}/TOMCAT/phone/mike/
+			mountfiles ${arrENTERPRISE[@]}
+	esac
+
+	# Perform rsync
+
+#	echo "$DATE | syncfiles: I will rsync $SOURCEPATH to $DESTPATH"
+	addtolog "syncfiles: syncing $SOURCEPATH to $DESTPATH." 3
+	rsync -avP --no-o --no-g --stats --progress --chown=mike:mike $SOURCEPATH $DESTPATH 2>> $PATHTOLOG &&
+		## rsync modified 2/9/2019 to remove -z flag.  This will eliminate rsync compression
+		## and should lead to faster trasnfers
+	addtolog "syncfiles: successfully rsynced $SOURCEPATH to $DESTPATH." 3 ||
+	addtolog "syncfiles: FAILED to rsync $SOURCEPATH to $DESTPATH." 3
+
+	unmountfiles ${arrENTERPRISE[@]}
+	unmountfiles ${arrPC[@]}
+}
+
+
+checkusersudo () {
+
+## For Some operations, user must have sudo privileges
+## This will check for sudo
+##  and stop script if user need additional privileges
+
+	if [ "$EUID" -ne 0 ]; then
+		MESSAGE="Must run as sudo.  This program requires sudo privileges to archive Owncloud files."
+		addtolog "$MESSAGE" 3
+		failscript
+	fi
+}
+
+
+
+startscript() {
+	#Prepare Log file for new execution#
+	addtolog "---------------------------------------------------------" 0
+	addtolog "$0 Script starting" 3
+}
+
+failscript() {
+	addtolog "$0 script failed.  Exiting." 3
+	addtolog "--------------------------------------------------------" 0
+	exit 1
+}
+
+endscript() {
+
+	addtolog "$0 script complete.  Exiting." 3
+	addtolog "---------------------------------------------------------" 0
+	exit 0
+
+}
+
+
+###############
+#  HELP FILE  #
+###############
+display_help() {
+        echo "This script will build .tar archives of the Pi Home Directory and Owncloud files, and can sync archives and PC pictures folder to ENTERPRISE."
+        echo " "
+        echo "  -h      This help file"
+        echo "  -B, 	Build .tar files"
+        echo "  -S, 	Sync files between machines"
+	echo "  -C,	Cleanup.  Used to manually clean acrchives. Normally automatic with -B or -S"
+        echo "  -p, 	Perform actions on PiHome Directory"
+        echo "  -o, 	Perform actions on Owncloud"
+	echo "  -i, 	Perform actions on Photos"
+	echo "  -t, 	Perform actions on Phone Backup"
+	echo "  -T,	Testing Mode.  No Deletions"
+	echo "  -m,	Mount filesystems only (used for testing)"
+	echo "  -u,	Unmount filesystems only (used for testing)"
+	echo "  -s,	Silent Mode.  Supress all output except errors."
+	echo "  -V,	Verbose Mode.  Show all debugging on screen."
+	echo "  -v,	Version.  Display Version information."
+        echo
+
+	addtolog "$0 help menu displayed." 0
+	
+}
+##############
+#  END HELP  #
+##############
+
+
+trap ctrl_c 2 3 6 15
+
+ctrl_c () {
+	addtolog "SIGINT CTRL_C.  Unmounting files and stopping." 3
+	addtolog "Aborting Script.  Waiting for processes to finish." 3
+	sleep 2
+	addtolog "Unmounting file shares" 3
+	sleep 2
+	unmountfiles ${arrENTERPRISE[@]} && addtolog "Enterpise unmounted" || addtolog "Failed to unmount ENTERPRISE" 3
+	unmountfiles ${arrPC[@]} && addtolog "PC unmounted" || addtolog "Failed to unmount PC" 3
+	addtolog "$0 Script has stopped.  Exiting." 3
+	exit 1
+}
+
+startscript
+
+startlog="$0 script starting with the commands:"
+
+options=':hBSCpoitmusTVv'
+while getopts $options option
+do
+   case $option in
+	h ) 	startlog="$startlog help menu"
+		addtolog "$startlog"
+		display_help
+		endscript;;
+	s )	startlog="$startlog silent mode "
+		VERBOSITY=0;;
+	V )	startlog="$startlog verbose mode "
+		VERBOSITY=2;;
+	B ) 	FLAGBUILD=1
+		startlog="$startlog BUILD ";;
+	S ) 	FLAGSYNC=1
+					echo $index
+					echo $index
+					echo $index
+					echo $index
+					echo $index
+		startlog="$startlog SYNC ";;
+	C )	startlog="$startlog CLEANUP "
+		FLAGCLEAN=1;;
+	p ) 	FLAGHOME=1
+		startlog="$startlog PiHome ";;
+	o ) 	FLAGOWNCLOUD=1
+		startlog="$startlog owncloud ";;
+	i ) 	FLAGPICTURES=1
+		startlog="$startlog PC Pictures ";;
+	t ) 	FLAGPHONE=1
+		startlog="$startlog, Phone Backup ";;
+	T )	FLAGTESTING=1
+		startlog="$startlog TESTING MODE";;
+	m )	startlog="$startlog mount files only"
+		echo "mounting"
+		addtolog "$startlog"
+		mountfiles ${arrENTERPRISE[@]}
+		mountfiles ${arrPC[@]}
+		endscript;;
+        u )     startlog="$startlog unmount files only"
+                addtolog "$startlog"
+                unmountfiles ${arrENTERPRISE[@]}
+                unmountfiles ${arrPC[@]}
+                endscript;;
+	v )     startlog="$startlog, Display Version - $VERSION"
+                echo "$0 - Version $VERSION"
+#                addtolog "$startlog"
+#		endscript
+		exit 0;;
+	* )	display_help
+		endscript ;;
+	/? ) 	addtolog "unknown menu option $1.  Exiting." 3; exit 1;;
+   esac
+done
+
+## Check is Options were passed
+## If not, consider Interactive mode
+if [ $OPTIND -eq 1 ]; then addtolog "No options were passed in command line." 1; fi
+##
+
+addtolog "$startlog" 3
+
+####################
+#  DONE ARGUMENTS  #
+####################
+
+	
+####################
+#    RUN CHECKS    #
+####################
+
+if [ $FLAGTESTING -gt "0" ]; then
+	VERBOSITY=0
+	addtolog "**TESTING MODE ACTIVE**" 3
+	addtolog "Verbose mode implied by testing mode" 3
+echo "Set Verbosity to $VERBOSITY"
+#	if [ $FLAGCLEAN -gt "0" ]; then
+#		cleanfiles Owncloud $OWNCLOUDKEEPFILES
+#	fi
+fi
+
+## Check for existance of WOL2 package for sync operations ##
+checkpackage wol2 || addtolog "Wol2 Package not found.  Needed for sync operations." 1
+
+## Check SYNC or BUILD flags have appropriate action##
+if [ $FLAGSYNC -eq "1" -o $FLAGBUILD -eq "1" ]; then
+	if ! [ $FLAGHOME -eq "1" -o $FLAGOWNCLOUD -eq "1" -o $FLAGPICTURES -eq "1" -o $FLAGPHONE -eq "1" ]; then
+	addtolog "FAIL: FLAGSYNC or FLAGBUILD did not have -p,o,i, or t action declared.  See -h for help." 3
+	exit 1
+	fi
+fi
+
+###################
+#    END CHECKS   #
+###################
+
+
+###################
+#  BEGIN ACTIONS  #
+###################
+
+
+## Check PiHome Flag ##
+if [ $FLAGHOME -eq "1" ]; then
+	##Perform actiong on PiHome Directory
+	addtolog "Perform Actions on PiHomeDirectory" 1
+	if [ $FLAGBUILD -eq "1" ]; then
+		addtolog "Perform Tar Build on PiHomeDirectory" 1
+		buildtar PiHome
+	fi
+	
+	if [ $FLAGSYNC -eq "1" ]; then
+		addtolog "Perform Sync on PiHomeDirectory" 1
+		##PERFORM ACTIONS TO SYNC FILES##
+		syncfiles PiHome
+	fi
+fi
+
+## Check Owncloud Flag ##
+if [ $FLAGOWNCLOUD -eq "1" ]; then
+        ##Perform action on Owncloud Directory
+        if [ $FLAGBUILD -eq "1" ]; then
+		checkusersudo && buildtar Owncloud
+        fi
+
+        if [ $FLAGSYNC -eq "1" ]; then
+                #echo "Perform Sync on Owncloud Directory"
+                ##PERFORM ACTIONS TO SYNC FILES##
+		syncfiles Owncloud
+        fi
+fi
+
+## Check Pictures Flag ##
+if [ $FLAGPICTURES -eq "1" ]; then
+        ##Perform action on Pictures Directory
+        #echo "Perform Actions on Pictrues Directory"
+        if [ $FLAGBUILD -eq "1" ]; then
+                addtolog "Cannot Perform Compression of Pictures.  Sync only. Exiting." 3
+                endscript
+        fi
+
+        if [ $FLAGSYNC -eq "1" ]; then
+                #echo "Perform Sync on Pictures"
+                ##PERFORM ACTIONS TO SYNC FILES##
+		syncfiles Pictures
+        fi
+fi
+
+
+## Check Phone Flag ##
+if [ $FLAGPHONE -eq "1" ]; then
+        ##Perform actiong on Phone Directory
+        #echo "Perform Actions on Phone Backup Directory"
+        if [ $FLAGBUILD -eq "1" ]; then
+                addtolog "Cannot build archive of Phone Backup.  Sync only. Exiting." 3
+                endscript
+        fi
+
+        if [ $FLAGSYNC -eq "1" ]; then
+#                echo "Cannot Sync Phone Backup Files.  FUTURE UPGRADE"
+		syncfiles phone
+        fi
+fi
+
+#################
+#  END ACTIONS  #
+#################
+
+endscript

+ 0 - 595
usr/local/bin/PicturesBackup3

@@ -1,595 +0,0 @@
-#!/bin/bash
-
-############
-##
-##THIS NEW SCRIPT WILL RESIDE ON TOMCAT AND DO THE FOLLOWING
-##
-##
-##NEEDED UPGRADES
-##	Check if required servers are online
-##	If not, activate them via WOL, wait, anc check again
-##
-##	8/6/2019 - changed builtar to not use chown.  Instead, use chgrp to change to familyshare
-##		MUST ensure sync function works with this change on ENTERPRISE!!
-##		This eliminates need for sudo to run script
-##
-##	ADD command -v wol2 to check if script is installed
-##
-##	use wol2 to start and stop enterprise
-##
-##	Build debian to place this script in either:
-##		- /.local for user
-##		- /usr/local/bin for global
-##		Symlink to /usr/local/bin for ease of use
-##
-##	Interactive Menu Mode:
-##
-##	If no flags passed, start interactive mode with promopts for:
-##		- What needs to be done (build tar, sync, or clean)
-##		- Based on result, what source and destintation (if syncing or building tar)
-##		-
-##
-#############
-
-##  DEFINE VARIABLES  ##
-DATE=$(date +%b-%d-%T)
-
-VERSION=0.04
-
-LOCALARCHIVEPATH=/storage/backup
-
-PIHOMEPATHTOFILES=home/pi/ 			## Folder containing data that will be backed up
-#PIHOMEPATHTOFILES=home/pi/scripts 		## USE THIS PROFILE ONLY FOR TESTING- ARCHIVES ONLY A SMALL FOLDER
-PIHOMEFOLDER=PiHomeBackup			## Name of Folder that will store the archives
-PIHOMEFILENAME=PiHomeBackup-$DATE.tar.gz	## Filename structure for archives
-
-OWNCLOUDPATHTOFILES=storage/owncloud/		## Folder containing data that will be backed up
-#OWNCLOUDPATHTOFILES=storage/owncloud/data/mike/files/Network		## Folder containing data that will be backed up
-OWNCLOUDFOLDER=PiOwncloudBackup			## Name of Folder that will store the archives
-OWNCLOUDFILENAME=PiOwncloudArchive-$DATE.tar.gz ## Filename structure for archives
-
-ENTERPRISESTORAGE=/storage/backup/
-ENTERPRISESHARE=/storage/ENTERPRISESHARE
-PCSHARE=/storage/PCSHARE
-PATHTOLOG=/var/log/TOMCAT.log
-
-VERBOSITY=2					## Default Verbosity Normal (Debug Level 1 -C flag, Critical Level 3 -S flag)
-LOGLEVEL=1
-
-PIHOMEKEEPFILES=4				## Number of local backups that will be kept after cleaning
-OWNCLOUDKEEPFILES=7				## Number of local backups that will be kept after cleaning
-
-##   Arrays for servers to sync  ##
-## arrNAME=(Common Name, IP, remote folder to mount, local location for mount, username, password) ##
-arrENTERPRISE=(ENTERPRISE 192.168.100.27 /backup $ENTERPRISESHARE mike cherokee2)
-##arrPC=(PC 192.168.100.51 /Mavrick_Pictures $PCSHARE NetworkUser cherokee2)  ## <- Use for Windows
-arrPC=(PC 192.168.100.51 /PicturesBackup $PCSHARE mike cherokee2) ## <- Use for Linux
-
-## FLAGS ##
-FLAGBUILD=0
-FLAGSYNC=0
-FLAGHOME=0
-FLAGOWNCLOUD=0
-FLAGPICTURES=0
-FLAGPHONE=0
-FLAGCLEAN=0				## If 0, -C must be called to clean after archiving.  If 1, cleaning will occur automatically
-FLAGTESTING=0 				## TEST MODE ACTIVE IF 1 OR HIGHER ##
-## END VARIABLES  ##
-
-## BEGIN FUNCTIONS  ##
-
-
-addtolog () {
-
-	####LOG LEVELS####
-	# Log levels:
-	# 0 - Write to log file only
-	# 1 - Write to Log file and screen at debug verbosity level (useful for debugging)
-	# 2 - Write to Log file and screen at Normal Verbosity Level
-	# 3 - Write to Log File and screen at CRITICAL Verbosity Level 
-	# default - level 1 (debgug verbosity)
-	##################
-
-	if [ -z "$2" ]; then
-		intLOGLEVEL="2"			#if no variable passed, assume level 2
-	else
-		intLOGLEVEL="$2"		 #otherwise, use variable passed
-	fi
-
-#	echo "$intLOGLEVEL $VERBOSITY message: $1"
-
-	DATESTAMP=$(date +%b-%d-%T)
-	echo "$DATESTAMP | $USER | $1" >> $PATHTOLOG
-
-	if [ $intLOGLEVEL -gt "0" ]; then	#If verbosity level is greater than zero, pass message to write()
-		write "$1" $intLOGLEVEL
-#		echo "wrote $1"
-	fi
-}
-
-write () {
-	##This function will write to the terminal screen based on the set VERBOSITY level##
-	##This function takes arguments [string] and intVERBOSITY"
-
-	## NEW PROTOCOL
-	##
-	## default verbosity (set by VERBOSITY flag = 2 (Normal Verbosity)
-	##
-	## -C argument sets verbosity to 0 (debug Verbosity) (show all higher than 0)
-	## -S argument sets verbosity to 3 (Silent / Only Critical Verbosity)
-	## 
-	## Level 0 - Not used
-	## Level 1 - Debug Messages
-	## Level 2 - Normal (default)
-	## Level 3 - Critical
-	##
-	########
-
-	if [ -z "$2" ]; then  		##if no verbosity level is given, assume level 2 (default)
-		intVERBOSE="2"
-	else
-		intVERBOSE="$2"  	##Otherwise, use the provided verbosity level"
-	fi
-
-#		echo "write got $1 at $intVERBOSE with $VERBOSITY"
-
-	if [ $intVERBOSE -ge $VERBOSITY ]; then
-		echo "$1"
-	fi
-}
-
-
-buildtar () {
-
-	addtolog "buildtar: buildtar started for $1."
-	case $1 in
-		PiHome)
-			FILENAME=$PIHOMEFOLDER/$PIHOMEFILENAME
-			PATHTOFILES=$PIHOMEPATHTOFILES
-			KEEPFILES=$PIHOMEKEEPFILES  #Number of archives to keep on TOMCAT
-			;;
-		Owncloud)
-			FILENAME=$OWNCLOUDFOLDER/$OWNCLOUDFILENAME
-			PATHTOFILES=$OWNCLOUDPATHTOFILES
-			KEEPFILES=$OWNCLOUDKEEPFILES	#Number of archives to keep on TOMCAT
-			;;
-	esac
-
-	if [ ! $FLAGTESTING -gt "0" ]; then
-		tar -czf $LOCALARCHIVEPATH/$FILENAME -C / $PATHTOFILES 2>> $PATHTOLOG
-
-		if [ "$?" = "0" ]; then
-			addtolog "buildtar: successfully archived $PATHTOFILES to $LOCALARCHIVEPATH/$FILENAME"
-		else
-			addtolog "buildtar: FAILED to build .tar for $1."
-		fi
-	else
-		addtolog "buildtar: TEST MODE: .tar not built"
-		addtolog "buildtar: SIMULATED backup of $PATHTOFILES"
-		addtolog "buildtar: SIMULATED archive built $LOCALARCHIVEPATH/$FILENAME"
-	fi
-
-	if [ ! $FLAGTESTING -gt 0 ]; then
-		if [ "$EUID" -ne 0 ]; then
-			chgrp familyshare $LOCALARCHIVEPATH/$FILENAME && addtolog "buildtar: set permissions on $FILENAME" || addtolog "buildtar: FAILED to set permissions on $FILENAME"
-		else
-			chown pi:familyshare $LOCALARCHIVEPATH/$FILENAME && addtolog "buildtar: set permissions on $FILENAME from root" || addtolog "buildtar: FAILED to change permissions on $FILENAME"
-		fi
-	else
-		addtolog "Test Mode - File Permission change not attempted"
-	fi
-
-	if [ $FLAGCLEAN -gt "0" ]; then 
-		cleanfiles $1 $KEEPFILES 
-	fi
-
-}
-
-mountfiles () {
-
-	echo "$(id -u)"
-
-   addtolog "mountfiles: mountfiles started for $1."
-   if mount | grep $4 > /dev/null; then
-    	addtolog "mountfiles: $1 files already mounted."
-   else
-#    	sudo mount -t cifs //$2$3 $4 -o username=$5,password=$6 >> $PATHTOLOG 2>&1 &&
-#    	addtolog "mountfiles: successfully mounted $1 files." ||
-#	addtolog "mountfiles: FAILED to mount $1." & failscript
-	sudo mount -t cifs //$2$3 $4 -o username=$5,password=$6,uid=1000 >> $PATHTOLOG 2>&1
-	if sudo mountpoint -q 	$4; then
-		addtolog "mountfiles: successfully mounted $1 files."
-	else
-		addtolog "mountfiles: FAILED to mount $1." & failscript
-	fi
-   fi
-}
-
-unmountfiles () {
-  addtolog "unmountfiles: unmountfiles started for $1."
-  if mount | grep $4 > /dev/null; then
-    sudo umount $4 &&
-    addtolog "unmountfiles: successfully unmounted $1 files." || 
-    addtolog "unmountfiles: FAILED to unmount $1"
-  else
-    addtolog "unmountfiles: $1 Files already unmounted."
-  fi
-}
-
-checkpackage () {
-	## This script is used to check for the installation of other packages / scripts required
-	## returns 0 if package exists; 1 if package not found; fails if no variable passed
-
-	if [ -z "$1" ]; then
-		addtolog "checkpackages: Package Variable not received.  Exiting" 3
-		failscript
-	else
-		command -v $1 1>/dev/null 2>&1 && PACKAGEEXISTS=0 || PACKAGEEXISTS=1
-		addtolog "checkpackages: Package $1 - flag set to $PACKAGEEXISTS" 1
-		return $PACKAGEEXISTS
-	fi
-
-
-}
-
-cleanfiles () {
-
-#####
-## This Function will be run manually, or automatically after Tomcat builds a new Owncloud backup .tar file
-## This Funtion take the following arguments:
-##  1 - Name of server to clean (currently Enterprise or Owncloud)
-##  2 - (optional) number of files to keep (default 4)
-####
-
-	if [ -z "$2" ]; then  # If argument 2 is not set
-		filestokeep=4  # Default to 4
-	else
-		filestokeep="$2"  # Otherwise use argument
-	fi
-
-	addtolog "cleanfiles: cleanfiles started for $1. Keeping $filestokeep files."
-
-	case $1 in
-		Enterprise)
-			##This is a future upgrade
-			##Endure share is mounted
-			##Sort and delete files
-			##Log files deleted
-			addtolog "Enterprise cleanfiles not available at this time." 3
-			;;
-		PiHome)
-			cleanpath="$LOCALARCHIVEPATH/$PIHOMEFOLDER"
-			;;
-		Owncloud)
-			cleanpath="$LOCALARCHIVEPATH/$OWNCLOUDFOLDER"
-			;;
-		*)
-			addtolog "Cannot call cleanfiles with $1" 3
-			failscript
-	esac
-
-			arrFiles=($(ls -t -- $cleanpath/*.tar.gz 2>/dev/null))
-
-			totalfiles=${#arrFiles[@]}
-
-			addtolog "cleanfiles: found $totalfiles files in $cleanpath"
-
-			if [ "$totalfiles" -le "$filestokeep" ]
-				then
-				addtolog "cleanfiles will not delete files on $cleanpath.  Total Files is less than or equal to $filestokeep"
-			else
-				filestoremove=$((totalfiles - filestokeep))
-				addtolog "cleanfiles will attempt to remove the oldest $filestoremove files"
-
-				for index in "${!arrFiles[@]}"
-				do
-					if [ "$index" -gt "$((filestokeep - 1))" ]; then
-						#Array is 0 based, so -1
-						if [  $FLAGTESTING -lt "1" ]; then 	#Do Nothing if Testing flag is set true
-						rm -f ${arrFiles[$index]}
-						addtolog "cleanfiles: DELETED: ${arrFiles[$index]}" 
-						else
-							addtolog "cleanfiles: TEST MODE | SIMULATED DELETE: ${arrFiles[$index]}" 
-						fi
-					fi
-				done
-			fi
-}
-
-syncfiles () {
-	addtolog "syncfiles: syncfiles started for $1."
-	# determine server shares needed and file paths
-	SOURCEPATH=$LOCALARCHIVEPATH
-	DESTPATH=$ENTERPRISESHARE
-	case $1 in
-		PiHome)
-			SOURCEPATH=${SOURCEPATH}/$PIHOMEFOLDER/$PIHOMEFILENAME
-			DESTPATH=${DESTPATH}/TOMCAT/PiHomeDir/
-#			DESTPATH=/home/pi/
-			mountfiles ${arrENTERPRISE[@]}
-			;;
-		Owncloud)
-			SOURCEPATH=${SOURCEPATH}/$OWNCLOUDFOLDER/
-			DESTPATH=${DESTPATH}/TOMCAT/Owncloud/
-			mountfiles ${arrENTERPRISE[@]}
-			;;
-		Pictures)
-			SOURCEPATH=$PCSHARE/
-			DESTPATH=${DESTPATH}/Pictures/
-			mountfiles ${arrENTERPRISE[@]}
-			mountfiles ${arrPC[@]}
-			;;
-		phone)
-			SOURCEPATH=/storage/backup/phone/mike/
-			DESTPATH=${DESTPATH}/TOMCAT/phone/mike/
-			mountfiles ${arrENTERPRISE[@]}
-	esac
-
-	# Perform rsync
-
-#	echo "$DATE | syncfiles: I will rsync $SOURCEPATH to $DESTPATH"
-	addtolog "syncfiles: syncing $SOURCEPATH to $DESTPATH." 3
-	rsync -avP --no-o --no-g --stats --progress --chown=mike:mike $SOURCEPATH $DESTPATH 2>> $PATHTOLOG &&
-		## rsync modified 2/9/2019 to remove -z flag.  This will eliminate rsync compression
-		## and should lead to faster trasnfers
-	addtolog "syncfiles: successfully rsynced $SOURCEPATH to $DESTPATH." 3 ||
-	addtolog "syncfiles: FAILED to rsync $SOURCEPATH to $DESTPATH." 3
-
-	unmountfiles ${arrENTERPRISE[@]}
-	unmountfiles ${arrPC[@]}
-}
-
-
-checkusersudo () {
-
-## For Some operations, user must have sudo privileges
-## This will check for sudo
-##  and stop script if user need additional privileges
-
-	if [ "$EUID" -ne 0 ]; then
-		MESSAGE="Must run as sudo.  This program requires sudo privileges to archive Owncloud files."
-		addtolog "$MESSAGE" 3
-		failscript
-	fi
-}
-
-
-
-startscript() {
-	#Prepare Log file for new execution#
-	addtolog "---------------------------------------------------------" 0
-	addtolog "$0 Script starting" 3
-}
-
-failscript() {
-	addtolog "$0 script failed.  Exiting." 3
-	addtolog "--------------------------------------------------------" 0
-	exit 1
-}
-
-endscript() {
-
-	addtolog "$0 script complete.  Exiting." 3
-	addtolog "---------------------------------------------------------" 0
-	exit 0
-
-}
-
-
-###############
-#  HELP FILE  #
-###############
-display_help() {
-        echo "This script will build .tar archives of the Pi Home Directory and Owncloud files, and can sync archives and PC pictures folder to ENTERPRISE."
-        echo " "
-        echo "  -h      This help file"
-        echo "  -B, 	Build .tar files"
-        echo "  -S, 	Sync files between machines"
-	echo "  -C,	Cleanup.  Used to manually clean acrchives. Normally automatic with -B or -S"
-        echo "  -p, 	Perform actions on PiHome Directory"
-        echo "  -o, 	Perform actions on Owncloud"
-	echo "  -i, 	Perform actions on Photos"
-	echo "  -t, 	Perform actions on Phone Backup"
-	echo "  -T,	Testing Mode.  No Deletions"
-	echo "  -m,	Mount filesystems only (used for testing)"
-	echo "  -u,	Unmount filesystems only (used for testing)"
-	echo "  -s,	Silent Mode.  Supress all output except errors."
-	echo "  -V,	Verbose Mode.  Show all debugging on screen."
-	echo "  -v,	Version.  Display Version information."
-        echo
-
-	addtolog "$0 help menu displayed." 0
-	
-}
-##############
-#  END HELP  #
-##############
-
-
-trap ctrl_c 2 3 6 15
-
-ctrl_c () {
-	addtolog "SIGINT CTRL_C.  Unmounting files and stopping." 3
-	addtolog "Aborting Script.  Waiting for processes to finish." 3
-	sleep 2
-	addtolog "Unmounting file shares" 3
-	sleep 2
-	unmountfiles ${arrENTERPRISE[@]} && addtolog "Enterpise unmounted" || addtolog "Failed to unmount ENTERPRISE" 3
-	unmountfiles ${arrPC[@]} && addtolog "PC unmounted" || addtolog "Failed to unmount PC" 3
-	addtolog "$0 Script has stopped.  Exiting." 3
-	exit 1
-}
-
-startscript
-
-startlog="$0 script starting with the commands:"
-
-options=':hBSCpoitmusTVv'
-while getopts $options option
-do
-   case $option in
-	h ) 	startlog="$startlog help menu"
-		addtolog "$startlog"
-		display_help
-		endscript;;
-	s )	startlog="$startlog silent mode "
-		VERBOSITY=0;;
-	V )	startlog="$startlog verbose mode "
-		VERBOSITY=2;;
-	B ) 	FLAGBUILD=1
-		startlog="$startlog BUILD ";;
-	S ) 	FLAGSYNC=1
-					echo $index
-					echo $index
-					echo $index
-					echo $index
-					echo $index
-		startlog="$startlog SYNC ";;
-	C )	startlog="$startlog CLEANUP "
-		FLAGCLEAN=1;;
-	p ) 	FLAGHOME=1
-		startlog="$startlog PiHome ";;
-	o ) 	FLAGOWNCLOUD=1
-		startlog="$startlog owncloud ";;
-	i ) 	FLAGPICTURES=1
-		startlog="$startlog PC Pictures ";;
-	t ) 	FLAGPHONE=1
-		startlog="$startlog, Phone Backup ";;
-	T )	FLAGTESTING=1
-		startlog="$startlog TESTING MODE";;
-	m )	startlog="$startlog mount files only"
-		echo "mounting"
-		addtolog "$startlog"
-		mountfiles ${arrENTERPRISE[@]}
-		mountfiles ${arrPC[@]}
-		endscript;;
-        u )     startlog="$startlog unmount files only"
-                addtolog "$startlog"
-                unmountfiles ${arrENTERPRISE[@]}
-                unmountfiles ${arrPC[@]}
-                endscript;;
-	v )     startlog="$startlog, Display Version - $VERSION"
-                echo "$0 - Version $VERSION"
-#                addtolog "$startlog"
-#		endscript
-		exit 0;;
-	* )	display_help
-		endscript ;;
-	/? ) 	addtolog "unknown menu option $1.  Exiting." 3; exit 1;;
-   esac
-done
-
-## Check is Options were passed
-## If not, consider Interactive mode
-if [ $OPTIND -eq 1 ]; then addtolog "No options were passed in command line." 1; fi
-##
-
-addtolog "$startlog" 3
-
-####################
-#  DONE ARGUMENTS  #
-####################
-
-	
-####################
-#    RUN CHECKS    #
-####################
-
-if [ $FLAGTESTING -gt "0" ]; then
-	VERBOSITY=0
-	addtolog "**TESTING MODE ACTIVE**" 3
-	addtolog "Verbose mode implied by testing mode" 3
-echo "Set Verbosity to $VERBOSITY"
-#	if [ $FLAGCLEAN -gt "0" ]; then
-#		cleanfiles Owncloud $OWNCLOUDKEEPFILES
-#	fi
-fi
-
-## Check for existance of WOL2 package for sync operations ##
-checkpackage wol2 || addtolog "Wol2 Package not found.  Needed for sync operations." 1
-
-## Check SYNC or BUILD flags have appropriate action##
-if [ $FLAGSYNC -eq "1" -o $FLAGBUILD -eq "1" ]; then
-	if ! [ $FLAGHOME -eq "1" -o $FLAGOWNCLOUD -eq "1" -o $FLAGPICTURES -eq "1" -o $FLAGPHONE -eq "1" ]; then
-	addtolog "FAIL: FLAGSYNC or FLAGBUILD did not have -p,o,i, or t action declared.  See -h for help." 3
-	exit 1
-	fi
-fi
-
-###################
-#    END CHECKS   #
-###################
-
-
-###################
-#  BEGIN ACTIONS  #
-###################
-
-
-## Check PiHome Flag ##
-if [ $FLAGHOME -eq "1" ]; then
-	##Perform actiong on PiHome Directory
-	addtolog "Perform Actions on PiHomeDirectory" 1
-	if [ $FLAGBUILD -eq "1" ]; then
-		addtolog "Perform Tar Build on PiHomeDirectory" 1
-		buildtar PiHome
-	fi
-	
-	if [ $FLAGSYNC -eq "1" ]; then
-		addtolog "Perform Sync on PiHomeDirectory" 1
-		##PERFORM ACTIONS TO SYNC FILES##
-		syncfiles PiHome
-	fi
-fi
-
-## Check Owncloud Flag ##
-if [ $FLAGOWNCLOUD -eq "1" ]; then
-        ##Perform action on Owncloud Directory
-        if [ $FLAGBUILD -eq "1" ]; then
-		checkusersudo && buildtar Owncloud
-        fi
-
-        if [ $FLAGSYNC -eq "1" ]; then
-                #echo "Perform Sync on Owncloud Directory"
-                ##PERFORM ACTIONS TO SYNC FILES##
-		syncfiles Owncloud
-        fi
-fi
-
-## Check Pictures Flag ##
-if [ $FLAGPICTURES -eq "1" ]; then
-        ##Perform action on Pictures Directory
-        #echo "Perform Actions on Pictrues Directory"
-        if [ $FLAGBUILD -eq "1" ]; then
-                addtolog "Cannot Perform Compression of Pictures.  Sync only. Exiting." 3
-                endscript
-        fi
-
-        if [ $FLAGSYNC -eq "1" ]; then
-                #echo "Perform Sync on Pictures"
-                ##PERFORM ACTIONS TO SYNC FILES##
-		syncfiles Pictures
-        fi
-fi
-
-
-## Check Phone Flag ##
-if [ $FLAGPHONE -eq "1" ]; then
-        ##Perform actiong on Phone Directory
-        #echo "Perform Actions on Phone Backup Directory"
-        if [ $FLAGBUILD -eq "1" ]; then
-                addtolog "Cannot build archive of Phone Backup.  Sync only. Exiting." 3
-                endscript
-        fi
-
-        if [ $FLAGSYNC -eq "1" ]; then
-#                echo "Cannot Sync Phone Backup Files.  FUTURE UPGRADE"
-		syncfiles phone
-        fi
-fi
-
-#################
-#  END ACTIONS  #
-#################
-
-endscript

+ 1 - 0
usr/local/bin/PicturesBackup3

@@ -0,0 +1 @@
+/opt/TopGunSoftware/PicturesBackup3

+ 30 - 0
usr/share/man/man1/PicturesBackup3.1

@@ -0,0 +1,30 @@
+.\" Manpage for PicturesBackup.
+.TH man 1 "08 Jun 2020" "0.1.1" "PicturesBackup3 man page"
+.SH NAME
+PicturesBackup3
+.SH SYNOPSIS
+.B PicturesBackup3 
+.I [Options]
+.SH DESCRIPTION
+This utility will help backup and sync various clients and folders with ENTERPISE.
+The utility takes at least two arguments, generally, to indicate what action to perform, and on what source data.
+The action argument is generally an upper case letter, and the source arguments is a lower case letter.
+This utility can compress and archive folders prior to syncing, and clean up old copies
+.SH OPTIONS
+ [Actions]
+ -B Build a .tar file
+ -S Sync source materials to ENTERPRISE
+ -C Cleanup expired copies of archives
+ [source data]
+ -p Perform actions on PiHome Directory
+ -o Perform actions on Owncloud (Nextcloud)
+ -i Perform actions on photos (images)
+ -t Perform action on Phone Backup
+.SH SEE ALSO
+.SH BUGS
+No known bugs.
+.SH FUTURE
+Future improvements include incorporating wake-on-lan features to activate suspended clients or servers.
+This will allow cron jobs to be run on off-peak hours
+.SH AUTHOR
+Mike Stagl