#!/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