Added preflight checks for config file.
This commit is contained in:
parent
f7d22fc549
commit
1e71371c31
|
@ -13,6 +13,9 @@ RECENT CHANGES
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
! XX Dec 2015: osync v1.1 released
|
! XX Dec 2015: osync v1.1 released
|
||||||
|
- Added bogus config file checks & environment checks
|
||||||
|
- Added delta copies disable option
|
||||||
|
- Revamped rsync patterns to allow include and exclude patterns
|
||||||
- Fully merged codebase with obackup
|
- Fully merged codebase with obackup
|
||||||
- Passed shellCheck.net
|
- Passed shellCheck.net
|
||||||
- Simplified EscapeSpaces to simple bash substitution
|
- Simplified EscapeSpaces to simple bash substitution
|
||||||
|
|
|
@ -4,7 +4,7 @@ PROGRAM="osync" # Rsync based two way sync engine with fault tolerance
|
||||||
AUTHOR="(L) 2013-2015 by Orsiris \"Ozy\" de Jong"
|
AUTHOR="(L) 2013-2015 by Orsiris \"Ozy\" de Jong"
|
||||||
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
||||||
PROGRAM_VERSION=1.1-pre
|
PROGRAM_VERSION=1.1-pre
|
||||||
PROGRAM_BUILD=2015112802
|
PROGRAM_BUILD=2015112803
|
||||||
IS_STABLE=no
|
IS_STABLE=no
|
||||||
|
|
||||||
FUNC_BUILD=2015111901
|
FUNC_BUILD=2015111901
|
||||||
|
@ -969,6 +969,41 @@ function CheckEnvironment {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function CheckCurrentConfig {
|
||||||
|
__CheckArguments 0 $# $FUNCNAME "$@" #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
|
if [ "$INSTANCE_ID" == "" ]; then
|
||||||
|
Logger "No INSTANCE_ID defined in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$INITIATOR_SYNC_DIR" == "" ]; then
|
||||||
|
Logger "No INITIATOR_SYNC_DIR set in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$TARGET_SYNC_DIR" == "" ]; then
|
||||||
|
Logger "Not TARGET_SYNC_DIR set in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check all variables that should contain "yes" or "no"
|
||||||
|
declare -a yes_no_vars=(CREATE_DIRS SUDO_EXEC SSH_COMPRESSION REMOTE_HOST_PING PRESERVE_ACL PRESERVE_XATTR COPY_SYMLINKS KEEP_DIRLINKS PRESERVE_HARDLINKS CHECKSUM RSYNC_COMPRESS CONFLICT_BACKUP CONFLICT_BACKUP_MULTIPLE SOFT_DELETE RESUME_SYNC FORCE_STRANGER_LOCK_RESUME PARTIAL DELTA_COPIES STOP_ON_CMD_ERROR)
|
||||||
|
for i in ${yes_no_vars[@]}; do
|
||||||
|
test="if [ \"\$$i\" != \"yes\" ] && [ \"\$$i\" != \"no\" ]; then Logger \"Bogus $i value defined in config file.\" \"CRITICAL\"; exit 1; fi"
|
||||||
|
eval "$test"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check all variables that should contain a numerical value >= 0
|
||||||
|
declare -a num_vars=(MINIMUM_SPACE BANDWIDTH SOFT_MAX_EXEC_TIME HARD_MAX_EXEC_TIME MIN_WAIT MAX_WAIT CONFLICT_BACKUP_DAYS SOFT_DELETE_DAYS RESUME_TRY)
|
||||||
|
for i in ${num_vars[@]}; do
|
||||||
|
test="if [ $(IsNumeric \"\$$i\") -eq 0 ]; then Logger \"Bogus $i value defined in config file.\" \"CRITICAL\"; exit 1; fi"
|
||||||
|
eval "$test"
|
||||||
|
done
|
||||||
|
|
||||||
|
#TODO-v2.1: Add runtime variable tests (RSYNC_ARGS etc)
|
||||||
|
}
|
||||||
|
|
||||||
###### Osync specific functions (non shared)
|
###### Osync specific functions (non shared)
|
||||||
|
|
||||||
function _CreateStateDirsLocal {
|
function _CreateStateDirsLocal {
|
||||||
|
@ -2115,6 +2150,12 @@ function Init {
|
||||||
RSYNC_PATTERNS="$RSYNC_PATTERNS --exclude=\"$PARTIAL_DIR\""
|
RSYNC_PATTERNS="$RSYNC_PATTERNS --exclude=\"$PARTIAL_DIR\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$DELTA_COPIES" != "no" ]; then
|
||||||
|
RSYNC_ARGS=$RSYNC_ARGS" --no-whole-file"
|
||||||
|
else
|
||||||
|
RSYNC_ARGS=$RSYNC_ARGS" --whole-file"
|
||||||
|
fi
|
||||||
|
|
||||||
## Conflict options
|
## Conflict options
|
||||||
if [ "$CONFLICT_BACKUP" != "no" ]; then
|
if [ "$CONFLICT_BACKUP" != "no" ]; then
|
||||||
INITIATOR_BACKUP="--backup --backup-dir=\"$INITIATOR_BACKUP_DIR\""
|
INITIATOR_BACKUP="--backup --backup-dir=\"$INITIATOR_BACKUP_DIR\""
|
||||||
|
@ -2402,6 +2443,7 @@ opts="${opts# *}"
|
||||||
PreInit
|
PreInit
|
||||||
Init
|
Init
|
||||||
PostInit
|
PostInit
|
||||||
|
CheckCurrentConfig
|
||||||
GetRemoteOS
|
GetRemoteOS
|
||||||
InitRemoteOSSettings
|
InitRemoteOSSettings
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ PROGRAM="osync" # Rsync based two way sync engine with fault tolerance
|
||||||
AUTHOR="(L) 2013-2015 by Orsiris \"Ozy\" de Jong"
|
AUTHOR="(L) 2013-2015 by Orsiris \"Ozy\" de Jong"
|
||||||
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
||||||
PROGRAM_VERSION=1.1-pre
|
PROGRAM_VERSION=1.1-pre
|
||||||
PROGRAM_BUILD=2015112802
|
PROGRAM_BUILD=2015112803
|
||||||
IS_STABLE=no
|
IS_STABLE=no
|
||||||
|
|
||||||
source "./ofunctions.sh"
|
source "./ofunctions.sh"
|
||||||
|
@ -81,6 +81,41 @@ function CheckEnvironment {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function CheckCurrentConfig {
|
||||||
|
__CheckArguments 0 $# $FUNCNAME "$@" #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
|
if [ "$INSTANCE_ID" == "" ]; then
|
||||||
|
Logger "No INSTANCE_ID defined in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$INITIATOR_SYNC_DIR" == "" ]; then
|
||||||
|
Logger "No INITIATOR_SYNC_DIR set in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$TARGET_SYNC_DIR" == "" ]; then
|
||||||
|
Logger "Not TARGET_SYNC_DIR set in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check all variables that should contain "yes" or "no"
|
||||||
|
declare -a yes_no_vars=(CREATE_DIRS SUDO_EXEC SSH_COMPRESSION REMOTE_HOST_PING PRESERVE_ACL PRESERVE_XATTR COPY_SYMLINKS KEEP_DIRLINKS PRESERVE_HARDLINKS CHECKSUM RSYNC_COMPRESS CONFLICT_BACKUP CONFLICT_BACKUP_MULTIPLE SOFT_DELETE RESUME_SYNC FORCE_STRANGER_LOCK_RESUME PARTIAL DELTA_COPIES STOP_ON_CMD_ERROR)
|
||||||
|
for i in ${yes_no_vars[@]}; do
|
||||||
|
test="if [ \"\$$i\" != \"yes\" ] && [ \"\$$i\" != \"no\" ]; then Logger \"Bogus $i value defined in config file.\" \"CRITICAL\"; exit 1; fi"
|
||||||
|
eval "$test"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check all variables that should contain a numerical value >= 0
|
||||||
|
declare -a num_vars=(MINIMUM_SPACE BANDWIDTH SOFT_MAX_EXEC_TIME HARD_MAX_EXEC_TIME MIN_WAIT MAX_WAIT CONFLICT_BACKUP_DAYS SOFT_DELETE_DAYS RESUME_TRY)
|
||||||
|
for i in ${num_vars[@]}; do
|
||||||
|
test="if [ $(IsNumeric \"\$$i\") -eq 0 ]; then Logger \"Bogus $i value defined in config file.\" \"CRITICAL\"; exit 1; fi"
|
||||||
|
eval "$test"
|
||||||
|
done
|
||||||
|
|
||||||
|
#TODO-v2.1: Add runtime variable tests (RSYNC_ARGS etc)
|
||||||
|
}
|
||||||
|
|
||||||
###### Osync specific functions (non shared)
|
###### Osync specific functions (non shared)
|
||||||
|
|
||||||
function _CreateStateDirsLocal {
|
function _CreateStateDirsLocal {
|
||||||
|
@ -1227,6 +1262,12 @@ function Init {
|
||||||
RSYNC_PATTERNS="$RSYNC_PATTERNS --exclude=\"$PARTIAL_DIR\""
|
RSYNC_PATTERNS="$RSYNC_PATTERNS --exclude=\"$PARTIAL_DIR\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$DELTA_COPIES" != "no" ]; then
|
||||||
|
RSYNC_ARGS=$RSYNC_ARGS" --no-whole-file"
|
||||||
|
else
|
||||||
|
RSYNC_ARGS=$RSYNC_ARGS" --whole-file"
|
||||||
|
fi
|
||||||
|
|
||||||
## Conflict options
|
## Conflict options
|
||||||
if [ "$CONFLICT_BACKUP" != "no" ]; then
|
if [ "$CONFLICT_BACKUP" != "no" ]; then
|
||||||
INITIATOR_BACKUP="--backup --backup-dir=\"$INITIATOR_BACKUP_DIR\""
|
INITIATOR_BACKUP="--backup --backup-dir=\"$INITIATOR_BACKUP_DIR\""
|
||||||
|
@ -1514,6 +1555,7 @@ opts="${opts# *}"
|
||||||
PreInit
|
PreInit
|
||||||
Init
|
Init
|
||||||
PostInit
|
PostInit
|
||||||
|
CheckCurrentConfig
|
||||||
GetRemoteOS
|
GetRemoteOS
|
||||||
InitRemoteOSSettings
|
InitRemoteOSSettings
|
||||||
|
|
||||||
|
|
43
osync.sh
43
osync.sh
|
@ -4,7 +4,7 @@ PROGRAM="osync" # Rsync based two way sync engine with fault tolerance
|
||||||
AUTHOR="(L) 2013-2015 by Orsiris \"Ozy\" de Jong"
|
AUTHOR="(L) 2013-2015 by Orsiris \"Ozy\" de Jong"
|
||||||
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
||||||
PROGRAM_VERSION=1.1-pre
|
PROGRAM_VERSION=1.1-pre
|
||||||
PROGRAM_BUILD=2015112802
|
PROGRAM_BUILD=2015112803
|
||||||
IS_STABLE=no
|
IS_STABLE=no
|
||||||
|
|
||||||
FUNC_BUILD=2015111901
|
FUNC_BUILD=2015111901
|
||||||
|
@ -867,6 +867,40 @@ function CheckEnvironment {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function CheckCurrentConfig {
|
||||||
|
|
||||||
|
if [ "$INSTANCE_ID" == "" ]; then
|
||||||
|
Logger "No INSTANCE_ID defined in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$INITIATOR_SYNC_DIR" == "" ]; then
|
||||||
|
Logger "No INITIATOR_SYNC_DIR set in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$TARGET_SYNC_DIR" == "" ]; then
|
||||||
|
Logger "Not TARGET_SYNC_DIR set in config file." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check all variables that should contain "yes" or "no"
|
||||||
|
declare -a yes_no_vars=(CREATE_DIRS SUDO_EXEC SSH_COMPRESSION REMOTE_HOST_PING PRESERVE_ACL PRESERVE_XATTR COPY_SYMLINKS KEEP_DIRLINKS PRESERVE_HARDLINKS CHECKSUM RSYNC_COMPRESS CONFLICT_BACKUP CONFLICT_BACKUP_MULTIPLE SOFT_DELETE RESUME_SYNC FORCE_STRANGER_LOCK_RESUME PARTIAL DELTA_COPIES STOP_ON_CMD_ERROR)
|
||||||
|
for i in ${yes_no_vars[@]}; do
|
||||||
|
test="if [ \"\$$i\" != \"yes\" ] && [ \"\$$i\" != \"no\" ]; then Logger \"Bogus $i value defined in config file.\" \"CRITICAL\"; exit 1; fi"
|
||||||
|
eval "$test"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check all variables that should contain a numerical value >= 0
|
||||||
|
declare -a num_vars=(MINIMUM_SPACE BANDWIDTH SOFT_MAX_EXEC_TIME HARD_MAX_EXEC_TIME MIN_WAIT MAX_WAIT CONFLICT_BACKUP_DAYS SOFT_DELETE_DAYS RESUME_TRY)
|
||||||
|
for i in ${num_vars[@]}; do
|
||||||
|
test="if [ $(IsNumeric \"\$$i\") -eq 0 ]; then Logger \"Bogus $i value defined in config file.\" \"CRITICAL\"; exit 1; fi"
|
||||||
|
eval "$test"
|
||||||
|
done
|
||||||
|
|
||||||
|
#TODO-v2.1: Add runtime variable tests (RSYNC_ARGS etc)
|
||||||
|
}
|
||||||
|
|
||||||
###### Osync specific functions (non shared)
|
###### Osync specific functions (non shared)
|
||||||
|
|
||||||
function _CreateStateDirsLocal {
|
function _CreateStateDirsLocal {
|
||||||
|
@ -1981,6 +2015,12 @@ function Init {
|
||||||
RSYNC_PATTERNS="$RSYNC_PATTERNS --exclude=\"$PARTIAL_DIR\""
|
RSYNC_PATTERNS="$RSYNC_PATTERNS --exclude=\"$PARTIAL_DIR\""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$DELTA_COPIES" != "no" ]; then
|
||||||
|
RSYNC_ARGS=$RSYNC_ARGS" --no-whole-file"
|
||||||
|
else
|
||||||
|
RSYNC_ARGS=$RSYNC_ARGS" --whole-file"
|
||||||
|
fi
|
||||||
|
|
||||||
## Conflict options
|
## Conflict options
|
||||||
if [ "$CONFLICT_BACKUP" != "no" ]; then
|
if [ "$CONFLICT_BACKUP" != "no" ]; then
|
||||||
INITIATOR_BACKUP="--backup --backup-dir=\"$INITIATOR_BACKUP_DIR\""
|
INITIATOR_BACKUP="--backup --backup-dir=\"$INITIATOR_BACKUP_DIR\""
|
||||||
|
@ -2265,6 +2305,7 @@ opts="${opts# *}"
|
||||||
PreInit
|
PreInit
|
||||||
Init
|
Init
|
||||||
PostInit
|
PostInit
|
||||||
|
CheckCurrentConfig
|
||||||
GetRemoteOS
|
GetRemoteOS
|
||||||
InitRemoteOSSettings
|
InitRemoteOSSettings
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,9 @@ FORCE_STRANGER_LOCK_RESUME=no
|
||||||
## Keep partial uploads that can be resumed on next run, experimental feature
|
## Keep partial uploads that can be resumed on next run, experimental feature
|
||||||
PARTIAL=no
|
PARTIAL=no
|
||||||
|
|
||||||
|
## Use delta copy algortithm (usefull when local paths are network drives), defaults to yes
|
||||||
|
DELTA_COPIES=yes
|
||||||
|
|
||||||
## ---------- ALERT OPTIONS
|
## ---------- ALERT OPTIONS
|
||||||
|
|
||||||
## List of alert mails separated by spaces
|
## List of alert mails separated by spaces
|
||||||
|
|
Loading…
Reference in New Issue