mirror of
https://github.com/namibia/demo-sync.git
synced 2024-11-21 19:15:10 +00:00
Formatted the code layout.
This commit is contained in:
parent
7a5bd86dea
commit
228020f584
173
sync.sh
173
sync.sh
@ -13,12 +13,30 @@
|
||||
##############################################################
|
||||
############## CHECK ##########
|
||||
##############################################################
|
||||
command -v rsync >/dev/null 2>&1 || { echo >&2 "We require rsync for this script to run, but it's not installed. Aborting."; exit 1; }
|
||||
command -v crontab >/dev/null 2>&1 || { echo >&2 "We require crontab for this script to run, but it's not installed. Aborting."; exit 1; }
|
||||
command -v md5sum >/dev/null 2>&1 || { echo >&2 "We require md5sum for this script to run, but it's not installed. Aborting."; exit 1; }
|
||||
command -v awk >/dev/null 2>&1 || { echo >&2 "We require awk for this script to run, but it's not installed. Aborting."; exit 1; }
|
||||
command -v realpath >/dev/null 2>&1 || { echo >&2 "We require realpath for this script to run, but it's not installed. Aborting."; exit 1; }
|
||||
command -v stat >/dev/null 2>&1 || { echo >&2 "We require stat for this script to run, but it's not installed. Aborting."; exit 1; }
|
||||
command -v rsync >/dev/null 2>&1 || {
|
||||
echo >&2 "We require rsync for this script to run, but it's not installed. Aborting."
|
||||
exit 1
|
||||
}
|
||||
command -v crontab >/dev/null 2>&1 || {
|
||||
echo >&2 "We require crontab for this script to run, but it's not installed. Aborting."
|
||||
exit 1
|
||||
}
|
||||
command -v md5sum >/dev/null 2>&1 || {
|
||||
echo >&2 "We require md5sum for this script to run, but it's not installed. Aborting."
|
||||
exit 1
|
||||
}
|
||||
command -v awk >/dev/null 2>&1 || {
|
||||
echo >&2 "We require awk for this script to run, but it's not installed. Aborting."
|
||||
exit 1
|
||||
}
|
||||
command -v realpath >/dev/null 2>&1 || {
|
||||
echo >&2 "We require realpath for this script to run, but it's not installed. Aborting."
|
||||
exit 1
|
||||
}
|
||||
command -v stat >/dev/null 2>&1 || {
|
||||
echo >&2 "We require stat for this script to run, but it's not installed. Aborting."
|
||||
exit 1
|
||||
}
|
||||
|
||||
############################ GLOBAL ##########################
|
||||
ACTION="sync"
|
||||
@ -39,7 +57,7 @@ REPOURL="https://raw.githubusercontent.com/${OWNER}/${REPONAME}/master/"
|
||||
############## DEFAULTS ##########
|
||||
############## ##########
|
||||
##############################################################
|
||||
Datetimenow=$(TZ=":ZULU" date +"%m/%d/%Y @ %R (UTC)" )
|
||||
Datetimenow=$(TZ=":ZULU" date +"%m/%d/%Y @ %R (UTC)")
|
||||
SCRIPTURL="${REPOURL}$ACTION.sh"
|
||||
ACTIVEUSER=$(whoami)
|
||||
HOMEPATH=~/
|
||||
@ -56,7 +74,7 @@ CRONPATH="${BASEPATH}.cron"
|
||||
############## MAIN ##########
|
||||
############## ##########
|
||||
##############################################################
|
||||
function main () {
|
||||
function main() {
|
||||
## set time for this run
|
||||
echoTweak "$ACTION on $Datetimenow"
|
||||
echo "started"
|
||||
@ -73,7 +91,7 @@ function main () {
|
||||
}
|
||||
|
||||
### MAIN SETUP ###
|
||||
function runSetup () {
|
||||
function runSetup() {
|
||||
# check if already set
|
||||
if [ ! -f "$2" ]; then
|
||||
# if setup database
|
||||
@ -87,7 +105,7 @@ function runSetup () {
|
||||
}
|
||||
|
||||
### MAIN SYNC ###
|
||||
function runSync () {
|
||||
function runSync() {
|
||||
# check if already set
|
||||
if [ -f "$2" ]; then
|
||||
# if setup database
|
||||
@ -107,13 +125,13 @@ function runSync () {
|
||||
##############################################################
|
||||
|
||||
# little repeater
|
||||
function repeat () {
|
||||
head -c $1 < /dev/zero | tr '\0' $2
|
||||
function repeat() {
|
||||
head -c $1 </dev/zero | tr '\0' $2
|
||||
}
|
||||
|
||||
# simple basic random
|
||||
function getRandom () {
|
||||
echo $(tr -dc 'A-HJ-NP-Za-km-z2-9' < /dev/urandom | dd bs=5 count=1 status=none)
|
||||
function getRandom() {
|
||||
echo $(tr -dc 'A-HJ-NP-Za-km-z2-9' </dev/urandom | dd bs=5 count=1 status=none)
|
||||
}
|
||||
|
||||
# md5 strings
|
||||
@ -122,26 +140,24 @@ function setMD5() {
|
||||
}
|
||||
|
||||
# little echo tweak
|
||||
function echoTweak () {
|
||||
function echoTweak() {
|
||||
echoMessage="$1"
|
||||
mainlen="$2"
|
||||
characters="$3"
|
||||
if [ $# -lt 2 ]
|
||||
then
|
||||
if [ $# -lt 2 ]; then
|
||||
mainlen=60
|
||||
fi
|
||||
if [ $# -lt 3 ]
|
||||
then
|
||||
if [ $# -lt 3 ]; then
|
||||
characters='\056'
|
||||
fi
|
||||
chrlen="${#echoMessage}"
|
||||
increaseBy=$((mainlen-chrlen))
|
||||
increaseBy=$((mainlen - chrlen))
|
||||
tweaked=$(repeat "$increaseBy" "$characters")
|
||||
echo -n "$echoMessage$tweaked"
|
||||
}
|
||||
|
||||
# Set cronjob without removing existing
|
||||
function setCron () {
|
||||
function setCron() {
|
||||
if [ ! -f "${CRONPATH}" ]; then
|
||||
echo ""
|
||||
echo -ne "\n Would you like set the cronjob now? [y/N]: "
|
||||
@ -149,16 +165,16 @@ function setCron () {
|
||||
if [[ $answer == "y" ]]; then
|
||||
# check if user crontab is set
|
||||
currentCron=$(crontab -u $CLIENTUSER -l 2>/dev/null)
|
||||
if [[ -z "${currentCron// }" ]]; then
|
||||
if [[ -z "${currentCron// /}" ]]; then
|
||||
currentCron="# SYNC WEBSITES crontab settings"
|
||||
echo "$currentCron" > "${CRONPATH}"
|
||||
echo "$currentCron" >"${CRONPATH}"
|
||||
else
|
||||
echo "$currentCron" > "${CRONPATH}"
|
||||
echo "$currentCron" >"${CRONPATH}"
|
||||
fi
|
||||
# check if the MAILTO is already set
|
||||
if [[ $currentCron != *"MAILTO"* ]]; then
|
||||
echo "MAILTO=\"\"" >> "${CRONPATH}"
|
||||
echo "" >> "${CRONPATH}"
|
||||
echo "MAILTO=\"\"" >>"${CRONPATH}"
|
||||
echo "" >>"${CRONPATH}"
|
||||
fi
|
||||
# get the Source Database IP/Domain
|
||||
echo -e "\n ################################################################################################"
|
||||
@ -168,7 +184,7 @@ function setCron () {
|
||||
read -e -p " ## Example (0 4 * * *): " -i "0 4 * * *" INPUT_CRON_CICLE
|
||||
# check if the @reboot curl -s $SCRIPTURL | sudo bash is already set
|
||||
if [[ $currentCron != *"${INPUT_CRON_CICLE} curl -s $SCRIPTURL | bash"* ]]; then
|
||||
echo "${INPUT_CRON_CICLE} curl -s $SCRIPTURL | bash" >> "${CRONPATH}"
|
||||
echo "${INPUT_CRON_CICLE} curl -s $SCRIPTURL | bash" >>"${CRONPATH}"
|
||||
fi
|
||||
# set the user cron
|
||||
crontab -u $ACTIVEUSER "${CRONPATH}"
|
||||
@ -177,17 +193,17 @@ function setCron () {
|
||||
else
|
||||
# to avoid asking again
|
||||
echo "See ${CRONPATH} for more details!"
|
||||
echo '# Do not remove this file!' > "${CRONPATH}"
|
||||
echo '# Please set your cronjob manually, with the following details' >> "${CRONPATH}"
|
||||
echo "# 0 4 * * * curl -s $SCRIPTURL | bash" >> "${CRONPATH}"
|
||||
echo '# Do not remove this file!' >"${CRONPATH}"
|
||||
echo '# Please set your cronjob manually, with the following details' >>"${CRONPATH}"
|
||||
echo "# 0 4 * * * curl -s $SCRIPTURL | bash" >>"${CRONPATH}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
### setup sync databases file ###
|
||||
function getSyncDBs () {
|
||||
function getSyncDBs() {
|
||||
# start building the database details
|
||||
echo "# SOURCE_DBSERVER SOURCE_DATABASE SOURCE_USER SOURCE_PASS TARGET_DBSERVER TARGET_DATABASE TARGET_USER TARGET_PASS" > "$1"
|
||||
echo "# SOURCE_DBSERVER SOURCE_DATABASE SOURCE_USER SOURCE_PASS TARGET_DBSERVER TARGET_DATABASE TARGET_USER TARGET_PASS" >"$1"
|
||||
# default it no to run setup
|
||||
GETTING=0
|
||||
echo ""
|
||||
@ -200,14 +216,13 @@ function getSyncDBs () {
|
||||
GETTING=1
|
||||
fi
|
||||
# start setup
|
||||
while [ "$GETTING" -eq "1" ]
|
||||
do
|
||||
while [ "$GETTING" -eq "1" ]; do
|
||||
# get the Source Database IP/Domain
|
||||
echo -ne "\n Set the Source Database IP/Domain\n"
|
||||
read -e -p " # Example (127.0.0.1 | localhost): " -i "127.0.0.1" INPUT_SOURCE_DBSERVER
|
||||
# check that we have a string
|
||||
if [ ! ${#INPUT_SOURCE_DBSERVER} -ge 2 ]; then
|
||||
echo -ne "\n YOU MUST ADD A SOURCE DATABASE IP/DOMAIN!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A SOURCE DATABASE IP/DOMAIN!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -219,7 +234,7 @@ function getSyncDBs () {
|
||||
read -r INPUT_SOURCE_DATABASE
|
||||
# check that we have a string
|
||||
if [ ! ${#INPUT_SOURCE_DATABASE} -ge 2 ]; then
|
||||
echo -ne "\n YOU MUST ADD A SOURCE DATABASE NAME!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A SOURCE DATABASE NAME!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -231,7 +246,7 @@ function getSyncDBs () {
|
||||
read -r INPUT_SOURCE_USER
|
||||
# check that we have a string
|
||||
if [ ! ${#INPUT_SOURCE_USER} -ge 2 ]; then
|
||||
echo -ne "\n YOU MUST ADD A SOURCE DATABASE USER NAME!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A SOURCE DATABASE USER NAME!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -243,7 +258,7 @@ function getSyncDBs () {
|
||||
read -s INPUT_SOURCE_PASSWORD
|
||||
# check that we have a string
|
||||
if [ ! ${#INPUT_SOURCE_PASSWORD} -ge 2 ]; then
|
||||
echo -ne "\n YOU MUST ADD A SOURCE DATABASE USER PASSWORD!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A SOURCE DATABASE USER PASSWORD!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -254,7 +269,7 @@ function getSyncDBs () {
|
||||
read -e -p " # Example (127.0.0.1 | localhost): " -i "127.0.0.1" INPUT_TARGET_DBSERVER
|
||||
# check that we have a string
|
||||
if [ ! ${#INPUT_TARGET_DBSERVER} -ge 2 ]; then
|
||||
echo -ne "\n YOU MUST ADD A TARGET DATABASE IP/DOMAIN!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A TARGET DATABASE IP/DOMAIN!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -266,7 +281,7 @@ function getSyncDBs () {
|
||||
read -r INPUT_TARGET_DATABASE
|
||||
# check that we have a string
|
||||
if [ ! ${#INPUT_TARGET_DATABASE} -ge 2 ]; then
|
||||
echo -ne "\n YOU MUST ADD A TARGET DATABASE NAME!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A TARGET DATABASE NAME!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -278,7 +293,7 @@ function getSyncDBs () {
|
||||
read -r INPUT_TARGET_USER
|
||||
# check that we have a string
|
||||
if [ ! ${#INPUT_TARGET_USER} -ge 2 ]; then
|
||||
echo -ne "\n YOU MUST ADD A TARGET DATABASE USER NAME!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A TARGET DATABASE USER NAME!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -290,14 +305,14 @@ function getSyncDBs () {
|
||||
read -s INPUT_TARGET_PASSWORD
|
||||
# check that we have a string
|
||||
if [ ! ${#INPUT_TARGET_PASSWORD} -ge 2 ]; then
|
||||
echo -ne "\n YOU MUST ADD A TARGET DATABASE USER PASSWORD!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A TARGET DATABASE USER PASSWORD!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
exit 1
|
||||
fi
|
||||
# add to the file
|
||||
echo "${INPUT_SOURCE_DBSERVER} ${INPUT_SOURCE_DATABASE} ${INPUT_SOURCE_USER} ${INPUT_SOURCE_PASSWORD} ${INPUT_TARGET_DBSERVER} ${INPUT_TARGET_DATABASE} ${INPUT_TARGET_USER} ${INPUT_TARGET_PASSWORD}" >> "$1"
|
||||
echo "${INPUT_SOURCE_DBSERVER} ${INPUT_SOURCE_DATABASE} ${INPUT_SOURCE_USER} ${INPUT_SOURCE_PASSWORD} ${INPUT_TARGET_DBSERVER} ${INPUT_TARGET_DATABASE} ${INPUT_TARGET_USER} ${INPUT_TARGET_PASSWORD}" >>"$1"
|
||||
# check if another should be added
|
||||
echo ""
|
||||
echo -ne "\n Would you like to add another set of sync databases? [y/N]: "
|
||||
@ -310,9 +325,9 @@ function getSyncDBs () {
|
||||
}
|
||||
|
||||
### setup sync folders file ###
|
||||
function getSyncFolders () {
|
||||
function getSyncFolders() {
|
||||
# start building the website folder details
|
||||
echo "# SOURCE_PATH TARGET_PATH" > "$1"
|
||||
echo "# SOURCE_PATH TARGET_PATH" >"$1"
|
||||
# default it no to run setup
|
||||
GETTING=0
|
||||
echo ""
|
||||
@ -325,15 +340,14 @@ function getSyncFolders () {
|
||||
GETTING=1
|
||||
fi
|
||||
# start setup
|
||||
while [ "$GETTING" -eq "1" ]
|
||||
do
|
||||
while [ "$GETTING" -eq "1" ]; do
|
||||
# get source folder path path
|
||||
echo -ne "\n Set the Source Folder Path\n"
|
||||
echo -ne " # Example (/home/username_a/): "
|
||||
read -r INPUT_SOURCE_PATH
|
||||
# check that we have a source path
|
||||
if [ ! -d "$INPUT_SOURCE_PATH" ]; then
|
||||
echo -ne "\n YOU MUST ADD A SOURCE PATH!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A SOURCE PATH!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -345,7 +359,7 @@ function getSyncFolders () {
|
||||
read -r INPUT_TARGET_PATH
|
||||
# check that we have a target path
|
||||
if [ ! -d "$INPUT_TARGET_PATH" ]; then
|
||||
echo -ne "\n YOU MUST ADD A TARGET PATH!\n\n" ;
|
||||
echo -ne "\n YOU MUST ADD A TARGET PATH!\n\n"
|
||||
# remove the file
|
||||
rm "$1"
|
||||
# start again
|
||||
@ -355,7 +369,7 @@ function getSyncFolders () {
|
||||
source_folder=$(realpath -s "${INPUT_SOURCE_PATH}")
|
||||
target_folder=$(realpath -s "${INPUT_TARGET_PATH}")
|
||||
# add to the file
|
||||
echo "${source_folder} ${target_folder}" >> "$1"
|
||||
echo "${source_folder} ${target_folder}" >>"$1"
|
||||
# get hash
|
||||
HASH=$(setMD5 "${source_folder}${target_folder}")
|
||||
# check if exclusion is needed
|
||||
@ -372,7 +386,7 @@ function getSyncFolders () {
|
||||
}
|
||||
|
||||
### setup sync folders file ###
|
||||
function getExcluded () {
|
||||
function getExcluded() {
|
||||
# default it no to run setup
|
||||
GETTING=0
|
||||
echo ""
|
||||
@ -385,14 +399,13 @@ function getExcluded () {
|
||||
GETTING=1
|
||||
fi
|
||||
# start setup
|
||||
while [ "$GETTING" -eq "1" ]
|
||||
do
|
||||
while [ "$GETTING" -eq "1" ]; do
|
||||
# get source folder path path
|
||||
echo -ne "\n Add file or folder to exclude\n"
|
||||
echo -ne " # Example (configuration.php or administrator/*): "
|
||||
read -r INPUT_EXCLUDE
|
||||
# add to file
|
||||
echo "${INPUT_EXCLUDE}" >> "$1"
|
||||
echo "${INPUT_EXCLUDE}" >>"$1"
|
||||
# check if another should be added
|
||||
echo ""
|
||||
echo -ne "\n Would you like to add another exclusion? [y/N]: "
|
||||
@ -405,17 +418,16 @@ function getExcluded () {
|
||||
}
|
||||
|
||||
### sync databases ###
|
||||
function syncDBs (){
|
||||
while IFS=$'\t' read -r -a databases
|
||||
do
|
||||
function syncDBs() {
|
||||
while IFS=$'\t' read -r -a databases; do
|
||||
[[ "$databases" =~ ^#.*$ ]] && continue
|
||||
# SOURCE_DBSERVER SOURCE_DATABASE SOURCE_USER SOURCE_PASS TARGET_DBSERVER TARGET_DATABASE TARGET_USER TARGET_PASS
|
||||
syncDB "${databases[0]}" "${databases[1]}" "${databases[2]}" "${databases[3]}" "${databases[4]}" "${databases[5]}" "${databases[6]}" "${databases[7]}"
|
||||
done < $1
|
||||
done <$1
|
||||
}
|
||||
|
||||
### sync database ###
|
||||
function syncDB (){
|
||||
function syncDB() {
|
||||
# give the user log data
|
||||
echoTweak "Syncing databases of [$2] with [$6]..."
|
||||
# local source_server="$1"
|
||||
@ -427,7 +439,7 @@ function syncDB (){
|
||||
# local target_user="$7"
|
||||
# local target_pass="$8"
|
||||
# move tables from one database to the other
|
||||
mysqldump --opt -q --host="$1" --user="$3" --password="$4" "$2" | \
|
||||
mysqldump --opt -q --host="$1" --user="$3" --password="$4" "$2" |
|
||||
mysql --host="$5" --user="$7" --password="$8" -C "$6"
|
||||
# we may want to look at passing the password more securly (TODO)
|
||||
# done :)
|
||||
@ -435,17 +447,16 @@ function syncDB (){
|
||||
}
|
||||
|
||||
### sync folders ###
|
||||
function syncFolders (){
|
||||
while IFS=$'\t' read -r -a folders
|
||||
do
|
||||
function syncFolders() {
|
||||
while IFS=$'\t' read -r -a folders; do
|
||||
[[ "$folders" =~ ^#.*$ ]] && continue
|
||||
# SOURCE_PATH TARGET_PATH
|
||||
syncFolder "${folders[0]}" "${folders[1]}"
|
||||
done < $1
|
||||
done <$1
|
||||
}
|
||||
|
||||
### sync folder ###
|
||||
function syncFolder (){
|
||||
function syncFolder() {
|
||||
local source_folder="$1"
|
||||
local target_folder="$2"
|
||||
# get the owners
|
||||
@ -461,13 +472,13 @@ function syncFolder (){
|
||||
# local exclude=''
|
||||
if [ -f "${EXCLUDEPATH}${HASH}" ]; then
|
||||
|
||||
##########################################################################
|
||||
# I tried doing this exclude with rsync but it just does not work (TODO)
|
||||
# while IFS= read -r line; do
|
||||
# exclude+=" --exclude '${line}'"
|
||||
# done < "${EXCLUDEPATH}${HASH}"
|
||||
# IF YOU CAN HELP LET ME KNOW
|
||||
#########################################################################
|
||||
##########################################################################
|
||||
# I tried doing this exclude with rsync but it just does not work (TODO)
|
||||
# while IFS= read -r line; do
|
||||
# exclude+=" --exclude '${line}'"
|
||||
# done < "${EXCLUDEPATH}${HASH}"
|
||||
# IF YOU CAN HELP LET ME KNOW
|
||||
#########################################################################
|
||||
|
||||
# make tmp dir
|
||||
mkdir "$tmpPath"
|
||||
@ -477,15 +488,15 @@ function syncFolder (){
|
||||
# we use rsync to do all the sync work (very smart)
|
||||
rsync -qrd --delete "${source_folder}/" "${target_folder}"
|
||||
|
||||
##########################################################################
|
||||
# I tried doing this exclude with rsync but it just does not work (TODO)
|
||||
# if [ ! ${#exclude} -ge 2 ]; then
|
||||
# rsync -qrd --delete "${source_folder}/" "${target_folder}"
|
||||
# else
|
||||
# rsync -qrd $exclude --delete "${source_folder}/" "${target_folder}"
|
||||
# fi
|
||||
# IF YOU CAN HELP LET ME KNOW
|
||||
#########################################################################
|
||||
##########################################################################
|
||||
# I tried doing this exclude with rsync but it just does not work (TODO)
|
||||
# if [ ! ${#exclude} -ge 2 ]; then
|
||||
# rsync -qrd --delete "${source_folder}/" "${target_folder}"
|
||||
# else
|
||||
# rsync -qrd $exclude --delete "${source_folder}/" "${target_folder}"
|
||||
# fi
|
||||
# IF YOU CAN HELP LET ME KNOW
|
||||
#########################################################################
|
||||
|
||||
# move the files back
|
||||
if [ -f "${EXCLUDEPATH}${HASH}" ]; then
|
||||
|
Loading…
Reference in New Issue
Block a user