HAProxy/Reconfig
Jump to navigation
Jump to search
HAProxy » Reconfig
#!/bin/bash
: '
@vendor Chorke Academia, Inc.
@web https://cdn.chorke.org/docs/academia
@version 1.0.00
@since 1.0.00
'
:<<DIY
cat <<'EXE'| sudo bash
if [ -x "$(command -v curl)" ];then
export HAPROXY_ETC_BASE=/etc/haproxy
bash <(curl -s 'https://cdn.chorke.org/exec/cli/bash/install/haproxy/1.0.0-ubuntu-24.04.sh.txt')
curl -fsSL https://cdn.chorke.org/exec/cli/bash/install/haproxy/1.0.0-ubuntu-24.04.sh.txt|tee ${HAPROXY_ETC_BASE}/proxy-scripts/reconfig >/dev/null
chmod u+x ${HAPROXY_ETC_BASE}/proxy-scripts/reconfig
else printf 'curl \033[0;31mnot found! \033[0m:(\n';fi
EXE
DIY
function merge_restart(){
if [ -e "${HAPROXY_TMP_FILE}" ] && [ -f "${HAPROXY_TMP_FILE}" ] && [ -s "${HAPROXY_TMP_FILE}" ];then
if [ "${HAPROXY_CFG_MD5S}" != "${HAPROXY_TMP_MD5S}" ];then
unset HAPROXY_CFG_TEST
unset HAPROXY_TMP_TEST
if [ $(haproxy -c -V -f ${HAPROXY_TMP_FILE} >/dev/null 2>&1; echo $?) -eq 0 ];then HAPROXY_TMP_TEST="/env/set";fi
if [ "${HAPROXY_TMP_TEST}" == '/env/set' ];then
rsync -aqz ${HAPROXY_TMP_FILE} ${HAPROXY_ETC_BASE}/haproxy.cfg
if [ $(haproxy -c -V -f ${HAPROXY_ETC_BASE}/haproxy.cfg >/dev/null 2>&1; echo $?) -eq 0 ];then HAPROXY_CFG_TEST="/env/set";fi
if [ ${HAPROXY_CFG_TEST} == '/env/set' ];then systemctl restart haproxy.service;fi
if [ ${HAPROXY_CFG_TEST} != '/env/set' ];then
haproxy -c -V -f ${HAPROXY_ETC_BASE}/haproxy.cfg
rsync -aqz ${BACKUPS_CFG_FILE} ${HAPROXY_ETC_BASE}/haproxy.cfg && rm ${BACKUPS_CFG_FILE}
printf 'haproxy.cfg \033[0;31mreverted! \033[0m:(\n'; exit_error
fi
rm ${HAPROXY_TMP_FILE}
fi
if [ "${HAPROXY_TMP_TEST}" != '/env/set' ];then
cat ${HAPROXY_TMP_FILE};echo
haproxy -c -V -f ${HAPROXY_TMP_FILE};echo;rm ${HAPROXY_TMP_FILE}
printf 'haproxy.cfg \033[0;31mnot valid! \033[0m:(\n'; exit_error
fi
fi
fi
}
function merge_backups(){
if [ -e "${HAPROXY_TMP_FILE}" ] && [ -f "${HAPROXY_TMP_FILE}" ] && [ -s "${HAPROXY_TMP_FILE}" ];then
HAPROXY_CFG_MD5S="$(md5sum ${HAPROXY_ETC_BASE}/haproxy.cfg|awk '{print $1}')"
HAPROXY_TMP_MD5S="$(md5sum ${HAPROXY_TMP_FILE}|awk '{print $1}')"
if [ "${HAPROXY_CFG_MD5S}" != "${HAPROXY_TMP_MD5S}" ];then
BACKUPS_CFG_DATE="$(date +'D%Y%m%d-T%H%M')-Z$(date +'%z'|tr '+-' 'PM')"
BACKUPS_CFG_FILE=${HAPROXY_ETC_BASE}/proxy-backups/haproxy-${BACKUPS_CFG_DATE}.cfg
rsync -aqz ${HAPROXY_ETC_BASE}/haproxy.cfg ${BACKUPS_CFG_FILE}
fi
fi
}
function merge_enabled(){
for ENABLED_MID_NAME in ${ENABLED_MID_FIXS}; do
ENABLED_CFG_FILE="${HAPROXY_ETC_BASE}/${ENABLED_DIR_NAME}/${ENABLED_MID_NAME}.cfg"
if [ -e "${ENABLED_CFG_FILE}" ] && [ ! -d "${ENABLED_CFG_FILE}" ] && [ -s "${ENABLED_CFG_FILE}" ];then
if [ -f "${ENABLED_CFG_FILE}" ];then ENABLED_CFG_LIST="${ENABLED_CFG_LIST} ${ENABLED_CFG_FILE}"
elif [ -L "${ENABLED_CFG_FILE}" ];then ENABLED_CFG_LIST="${ENABLED_CFG_LIST} ${ENABLED_CFG_FILE}";fi
fi
done
# trimming leading & trailing whitespaces
ENABLED_CFG_LIST=$(echo "${ENABLED_CFG_LIST}" | xargs)
if [ "${ENABLED_CFG_LIST}/env/set" != '/env/set' ];then
cat ${ENABLED_CFG_LIST} | tee -a ${HAPROXY_TMP_FILE} >/dev/null
fi
}
function merge_default(){
for DEFAULT_MID_NAME in ${DEFAULT_MID_FIXS}; do
DEFAULT_CFG_FILE="${HAPROXY_ETC_BASE}/${DEFAULT_DIR_NAME}/${DEFAULT_MID_NAME}.cfg"
if [ -e "${DEFAULT_CFG_FILE}" ] && [ ! -d "${DEFAULT_CFG_FILE}" ] && [ -s "${DEFAULT_CFG_FILE}" ];then
if [ -f "${DEFAULT_CFG_FILE}" ];then DEFAULT_CFG_LIST="${DEFAULT_CFG_LIST} ${DEFAULT_CFG_FILE}"
elif [ -L "${DEFAULT_CFG_FILE}" ];then DEFAULT_CFG_LIST="${DEFAULT_CFG_LIST} ${DEFAULT_CFG_FILE}";fi
fi
done
# trimming leading & trailing whitespaces
DEFAULT_CFG_LIST=$(echo "${DEFAULT_CFG_LIST}" | xargs)
if [ "${DEFAULT_CFG_LIST}/env/set" != '/env/set' ];then
cat ${DEFAULT_CFG_LIST} | tee -a ${HAPROXY_TMP_FILE} >/dev/null
fi
}
function init_merge(){
HAPROXY_TMP_FILE=$(mktemp -u)
merge_default
merge_enabled
merge_backups
merge_restart
}
function init_enabled(){
ENABLED_CFG_LIST=""
ENABLED_DIR_NAME=proxy-enabled
ENABLED_MID_FIXS='shahed.biz-http-all shahed.biz-tcp-vpn shahed.biz-tcp-git shahed.biz-tcp-mail'
}
function init_default(){
DEFAULT_CFG_LIST=""
DEFAULT_DIR_NAME=proxy-default
DEFAULT_MID_FIXS='global default-ssl default-http'
}
function init_proxy(){
HAPROXY_ETC_BASE=/etc/haproxy
mkdir -p ${HAPROXY_ETC_BASE}/proxy-{backups,configs,default,enabled,scripts}
init_default
init_enabled
}
function exit_error(){
exit 1
}
function init_valid(){
# check existence of haproxy
if [ ! -x "$(command -v haproxy)" ];then
printf 'haproxy \033[0;31mnot found! \033[0m:(\n'; exit_error
fi
# check existence of md5sum
if [ ! -x "$(command -v md5sum)" ];then
printf 'md5sum \033[0;31mnot found! \033[0m:(\n'; exit_error
fi
# check existence of rsync
if [ ! -x "$(command -v rsync)" ];then
printf 'rsync \033[0;31mnot found! \033[0m:(\n'; exit_error
fi
# set env:haproxy_etc_base if it's remain unset by user
if [ "${HAPROXY_ETC_BASE}/env/set" == '/env/set' ];then
export HAPROXY_ETC_BASE=/etc/haproxy
fi
}
function init(){
init_valid
init_proxy
init_merge
}
init