#!/bin/bash #------------------------------------------------------------------------------------------------------------------ # Script : sys_create_vhost.sh # Auteur : Doug Le Tough # Date : 22-07-2017 # Version : 1.0.0 # Objet : Création d'un VHOST sur le rproxy et sur l'hôte du backend. le rproxy comme le backend # sont considérés être des serveurs Apache. Ce script ajoute également le domaine passé # en argument de la liste des domaines gérés par Dehydrated. # #------------------------------------------------------------------------------------------------------------------ # Mise a jour : # # 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production # #------------------------------------------------------------------------------------------------------------------ # Dependances : Aucune # # #------------------------------------------------------------------------------------------------------------------ # Liste des options et arguments: # # @OPT: o:domain:domain:1/1:::: # @OPT: o:backend_host:backend_host:1/1:::: # @OPT: o:backend_port:backend_port:1/1:::: # #------------------------------------------------------------------------------------------------------------------ # Liste des erreurs: # # 2 | erreur | stop | ${ERROR} # #------------------------------------------------------------------------------------------------------------------ # Liste des paramètres de configuration définis dans le fichier de configuration du script: # # RPROXY_VHOST_TEMPLATE=rproxy_template.conf # REMOTE_VHOST_TEMPLATE=backend_template.conf # DEHYDRATED_DOMAIN_LIST=/etc/dehydrated/domains.txt # HTTPD_PATH=/etc/httpd/sites-available # #------------------------------------------------------------------------------------------------------------------ ## ## Syntaxe : ## -------- ## ## prompt> sys_create_vhost.sh -domain [-backend_host ] -backend_port ## ## ex: sys_create_vhost.sh -domain pad.tetalab.org -backend_host jimmy.local.tetalab.org -backend_port 9001 ## ## Prérequis: ## ---------- ## - Le script doit être executé par l'utilisateur asr sur le rproxy (sousetsuken) ## ## Fonctionnement: ## --------------- ## Crée le fichier de configuration sur le rproxy à partir du fichiers modèle local_site_template.conf ## ainsi que le fichier de configuration sur l'hôte du backend à partir du fichier modèle remote_site_template.conf. ## ## Les deux fichiers modèles sont situés dans le répertoire NC_EXPL_MOD. ## ## Remarque importante: Ce script n'active *PAS* le virtualhost et ne redémarre *PAS* les serveurs Apache. ## #------------------------------------------------------------------------------------------------------------------ # Initialisation de l'environement #------------------------------------------------------------------------------------------------------------------ if [ "${USER}" != "asr" ]; then ERROR="Seul l'utilisateur asr peut utiliser ce script" echo -e "\033[91m${ERROR}\033[0m" exit 1 fi source /etc/profile.d/tetalab.sh if [ ! -f ${NC_EXPL_CFG}/init.conf ]; then echo "Le fichier d'initialisation du socle \${NC_EXPL_CFG}/init.conf n'éxiste pas !" echo "Arrêt du script par sécurité" exit 250 fi source ${NC_EXPL_CFG}/init.conf IP_ADDR=$(host ${backend_host} | rev | cut -d' ' -f1 | rev) IS_PRESENT=$(grep -E ^${domain}$ ${DEHYDRATED_DOMAIN_LIST} | wc -l) REMOTE_HTTP_PATH=${backend_host}:${HTTPD_PATH} REPLACE_DOMAIN="s/SITE_NAME/${domain}/g" REPLACE_HOST="s/SITE_HOST/${backend_host}/g" REPLACE_IP_ADDR="s/SITE_IP/${IP_ADDR}/g" REPLACE_SITE_PORT="s/SITE_PORT/${backend_port}/" #------------------------------------------------------------------------------------------------------------------ # Fonctions #------------------------------------------------------------------------------------------------------------------ function check_port { if [ ! ${backend_port} -gt 0 ] 2>/dev/null || [ ! ${backend_port} -lt 65535 ] 2>/dev/null; then ERROR="Le numéro de port doit être compris entre 0 et 65535" fct_erreur 2 fi } function check_templates { fct_message "Vérification de la présence du fichier modèle ${NC_EXPL_MOD}/${RPROXY_VHOST_TEMPLATE}" -color jaune if [ ! -r ${NC_EXPL_MOD}/${RPROXY_VHOST_TEMPLATE} ]; then ERROR="${NC_EXPL_MOD}/${RPROXY_VHOST_TEMPLATE} n'existe pas ou n'est pas lisible" fct_erreur 2 fi fct_message "Vérification de la présence du fichier modèle ${NC_EXPL_MOD}/${REMOTE_VHOST_TEMPLATE}" -color jaune if [ ! -r ${NC_EXPL_MOD}/${REMOTE_VHOST_TEMPLATE} ]; then ERROR="${NC_EXPL_MOD}/${REMOTE_VHOST_TEMPLATE} n'existe pas ou n'est pas lisible" fct_erreur 2 fi } function create_rproxy_conf { fct_message "Création de la configuration du rproxy:" -color jaune fct_message " * Domaine: ${domain}" fct_message " * Hôte : ${backend_host}" fct_message " * Port: ${backend_port}" sed -s ${REPLACE_DOMAIN} ${NC_EXPL_MOD}/${RPROXY_VHOST_TEMPLATE} > ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de la création de la configuration du rproxy (1)" fct_erreur 2 fi sed -i ${REPLACE_HOST} ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de la création de la configuration du rproxy (2)" fct_erreur 2 fi sed -i ${REPLACE_SITE_PORT} ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de la création de la configuration du rproxy (3)" fct_erreur 2 fi fct_message "Installation de la configuration du rproxy vers ${HTTPD_PATH}/${domain}.conf" -color jaune sudo cp ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp ${HTTPD_PATH}/${domain}.conf RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de l'installation de la configuration du rproxy" fct_erreur 2 fi fct_message "Application des droits sur ${HTTPD_PATH}/${domain}.conf" -color jaune sudo chown root: ${HTTPD_PATH}/${domain}.conf RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de l'application des droits." fct_erreur 2 fi fct_message "Application des permissions sur ${HTTPD_PATH}/${domain}.conf" -color jaune sudo chmod 644 ${HTTPD_PATH}/${domain}.conf RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de l'application des permissions" fct_erreur 2 fi } function create_backend_conf { fct_message "Création de la configuration du backend:" -color jaune fct_message " * Domaine: ${domain}" fct_message " * Addresse IP du backend: ${IP_ADDR}" fct_message " * Port: ${backend_port}" sed -s ${REPLACE_DOMAIN} ${NC_EXPL_MOD}/${REMOTE_VHOST_TEMPLATE} > ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de la création de la configuration du backend (1)" fct_erreur 2 fi sed -i ${REPLACE_IP_ADDR} ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de la création de la configuration du backend (2)" fct_erreur 2 fi sed -i ${REPLACE_SITE_PORT} ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de la création de la configuration du backend (3)" fct_erreur 2 fi fct_message "Installation de la configuration du backend sur ${backend_host}" -color jaune scp -q ${NC_EXPL_TMP}/${domain}.conf_${SH_SESSION_ID}.tmp ${backend_host}:/tmp/${domain}.conf RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de l'installation de la configuration du backend (1)" fct_erreur 2 fi ssh ${backend_host} "sudo mv /tmp/${domain}.conf ${HTTPD_PATH}/${domain}.conf" RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de l'installation de la configuration du backend (2)" fct_erreur 2 fi fct_message "Application des droits sur le fichier de configuration du backend" ssh ${backend_host} "sudo chown root: ${HTTPD_PATH}/${domain}.conf" RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de l'application des droits sur la configuration du backend" fct_erreur 2 fi fct_message "Application des permissions sur le fichier de configuration du backend" ssh ${backend_host} "sudo chmod 644 ${HTTPD_PATH}/${domain}.conf" RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de l'application des permissions sur la configuration du backend" fct_erreur 2 fi } function add_domain { if [ ${IS_PRESENT} -eq 0 ]; then fct_message "Ajout du domaine ${domain} aux domaines dont les certificats sont gérés par dehydrated" -color jaune sudo echo ${domain} >> ${DEHYDRATED_DOMAIN_LIST} RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then ERROR="Erreur lors de l'ajout du domaine dans ${DEHYDRATED_DOMAIN_LIST}" fct_erreur 2 fi else fct_message "${domain} fait déjà partie de la liste des domaines gérés par dehydrated" -color jaune fi } #------------------------------------------------------------------------------------------------------------------ # Traitement #------------------------------------------------------------------------------------------------------------------ check_port check_templates create_rproxy_conf if [ "${#backend_host}" -gt 0 ]; then create_backend_conf fi add_domain fct_erreur 0