#!/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_bastionkey () { if [ ! -f ${BASTIONKEY} ] then ssh-keygen -o -a 100 -t ed25519 -f ${BASTIONKEY} -N "" -C bastion@${NAME} cp -p ${BASTIONKEY}.pub ${KEYSTORE}/_b${NAME}.pub cp -p ${BASTIONKEY}.pub ${KEYSTORE}/_d${NAME}.pub fi } check_gitkey () { if [ ! -f ${GITKEY} ] then ssh-keygen -o -a 100 -t ed25519 -f ${GITKEY} -N "" -C git@${NAME} fi } check_rsynckey () { if [ ! -f ${RSYNCKEY} ] then ssh-keygen -o -a 100 -t ed25519 -f ${RSYNCKEY} -N "" -C rsync@${NAME} cp -p ${RSYNCKEY}.pub ${KEYSTORE}/_r${NAME}.pub fi } check_vibblerkey () { if [ ! -f ${VIBBLERKEY} ] then ssh-keygen -o -a 100 -t ed25519 -f ${VIBBLERKEY} -N "" -C vibbler@${NAME} cp -p ${VIBBLERKEY}.pub ${KEYSTORE}/_v${NAME}.pub fi } check_key () { if [ ! -f ${KEYSTORE}/${KEYNAME} ] then ssh-keygen -o -a 100 -t ed25519 -f ${KEYSTORE}/${KEYNAME} -N "" -C ${KEYNAME}@${MACHINENAME} fi cp -p ${KEYSTORE}/${KEYNAME}.pub ${KEYSTORE}/${KEYNAME_SHORT}${MACHINENAME}.pub } ## ## ## ## ## ## 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 NAME=$(uname -n|cut -c2-4) LAST=$(uname -n| sed -e 's/.*\(.$\)/\1/') NAME=$(uname -n) LAST=$(uname -n) check_keystore KEYNAME=rsync KEYNAME_SHORT=${PREFIX}$(echo $KEYNAME|cut -c1-2)${ID} check_key ##### # 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