#!/usr/bin/env bash # --- # - Script checks, if host declarations at (this) dhcp failover server # - are in sync with primary dhcp server. If needed, dhcp failover server # - will be updated. # --- src_host=gw-ah.kanzlei-kiel.netz src_file_remote=/etc/dhcp/hosts.lan.conf target_file_local=/etc/dhcp/hosts.lan.conf # ------------- # --- Some functions # ------------- echononl(){ echo X\\c > /tmp/shprompt$$ if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then echo -e -n "$*\\c" 1>&2 else echo -e -n "$*" 1>&2 fi rm /tmp/shprompt$$ } fatal(){ echo "" echo -e "fatal error: $*" echo "" echo -e "\t\033[31m\033[1mInstalllation will be interrupted\033[m\033[m" echo "" exit 1 } error(){ echo "" echo -e "\t[ \033[31m\033[1mFehler\033[m ]: $*" echo "" } warn (){ echo "" echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*" echo "" } info (){ echo "" echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*" echo "" } echo_done() { echo -e "\033[80G[ \033[32mdone\033[m ]" } echo_ok() { echo -e "\033[80G[ \033[32mok\033[m ]" } echo_warning() { echo -e "\033[80G[ \033[33m\033[1mwarn\033[m ]" } echo_failed(){ echo -e "\033[80G[ \033[1;31mfailed\033[m ]" } echo_skipped() { echo -e "\033[80G[ \033[33m\033[1mskipped\033[m ]" } # - Is this script running on terminal ? # - if [[ -t 1 ]] ; then terminal=true else terminal=false fi # - Is this a systemd system? # - if [[ "X`which systemd`" = "X" ]]; then systemd_exists=false else systemd_exists=true fi tmp_include_file="/tmp/$(basename $src_file_remote).$$" tmp_err_msg=$(mktemp) rsync -a -q -e ssh ${src_host}:${src_file_remote} $tmp_include_file > $tmp_err_msg 2>&1 if [[ $? -ne 0 ]]; then if $terminal ; then error "$(cat $tmp_err_msg)" else echo -e "\n[ Error ]: $(cat $tmp_err_msg)" fi rm -f $tmp_include_file rm -f $tmp_err_msg exit 1 fi diff $tmp_include_file $target_file_local > $tmp_err_msg 2>&1 if [[ $? -ne 0 ]]; then cp -a $tmp_include_file $target_file_local if $systemd_exists ; then systemctl restart isc-dhcp-server > $tmp_err_msg 2>&1 if [[ $? -ne 0 ]]; then if $terminal ; then error "$(cat $tmp_err_msg)" else echo -e "\n[ Error ]: $(cat $tmp_err_msg)" fi rm -f $tmp_include_file rm -f $tmp_err_msg exit 1 else if $terminal ; then echo -e "\n\tUpdate was successfully done.\n" fi fi else /etc/init.d/isc-dhcp-server restart > $tmp_err_msg 2>&1 if [[ $? -ne 0 ]]; then if $terminal ; then error "$(cat $tmp_err_msg)" else echo -e "\n[ Error ]: $(cat $tmp_err_msg)" fi rm -f $tmp_include_file rm -f $tmp_err_msg exit 1 else if $terminal ; then echo -e "\n\tUpdate was successfully done.\n" fi fi fi else if $terminal ; then echo -e "\n\tServer is already up-to-date.\n" fi fi rm -f $tmp_include_file rm -f $tmp_err_msg exit 0