367 lines
7.5 KiB
Bash
Executable File
367 lines
7.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Common environment variables
|
|
#
|
|
|
|
set_constants () {
|
|
MYNAME=`uname -n`
|
|
DATENOW=`date '+%Y%m%d-%H%M%S'`
|
|
|
|
BASE=
|
|
ZCBIN=${BASE}/zTools/zConfig/bin
|
|
ZCDOT=${BASE}/zTools/zConfig/dotfiles
|
|
ZCETC=${BASE}/zTools/zConfig/etc
|
|
ZCGNOME=${BASE}/zTools/zConfig/gnome
|
|
ZCKICK=${BASE}/zTools/zConfig/kick
|
|
ZCSYN=${BASE}/zTools/zConfig/syn
|
|
ZCAPPDIR=${BASE}/zTools/zGold/Apps/LinuxApps
|
|
ZPCETC=${BASE}/zTools/zPrivateConfig/etc
|
|
|
|
ZDOCKER=${BASE}/zTools/zDocker
|
|
|
|
APPDIR=${BASE}/zTools/zGold/Apps/LinuxApps
|
|
THIS_SCRIPT=`basename $0`
|
|
THIS_PATH=`dirname $0`
|
|
LOCK=/var/tmp/${THIS_SCRIPT}.lock
|
|
LOG=/var/tmp/${THIS_SCRIPT}.log
|
|
ERROR=/var/tmp/${THIS_SCRIPT}.error.$$
|
|
|
|
APP=${THIS_SCRIPT}
|
|
VERSION=
|
|
}
|
|
|
|
|
|
################### shared functions below
|
|
|
|
myip () {
|
|
MYEXTERNALIP=$(dig +short myip.opendns.com @resolver1.opendns.com)
|
|
MYFULLIP=$(ip route get 8.8.8.8 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}')
|
|
MYNETWORK=$(echo ${MYFULLIP}| cut -f1-3 -d.)
|
|
MYIP=$(echo ${MYFULLIP}| cut -f4 -d.)
|
|
echo "MYEXTERNALIP ${MYEXTERNALIP}"
|
|
echo "MYFULLIP ${MYFULLIP}"
|
|
echo "MYIP ${MYIP}"
|
|
echo -e "MYNETWORK ${MYNETWORK}\n"
|
|
export MYFULLIP MYNETWORK MYIP MYEXTERNALIP
|
|
}
|
|
|
|
check_rsync () {
|
|
if [ -f /bin/rsync ]
|
|
then
|
|
RSYNC=/bin/rsync
|
|
fi
|
|
|
|
if [ -f /usr/bin/rsync ]
|
|
then
|
|
RSYNC=/usr/bin/rsync
|
|
else
|
|
echo "No rsync present"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_keystore () {
|
|
if [ ! -d ${KEYSTORE} ]
|
|
then
|
|
mkdir -p ${KEYSTORE}
|
|
fi
|
|
}
|
|
|
|
check_gitkey () {
|
|
if [ ! -f ${GITKEY} ]
|
|
then
|
|
ssh-keygen -o -a 100 -t ed25519 -f ${GITKEY} -N "" -C git@${MYNAME}
|
|
fi
|
|
}
|
|
|
|
check_rsynckey () {
|
|
if [ ! -f ${RSYNCKEY} ]
|
|
then
|
|
ssh-keygen -o -a 100 -t ed25519 -f ${RSYNCKEY} -N "" -C rsync@${MYNAME}
|
|
cp -p ${RSYNCKEY}.pub ${KEYSTORE}/_r${MYNAME}.pub
|
|
fi
|
|
}
|
|
|
|
##
|
|
##
|
|
##
|
|
##
|
|
##
|
|
##
|
|
|
|
check_lock () {
|
|
echo -e "\n\n--------SCRIPT $0 starting"
|
|
|
|
FAILUREVALUE=600
|
|
DATENOW=$(date +'%s')
|
|
DATEFAILED=$((${DATENOW} - ${FAILUREVALUE}))
|
|
|
|
if [ -f $LOCK ]
|
|
then
|
|
. $LOCK
|
|
# if script has no date for some reason then use DATEFAILED and reset eveyrthing
|
|
SCRIPTDATE="${SCRIPTDATE:-$DATEFAILED}"
|
|
EXPIRED=$(($DATENOW - $SCRIPTDATE))
|
|
|
|
echo " EXPIRED: $EXPIRED SCRIPTDATE:$SCRIPTDATE DATENOW: $DATENOW DATEFAILED:$DATEFAILED"
|
|
if [ $EXPIRED -gt ${FAILUREVALUE} ]
|
|
then
|
|
rm -f $LOCK ; rm -f $LOCK
|
|
echo "Cleared ${LOCK} for ${MYNAME} "
|
|
killall ${THIS_SCRIPT}; killall ${THIS_SCRIPT}; killall ${THIS_SCRIPT}; killall ${THIS_SCRIPT}; killall ${THIS_SCRIPT}; killall ${THIS_SCRIPT};
|
|
exit 1
|
|
else
|
|
echo "still ${THIS_SCRIPT} running on ${MYNAME} "
|
|
echo "The lock file is ${LOCK}"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "SCRIPTDATE=`date +'%s'`" > ${LOCK}
|
|
fi
|
|
}
|
|
|
|
rsync_pull_without_key () {
|
|
echo "PORT to be used ${PORT}"
|
|
|
|
case ${MYNAME} in
|
|
FIRE6666| KHS666| FIRE660 | FIRE661 | FIRE662 | FIRE663)
|
|
${RSYNC} -aq --progress --port=${PORT} --contimeout=2 --delete-after --delete-excluded \
|
|
--exclude="@*" \
|
|
--exclude=".stversions" \
|
|
--exclude="*AppImage*" \
|
|
--exclude="*appimage*" \
|
|
--exclude="CCTV*" \
|
|
--exclude="*Citrix*" \
|
|
--exclude="*WinApps*" \
|
|
--exclude="*wordpress*" \
|
|
--exclude="*GOLDVirtuals*" \
|
|
$SOURCE::${RSYNCSOURCE} ${RSYNCDEST}
|
|
;;
|
|
*)
|
|
${RSYNC} -aq --progress --port=${PORT} --contimeout=2 --delete-after --delete-excluded \
|
|
--exclude="@*" \
|
|
--exclude=".stversions" \
|
|
--exclude="CCTV*" \
|
|
--exclude="*Citrix*" \
|
|
--exclude="*WinApps*" \
|
|
--exclude="*wordpress*" \
|
|
$SOURCE::${RSYNCSOURCE} ${RSYNCDEST}
|
|
;;
|
|
esac
|
|
|
|
if [ $? = 0 ]
|
|
then
|
|
echo "rsync was success"
|
|
chmod 4755 ${ZCBIN}/.specialOn
|
|
chmod 4755 ${ZCBIN}/.specialOff
|
|
rm -rf /root/.sshkeys
|
|
fix_cron
|
|
rm ${LOCK}
|
|
break 2
|
|
fi
|
|
}
|
|
|
|
rsync_pull_with_key () {
|
|
echo "RARGS to be used ${RARGS} and port ${PORT}"
|
|
|
|
case ${MYNAME} in
|
|
FIRE6666| KHS666| FIRE660 | FIRE661 | FIRE662 | FIRE663)
|
|
${RSYNC} -aq --progress -e "$RARGS" --port=${PORT} --delete-after --delete-excluded \
|
|
--exclude="@*" \
|
|
--exclude=".stversions" \
|
|
--exclude="*AppImage*" \
|
|
--exclude="*appimage*" \
|
|
--exclude="CCTV*" \
|
|
--exclude="*Citrix*" \
|
|
--exclude="*WinApps*" \
|
|
--exclude="*wordpress*" \
|
|
--exclude="*GOLDVirtuals*" \
|
|
$SOURCE::${RSYNCSOURCE} ${RSYNCDEST}
|
|
;;
|
|
*)
|
|
${RSYNC} ${RSYNC_OPTS} -e "$RARGS" --port=${PORT} \
|
|
--exclude="@*" \
|
|
--exclude=".stversions" \
|
|
--exclude="CCTV*" \
|
|
--exclude="*Citrix*" \
|
|
--exclude="*WinApps*" \
|
|
--exclude="*wordpress*" \
|
|
$SOURCE::${RSYNCSOURCE} ${RSYNCDEST}
|
|
;;
|
|
esac
|
|
|
|
if [ $? = 0 ]
|
|
then
|
|
echo "rsync was success"
|
|
chmod 4755 ${ZCBIN}/.specialOn
|
|
chmod 4755 ${ZCBIN}/.specialOff
|
|
rm -rf /root/.sshkeys
|
|
fix_cron
|
|
rm ${LOCK}
|
|
break 2
|
|
fi
|
|
}
|
|
|
|
fix_cron () {
|
|
chmod -R 755 ${RSYNCDEST}
|
|
chown -R root:root ${RSYNCDEST}
|
|
|
|
if [ -f /etc/os-release ]
|
|
then
|
|
. /etc/os-release
|
|
fi
|
|
|
|
case ${ID} in
|
|
alpine | debian | ubuntu)
|
|
echo "OS found is ${ID}"
|
|
if [ -s ${ZPCETC}/crontabs/DEBcrontab ]
|
|
then
|
|
su root -c "crontab -u root ${ZPCETC}/crontabs/DEBcrontab"
|
|
fi
|
|
;;
|
|
centos | fedora)
|
|
echo "OS found is ${ID}"
|
|
if [ -s ${ZPCETC}/crontabs/GOLDcrontab ]
|
|
then
|
|
su root -c "crontab -u root ${ZPCETC}/crontabs/GOLDcrontab"
|
|
fi
|
|
;;
|
|
*)
|
|
echo "OS NOT RECOGNISED"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
|
|
######
|
|
# Main script below
|
|
#####
|
|
KEYSTORE=~/.mykeys
|
|
GITKEY=${KEYSTORE}/github
|
|
RSYNCKEY=${KEYSTORE}/rsync
|
|
BASTIONKEY=${KEYSTORE}/bastion
|
|
STATIC=/static
|
|
|
|
set_constants
|
|
check_rsync
|
|
check_keystore
|
|
check_gitkey
|
|
check_rsynckey
|
|
check_lock
|
|
|
|
#####
|
|
# custom code
|
|
#####
|
|
ZGOLD=/zz/zGold
|
|
ZCONFIG=/zTools/zConfig
|
|
ZANSIBLE=/zTools/zAnsible
|
|
ZWINDOWSSHARE=/zTools/zWindowsShare
|
|
ZUSERCONFIG=/zTools/zUserConfig
|
|
ZPRIVATECONFIG=/zTools/zPrivateConfig
|
|
ZSHARED=/zTools/zShared
|
|
|
|
case $1 in
|
|
gold)
|
|
RSYNCSOURCE="public"
|
|
RSYNCDEST=${ZGOLD}
|
|
if [ ! -d ${ZGOLD} ]
|
|
then
|
|
mkdir -p ${ZGOLD}
|
|
fi
|
|
;;
|
|
windows)
|
|
RSYNCSOURCE="mywindowsshare"
|
|
RSYNCDEST=${ZWINDOWSSHARE}
|
|
if [ ! -d ${ZWINDOWSSHARE} ]
|
|
then
|
|
mkdir -p ${ZWINDOWSSHARE}
|
|
fi
|
|
;;
|
|
ansible)
|
|
RSYNCSOURCE="myansible"
|
|
RSYNCDEST=${ZANSIBLE}
|
|
if [ ! -d ${ZANSIBLE} ]
|
|
then
|
|
mkdir -p ${ZANSIBLE}
|
|
fi
|
|
;;
|
|
userconfig)
|
|
RSYNCSOURCE="myuserconfig"
|
|
RSYNCDEST=${ZUSERCONFIG}
|
|
if [ ! -d ${ZUSERCONFIG} ]
|
|
then
|
|
mkdir -p ${ZUSERCONFIG}
|
|
fi
|
|
;;
|
|
privateconfig)
|
|
RSYNCSOURCE="myprivateconfig"
|
|
RSYNCDEST=${ZPRIVATECONFIG}
|
|
if [ ! -d ${ZPRIVATECONFIG} ]
|
|
then
|
|
mkdir -p ${ZPRIVATECONFIG}
|
|
fi
|
|
;;
|
|
zshared)
|
|
RSYNCSOURCE="myzshared"
|
|
RSYNCDEST=${ZSHARED}
|
|
if [ ! -d ${ZSHARED} ]
|
|
then
|
|
mkdir -p ${ZSHARED}
|
|
fi
|
|
;;
|
|
myconfig)
|
|
RSYNCSOURCE="myconfig"
|
|
RSYNCDEST=${ZCONFIG}
|
|
if [ ! -d ${ZCONFIG} ]
|
|
then
|
|
mkdir -p ${ZCONFIG}
|
|
fi
|
|
;;
|
|
*)
|
|
RSYNCSOURCE="public"
|
|
RSYNCDEST=${ZGOLD}
|
|
if [ ! -d ${ZGOLD} ]
|
|
then
|
|
mkdir -p ${ZGOLD}
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if [ -s /root/.cpullenv ]
|
|
then
|
|
. /root/.cpullenv
|
|
else
|
|
echo "UPDATE the file /root/.cpullenv"
|
|
echo "DESTINATIONS="xxxxxxxxxxxxx yyyy"" > /root/.cpullenv
|
|
echo "RSYNC_PORT=" >> /root/.cpullenv
|
|
echo "SSH_PORT=" >> /root/.cpullenv
|
|
echo "SSH_USER" >> /root/.cpullenv
|
|
exit 1
|
|
fi
|
|
|
|
cd ${RSYNCDEST}
|
|
for i in $DESTINATIONS
|
|
do
|
|
echo "\n\n------------------------ Trying $i"
|
|
SOURCE=$i
|
|
USER=${SSH_USER}
|
|
|
|
# PORT=${RSYNC_PORT}
|
|
# RSYNC_OPTS="-aqP --progress --delete-after --delete-excluded --contimeout=2"
|
|
# echo "\n*********** Trying ${i} withOUT key on ${PORT} and ${USER} for ${RSYNCDEST} ******"
|
|
# rsync_pull_without_key
|
|
|
|
PORT=${SSH_PORT}
|
|
RARGS="ssh -i ${RSYNCKEY} -p${PORT} -l ${USER} -o ConnectTimeout=5 -o CheckHostIP=no -o StrictHostKeyChecking=no"
|
|
RSYNC_OPTS="-aqP --progress --delete-after --delete-excluded"
|
|
echo "\n*********** Trying ${i} with key on ${PORT} and ${USER} for ${RSYNCDEST} ******"
|
|
rsync_pull_with_key
|
|
done
|
|
|
|
|
|
|
|
|
|
#####
|
|
rm ${LOCK}
|
|
exit 0
|