Browse Source

"Déplacement scripts dans autres depots + ajout dummy + correction install.sh"

master
Doug Le Tough 5 years ago
parent
commit
e3afd19eff
  1. 218
      bin/ctl_all_nrpe.sh
  2. 87
      bin/ctl_host_process.sh
  3. 101
      bin/expl_dummy_script.sh
  4. 166
      bin/expl_refresh_thsf_site.sh
  5. 294
      bin/expl_transfert_dir.sh
  6. 309
      bin/sys_create_vhost.sh
  7. 120
      bin/sys_deploy_socle.sh
  8. 227
      bin/sys_refresh_ref_cron.sh
  9. 185
      bin/sys_refresh_socle_bash.sh
  10. 35
      conf/ctl_all_nrpe.conf
  11. 8
      conf/ctl_vm.conf
  12. 7
      conf/expl_dummy_script.conf
  13. 5
      conf/expl_refresh_thsf_site.conf
  14. 1
      conf/lisezmoi.txt
  15. 5
      conf/sys_create_vhost.conf
  16. 7
      conf/sys_refresh_socle_bash.conf
  17. 13
      mod/backend_template.conf
  18. 1
      mod/lisezmoi.txt
  19. 36
      mod/rproxy_template.conf
  20. 2
      msg/ctl_all_nrpe.msg
  21. 3
      msg/ctl_host_process.msg
  22. 2
      msg/ctl_vm.msg
  23. 0
      msg/expl_dummy_script.msg
  24. 2
      msg/expl_refresh_thsf_site.msg
  25. 3
      msg/expl_transfert_dir.msg
  26. 1
      msg/sys_deploy_socle.msg
  27. 2
      msg/sys_refresh_ref_cron.msg
  28. 2
      msg/sys_refresh_socle_bash.msg

218
bin/ctl_all_nrpe.sh

@ -1,218 +0,0 @@ @@ -1,218 +0,0 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : ctl_all_nrpe.sh
# Auteur : Doug Le Tough
# Date : 23-07-2017
# Version : 1.0.0
# Objet : Fait tous les contrôles NRPE standars sur l'ensemble des VM listées
# dans le fichier de configuration et notifie les incidents sur freenode.net#tetalab
#
#------------------------------------------------------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production
#
#------------------------------------------------------------------------------------------------------------------
# Dependances :
# - /usr/local/bin/tetalab/ircbot.py
# - ctl_host_process.sh
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# Ce script n'accepte *aucune* option
#
# @OPT: f:bidon::::::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des paramètres de configuration:
#
# IRC_BOT=/usr/local/bin/tetalab/ircbot.py
# NRPE_CHECK_PATH=/etc/nagios/nrpe/
# NRPE_CHECK_BIN=/usr/libexec/nagios/check_nrpe
# INFRA_SERVER=sousetsuken.local.tetalab.org
# # VM monitorée par NRPE
# # ATTENTION: web n'est *volontairement* pas monitorée par NRPE
# TETALAB_VM[0]=sousetsuken.local.tetalab.org
# TETALAB_VM[1]=jimmy.local.tetalab.org
# TETALAB_VM[2]=billy.local.tetalab.org
# TETALAB_VM[3]=sonny.local.tetalab.org
# TETALAB_VM[4]=marian.local.tetalab.org
# # Processus monitorés indépendemment de NRPE
# PROCESS[0]=sousetsuken.local.tetalab.org:/usr/sbin/httpd
# PROCESS[1]=sousetsuken.local.tetalab.org:/usr/sbin/named
# PROCESS[2]=sousetsuken.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[3]=sousetsuken.local.tetalab.org:/usr/sbin/crond
# PROCESS[4]=sousetsuken.local.tetalab.org:/usr/bin/nrpe
# PROCESS[5]=marian.local.tetalab.org:/usr/sbin/httpd
# PROCESS[6]=marian.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[7]=marian.local.tetalab.org:/usr/sbin/crond
# PROCESS[8]=marian.local.tetalab.org:/usr/bin/nrpe
# PROCESS[9]=web.local.tetalab.org:/usr/lib/postfix/sbin/master
# PROCESS[10]=sonny.local.tetalab.org:/usr/lib64/postgresql/9.6/bin/postgres
# PROCESS[11]=sonny.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[12]=sonny.local.tetalab.org:/usr/sbin/crond
# PROCESS[13]=sonny.local.tetalab.org:/usr/bin/nrpe
# PROCESS[14]=jimmy.local.tetalab.org:/usr/sbin/httpd
# PROCESS[15]=jimmy.local.tetalab.org:/usr/sbin/node
# PROCESS[16]=jimmy.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[17]=jimmy.local.tetalab.org:/usr/sbin/crond
# PROCESS[18]=jimmy.local.tetalab.org:/usr/bin/nrpe
# PROCESS[19]=billy.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[20]=billy.local.tetalab.org:/usr/sbin/crond
# PROCESS[21]=billy.local.tetalab.org:/usr/bin/nrpe
# PROCESS[22]=billy.local.tetalab.org:/usr/sbin/httpd
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
# 3 | erreur | continu | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> ctl_all_nrpe.sh
##
## ex:
## ctl_all_nrpe.sh
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur sousetsuken
##
## Fonctionnement:
## ---------------
## Depuis sousetsuken, récupère depuis le répertoire local NRPE_CHECK_PATH la liste des checks à effectuer
## et pour ceux qui sont executables les execute sur les VM définies dans le fichier de configuration.
## puis relève les incidents et les notifie sur le chan freenode.net#tetalab en utilisant le script python
## /usr/local/bin/tetalab/ircbot.py
##
## Ce script utilise ctl_host_process.sh pour la vérification des processus.
##
#------------------------------------------------------------------------------------------------------------------
# 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
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_config
{
fct_message "Vérification de la configuration:" -color jaune
if [ ! -r ${SH_FICCFG} ]; then
ERROR="Fichier de configuration ${SH_FICCFG} absent ou illisible"
fct_erreur 2
fi
if [ ${#IRC_BOT} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: IRC_BOT"
fct_erreur 2
fi
if [ ${#NRPE_CHECK_PATH} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: NRPE_CHECK_PATH"
fct_erreur 2
fi
if [ ${#NRPE_CHECK_BIN} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: NRPE_CHECK_BIN"
fct_erreur 2
fi
if [ ${#TETALAB_VM[*]} -eq 0 ]; then
ERROR="Aucune VM définie dans le fichier de configuration"
fct_erreur 2
fi
if [ ${#PROCESS[*]} -eq 0 ]; then
ERROR="Aucun processus défini dans le fichier de configuration"
fct_erreur 2
fi
fct_message " * IRC_BOT: ${IRC_BOT}"
fct_message " * NRPE_CHECK_PATH: ${NRPE_CHECK_PATH}"
fct_message " * NRPE_CHECK_BIN: ${NRPE_CHECK_BIN}"
INDEX=0
for VM in ${TETALAB_VM[@]}
do
fct_message " * VM[${INDEX}]: ${VM}"
INDEX=$(( INDEX+1 ))
done
}
function check_all
{
for CHECK in $(find ${NRPE_CHECK_PATH} -type f -executable -exec basename {} .cfg \; | sort )
do
fct_message "Contrôle ${CHECK}:" -color jaune
for HOST in ${TETALAB_VM[@]}
do
CRITICAL=1
if [ "${HOST}" == "${INFRA_SERVER}" ]; then
fct_message " * ${HOST}"
RESULT=$(${NRPE_CHECK_BIN} -H ${HOST} -c ${CHECK} | cut -d'|' -f1)
CRITICAL=$(echo ${RESULT} | grep OK | wc -l)
elif [ $(echo ${CHECK} | grep "check_http_" | wc -l) -eq 0 ]; then
# On ne fait pas les checks HTTP sur les autres VM que le serveur d'infra (sousetsuken)
fct_message " * ${HOST}"
RESULT=$(${NRPE_CHECK_BIN} -H ${HOST} -c ${CHECK} | cut -d'|' -f1)
CRITICAL=$(echo ${RESULT} | grep OK | wc -l)
fi
if [ ! ${CRITICAL} -eq 1 ]; then
fct_message " - CRITICAL" -color orange
MESSAGE="${MESSAGE}|||${HOST}: ${CHECK}: ${RESULT}"
fi
done
done
}
function check_process
{
fct_message "Vérification des processus:"
for PROC in ${PROCESS[@]}
do
HOST=$(echo ${PROC} | cut -d: -f1)
PROC=$(echo ${PROC} | cut -d: -f2)
ctl_host_process.sh -vm ${HOST} -process ${PROC}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
fct_message "Processus ${PROC} inexistant sur ${HOST}" -color rose
MESSAGE="${MESSAGE}|||${HOST}: CRITICAL: Processus ${PROC} inexistant sur ${HOST}"
fi
done
}
function send_message
{
if [ ${#MESSAGE} -eq 0 ]; then
fct_message "Aucun message à envoyer" -color jaune
fct_erreur 0
fi
fct_message "Envoi du message ${MESSAGE}" -color jaune
${IRC_BOT} "${MESSAGE}"
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
MESSAGE=""
check_config
check_all
check_process
send_message
fct_erreur 0

87
bin/ctl_host_process.sh

@ -1,87 +0,0 @@ @@ -1,87 +0,0 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : ctl_host_process.sh
# Auteur : Doug Le Tough
# Date : 23-07-2017
# Version : 1.0.0
# Objet : Vérifie sur la VM dont le nom est passée en option la présence d'un processus
# dont le nom est passé en option
#
#------------------------------------------------------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# @OPT: o:vm:vm:1/1::::
# @OPT: o:process:process:1/1::::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 1 | erreur | stop | Processus inexistant sur ${vm}
# 2 | erreur | stop | ${ERROR}
# 3 | erreur | continu | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> ctl_host_process.sh -vm <VM> -process <PROCESS>
##
## ex:
## ctl_host_process.sh -vm sousetsuken -process /usr/sbin/httpd
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur sousetsuken
##
## Fonctionnement:
## ---------------
## Depuis sousetsuken se connecte sur la VM dont le nom est passé en option et vérifie la présence du
## du processus à l'aide de pidof
##
## Renvoie le code de sortie 1 si le process n'existe pas sur la VM et 0 dans le cas contraire.
##
#------------------------------------------------------------------------------------------------------------------
# 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'existe pas !"
echo "Arrêt du script par sécurité"
exit 250
fi
source ${NC_EXPL_CFG}/init.conf
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_process
{
fct_message "Vérification de la présence du processus ${process} sur ${vm}:"
PID=$(ssh ${vm} "pidof ${process}")
if [ ${#PID} -eq 0 ]; then
fct_erreur 1
fi
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
check_process
fct_erreur 0

101
bin/ctl_vm.sh → bin/expl_dummy_script.sh

@ -1,50 +1,49 @@ @@ -1,50 +1,49 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : ctl_vm.sh
# Script : expl_dummy_script.sh
# Auteur : Doug Le Tough
# Date : 23-07-2017
# Date : 26-07-2017
# Version : 1.0.0
# Objet : Vérifie l'état des VM de l'infrastructure
# Objet : Script d'exemple qui liste les VM définies dans son fichier de configuration
#
#------------------------------------------------------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 23/07/2017 - Doug Le Tough - Cre : Mise en production
# 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
# Dependances : Aucune
#
# Ce script n'accepte *aucune* option
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# @OPT: f:bidon::::::
# @OPT: f:list_vm:list_vm:1/1:true:::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
# Liste des paramètres de configuration:
#
# 2 | erreur | stop | ${ERROR}
# 3 | erreur | continu | ${ERROR}
# DUMMY_VAR="Variable bidon pour test"
# TETALAB_VM[0]=sousetsukenlocal.tetalab.org
# TETALAB_VM[1]=jimmy.local.tetalab.org
# TETALAB_VM[2]=billy.local.tetalab.org
# TETALAB_VM[3]=marian.local.tetalab.org
# TETALAB_VM[4]=sonny.local.tetalab.org
# TETALAB_VM[5]=web.local.tetalab.org
#
#------------------------------------------------------------------------------------------------------------------
# Liste des paramètres de configuration:
# Liste des erreurs:
#
# NUC=nuc.local.tetalab.org
# NUC_SSH_PORT=2022
# IRC_BOT=/usr/local/bin/tetalab/ircbot.py
# TETALAB_VM[0]=jimmy.local.tetalab.org
# TETALAB_VM[1]=billy.local.tetalab.org
# TETALAB_VM[2]=marian.local.tetalab.org
# TETALAB_VM[3]=sonny.local.tetalab.org
# TETALAB_VM[4]=web.local.tetalab.org
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> ctl_vm.sh
## prompt> expl_dummy_script.sh [-list_vm false]
##
## ex:
## ctl_vm.sh
## expl_dummy_script.sh
##
## Prérequis:
## ----------
@ -52,8 +51,9 @@ @@ -52,8 +51,9 @@
##
## Fonctionnement:
## ---------------
## Depuis sousetsuken se connecte sur le Nuc et vérifie l'état des VM inscrite dans le fichier de configuration
## et notifie les incidents sur freenode.net#tetalab
## Affiche sa configuration et liste les VM listées dans son fichier de configuration (TETALAB_VM[*]).
##
## Si l'option -list_vm est positionnée à false, le script ne fait qu'afficher sa configuration.
##
#------------------------------------------------------------------------------------------------------------------
# Initialisation de l'environement
@ -68,7 +68,7 @@ fi @@ -68,7 +68,7 @@ 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'existe pas !"
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
@ -86,25 +86,15 @@ function check_config @@ -86,25 +86,15 @@ function check_config
ERROR="Fichier de configuration ${SH_FICCFG} absent ou illisible"
fct_erreur 2
fi
if [ ${#NUC} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: NUC"
fct_erreur 2
fi
if [ ${#NUC_SSH_PORT} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: NUC_SSH_PORT"
fct_erreur 2
fi
if [ ${#IRC_BOT} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: IRC_BOT"
if [ ${#DUMMY_VAR} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: DUMMY_VAR"
fct_erreur 2
fi
if [ ${#TETALAB_VM[*]} -eq 0 ]; then
ERROR="Aucune VM définie dans le fichier de configuration"
fct_erreur 2
fi
fct_message " * NUC: ${NUC}"
fct_message " * NUC_SSH_PORT: ${NUC_SSH_PORT}"
fct_message " * IRC_BOT: ${IRC_BOT}"
fct_message " * DUMMY_VAR: ${DUMMY_VAR}"
INDEX=0
for VM in ${TETALAB_VM[@]}
do
@ -113,40 +103,23 @@ function check_config @@ -113,40 +103,23 @@ function check_config
done
}
function check_vm
{
fct_message "Vérification de l'état des VM:" -color jaune
for VM in ${TETALAB_VM[@]}
do
VM_STATUS=$(ssh ${NUC} -p ${NUC_SSH_PORT} "/usr/bin/sudo virsh domstate ${VM} 2>/dev/null | grep running | wc -l")
if [ ! ${VM_STATUS} -eq 1 ]; then
VM_STATUS=$(ssh ${NUC} -p ${NUC_SSH_PORT} "/usr/bin/sudo virsh domstate ${VM} 2>/dev/null | head -n1")
VM_STATUS="${VM}: VM is ${VM_STATUS}"
fct_message " - ${VM_STATUS}" -color rose
MESSAGE="${MESSAGE}|||${VM_STATUS}"
continue
fi
VM_STATUS="${VM}: VM is running"
fct_message " - ${VM_STATUS}" -color vert
done
}
function send_message
function list_vm
{
if [ ${#MESSAGE} -eq 0 ]; then
fct_message "Aucun message à envoyer" -color jaune
fct_erreur 0
if [ "${list_vm}" == "true" ]; then
fct_message "Liste des VM définies dans ${SH_FICCFG}:" -color jaune
INDEX=0
for VM in ${TETALAB_VM[@]}
do
fct_message " * VM[${INDEX}]: ${VM}"
INDEX=$(( INDEX+1 ))
done
fi
fct_message "Envoi du message ${MESSAGE}" -color jaune
${IRC_BOT} "${MESSAGE}"
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
MESSAGE=""
check_config
check_vm
send_message
list_vm
fct_erreur 0

166
bin/expl_refresh_thsf_site.sh

@ -1,166 +0,0 @@ @@ -1,166 +0,0 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : expl_refresh_thsf_site.sh
# Auteur : Doug Le Tough
# Date : 23-07-2017
# Version : 1.0.0
# Objet : Permet la mise à jour du site du THSF à partir du dépôt git
#
#------------------------------------------------------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production
#
#------------------------------------------------------------------------------------------------------------------
# Dependances : Aucune
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# Ce script n'accepte *aucune* option
#
# @OPT: f:bidon::::::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des paramètres de configuration:
#
# THSF_DIR=/var/www/www.thsf.net
# THSF_GIT_URL=ssh://git@jimmy:/fatalerrors/thsf-pico
# THSF_GIT_USER=asr
# THSF_HTTPD_USER=apache
# THSF_DIR_MODE=755
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> expl_refresh_thsf_site.sh
##
## ex:
## expl_refresh_thsf_site.sh
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur marian
##
## Fonctionnement:
## ---------------
## Sur marian: Vérifie les différences entre la copie local du dépôt du site du THSF et le dépôt git.
## Met à jour a copie locale si nécessaire.
##
#------------------------------------------------------------------------------------------------------------------
# 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
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_config
{
fct_message "Vérification de la configuration:" -color jaune
if [ ! -r ${SH_FICCFG} ]; then
ERROR="Fichier de configuration ${SH_FICCFG} absent ou illisible"
fct_erreur 2
fi
if [ ${#THSF_DIR} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: THSF_DIR"
fct_erreur 2
fi
if [ ${#THSF_DIR_MODE} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: THSF_DIR_MODE"
fct_erreur 2
fi
if [ ${#THSF_HTTPD_USER} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: THSF_HTTPD_USER"
fct_erreur 2
fi
if [ ${#THSF_GIT_URL} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: THSF_GIT_URL"
fct_erreur 2
fi
if [ ${#THSF_GIT_USER} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: THSF_GIT_USER"
fct_erreur 2
fi
fct_message " * THSF_DIR: ${THSF_DIR}"
fct_message " * THSF_DIR_MODE: ${THSF_DIR_MODE}"
fct_message " * THSF_GIT_URL: ${THSF_GIT_URL}"
fct_message " * THSF_GIT_USER: ${THSF_GIT_USER}"
fct_message " * THSF_HTTPD_USER: ${THSF_HTTPD_USER}"
}
function update_thsf
{
fct_message "Mise à jour du site du THSF:" -color jaune
if [ ! -d ${THSF_DIR} ]; then
ERROR="La copie locale du dépôt n'existe pas: ${THSF_DIR}"
fct_erreur 2
fi
fct_message "Modification provisoire des droits sur ${THSF_DIR}" -color jaune
sudo chown -R ${THSF_GIT_USER}: ${THSF_DIR}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors du changement des droits"
fct_erreur 2
fi
cd ${THSF_DIR}
fct_message "Réinitialisation du dépot local" --color jaune
/usr/bin/git reset --hard
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la réinitialisation"
fct_erreur 2
fi
fct_message "Mise à jour du dépôt local"
/usr/bin/git pull origin master
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la mise à jour"
fct_erreur 2
fi
fct_message "Application des droits sur le dépôt local"
sudo chown -R ${THSF_HTTPD_USER}: ${THSF_DIR}
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 le dépôt local"
sudo chmod -R ${THSF_DIR_MODE} ${THSF_DIR}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des permissions "
fct_erreur 2
fi
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
check_config
update_thsf
fct_erreur 0

294
bin/expl_transfert_dir.sh

@ -1,294 +0,0 @@ @@ -1,294 +0,0 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : expl_transfert_dir.sh
# Auteur : Doug Le Tough
# Date : 22-07-2017
# Version : 1.0.0
# Objet : Permet le transfert de répertoire entre VM
#
#------------------------------------------------------------------------------------------------------------------
# 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:src_host:src_host:1/1::::
# @OPT: o:dst_host:dst_host:1/1::::
# @OPT: o:src_dir:src_dir:1/1::::
# @OPT: o:dst_dir:dst_dir:1/1::::
# @OPT: f:create:create:1/1:false:::
# @OPT: f:dst_user:dst_user:1/1:asr:::
# @OPT: f:dst_group:dst_group:1/1:asr:::
# @OPT: f:dst_mode:dst_mode:1/1:755:::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> expl_transfert_dir.sh -src_host <VM1> -dst_host <VM2> -src_dir <DIR1> -dst_dir <DIR2> [-create true] [-dst_user <USER>] [-dst_group <GROUP>] [-dst_mode <MODE>]
##
## ex: expl_transfert_dir.sh -src_host marian -dst_host jimmy -src_dir /etc/httpd -dst_dir /home/doug -create true -dst_user doug -dst_group wheel -dst_mode 644
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur sousetsuken
##
## Fonctionnement:
## ---------------
## Récupère sur sousetsuken depuis src_host le contenu du répertoire src_dir et le copie dans le répertoire
## dst_dir sur dst_host.
##
## Si l'option facultative -create est positionnée à true, le répertoire de destination sera créé.
## Par défaut cette option vaut false.
##
## Si le répertoire de destination n'existe pas et si l'option -create ne vaut pas true, le script remontera
## une erreur.
##
## Si le répertoire de destination existe et l'option -create vaut true, le transfert aura lieu normalement.
##
## Tous les noms de répertoires doivent être des chemins absolus.
##
## Les options -dst_user, -dst_group et -dst_mode permettent de gérer les droits et permissions sur le
## répertoire copié
##
##
## ATTENTION:
## - Le script transfert LE CONTENU du répertoire source
## - Le script modifie les droits et permissions du répertoire de destination, soyez prudent lorsque le répertoire
## existe déjà.
##
#------------------------------------------------------------------------------------------------------------------
# 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
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_hosts
{
for HOST in ${src_host} ${dst_host}
do
if [ $(host ${HOST} | grep "Host ${HOST} not found: 3(NXDOMAIN)" | wc -l) -eq 1 ]; then
ERROR="${HOST} n'est pas un nom d'hôte valide"
fct_erreur 2
fi
done
}
function check_dirs
{
fct_message "Vérification du répertoire source ${src_dir} sur ${src_host}" -color jaune
ssh ${src_host} "sudo find ${ROOT_SRC_DIR} -maxdepth 1 -type d -name ${BASE_SRC_DIR} >/dev/null 2>&1"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Le répertoire ${src_host}:${src_dir} n'existe pas"
fct_erreur 2
fi
if [ $(ssh ${src_host} "sudo find ${ROOT_SRC_DIR} -maxdepth 1 -type d -name ${BASE_SRC_DIR}" | wc -l) -eq 0 ]; then
ERROR="Le répertoire ${src_host}:${src_dir} n'existe pas"
fct_erreur 2
fi
if [ "${create}" != "true" ]; then
fct_message "Vérification du répertoire destination ${dst_dir} sur ${dst_host}" -color jaune
ssh ${dst_host} "sudo find ${ROOT_DST_DIR} -maxdepth 1 -type d -name ${BASE_DST_DIR} >/dev/null 2>&1"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Le répertoire ${dst_host}:${dst_dir} n'existe pas"
fct_erreur 2
fi
if [ $(ssh ${dst_host} "sudo find ${ROOT_DST_DIR} -maxdepth 1 -type d -name ${BASE_DST_DIR} | wc -l") -eq 0 ]; then
ERROR="Le répertoire ${dst_host}:${dst_dir} n'existe pas"
fct_erreur 2
fi
fi
}
function check_user
{
if [ ! $(ssh ${dst_host} "sudo cat /etc/passwd | grep -E "^${dst_user}\:" | wc -l") -eq 1 ]; then
ERROR="L'utilisateur ${dst_user} n'existe pas sur ${dst_host}"
fct_erreur 2
fi
}
function check_group
{
if [ ! $(ssh ${dst_host} "sudo cat /etc/group | grep -E "^${dst_group}\:" | wc -l") -eq 1 ]; then
ERROR="Le groupe ${dst_group} n'existe pas sur ${dst_host}"
fct_erreur 2
fi
}
function create_dst_dir
{
fct_message "Création du répertoire de destination ${dst_host}:${dst_dir}" -color jaune
ssh ${dst_host} "sudo mkdir -p ${dst_dir}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création du répertoire de destination"
fct_erreur 2
fi
}
function get_src_archive
{
fct_message "Création de l'archive /tmp/${ARCHIVE_NAME} du répertoire du répertoire ${src_host}:${src_dir}" -color jaune
ssh ${src_host} "sudo tar -C ${src_dir} -czf /tmp/${ARCHIVE_NAME} ./"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de l'archive du répertoire source (1)"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
ssh ${src_host} "sudo chown asr: /tmp/${ARCHIVE_NAME}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création de l'archive du répertoire source (2)"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
fct_message "Récupération de l'archive /tmp/${ARCHIVE_NAME} depuis ${src_host}" -color jaune
scp -q ${src_host}:/tmp/${ARCHIVE_NAME} /tmp
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la récupération de l'archive du répertoire source"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function cp_archive
{
fct_message "Copie de l'archive locale /tmp/${ARCHIVE_NAME} vers ${dst_host}:/tmp/${ARCHIVE_NAME}" -color jaune
scp -q /tmp/${ARCHIVE_NAME} ${dst_host}:/tmp/${ARCHIVE_NAME}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la copie de l'archive"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function untar_archive
{
fct_message "Décompression de l'archive /tmp/${ARCHIVE_NAME} vers ${dst_host}:${dst_dir}" -color jaune
ssh ${dst_host} "sudo tar -C ${dst_dir} -xzf /tmp/${ARCHIVE_NAME}"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la décompression de l'archive"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function set_rights
{
fct_message "Application des droits ${dst_user}:${dst_group} sur ${dst_host}:${dst_dir}" -color jaune
ssh ${dst_host} "sudo chown -R ${dst_user}:${dst_group} ${dst_dir}"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des droits"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function set_permissions
{
fct_message "Application des permission ${dst_mode} sur ${dst_host}:${dst_dir}" -color jaune
ssh ${dst_host} "sudo chmod -R ${dst_mode} ${dst_dir}"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'application des permissions"
fct_message ${ERROR} -color rouge
fct_erreur 3
fct_erreur 1
fi
}
function rm_archives
{
fct_message "Suppression de l'archive /tmp/${ARCHIVE_NAME} sur ${src_host}" -color jaune
ssh ${src_host} "sudo rm -Rf /tmp/${ARCHIVE_NAME}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression de l'archive"
fct_erreur 2
fi
fct_message "Suppression de l'archive locale /tmp/${ARCHIVE_NAME}" -color jaune
sudo rm -Rf /tmp/${ARCHIVE_NAME}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression de l'archive"
fct_erreur 2
fi
fct_message "Suppression de l'archive /tmp/${ARCHIVE_NAME} sur ${dst_host}" -color jaune
ssh ${dst_host} "sudo rm -Rf /tmp/${ARCHIVE_NAME}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression de l'archive"
fct_erreur 2
fi
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
ROOT_SRC_DIR=$(dirname ${src_dir})
BASE_SRC_DIR=$(basename ${src_dir})
ROOT_DST_DIR=$(dirname ${dst_dir})
BASE_DST_DIR=$(basename ${dst_dir})
# Génère une chaine aléatoire
RND=$(dd if=/dev/urandom bs=3 count=40 2>/dev/null | md5sum | cut -d' ' -f1)
# Le nom de l'archive contenant les documents à récupérer
ARCHIVE_NAME=${RND}.tgz
check_hosts
check_dirs
check_user
check_group
if [ "${create}" == "true" ]; then
create_dst_dir
fi
get_src_archive
cp_archive
untar_archive
set_rights
set_permissions
rm_archives
fct_erreur 0

309
bin/sys_create_vhost.sh

@ -1,309 +0,0 @@ @@ -1,309 +0,0 @@
#!/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
# 1.1.0 26/07/2017 - Doug Le Tough - Evo : Ajout vérification de la configuration
# Ajout création du répertoire du backend
#
#------------------------------------------------------------------------------------------------------------------
# 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
# WWW_ROOT_DIR=/var/www
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> sys_create_vhost.sh -domain <DOMAIN.TLD> [-backend_host <BACKEND_HOST>] -backend_port <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_config
{
fct_message "Vérification de la configuration:" -color jaune
if [ ! -r ${SH_FICCFG} ]; then
ERROR="Fichier de configuration ${SH_FICCFG} absent ou illisible"
fct_erreur 2
fi
if [ ${#RPROXY_VHOST_TEMPLATE} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: RPROXY_VHOST_TEMPLATE"
fct_erreur 2
fi
if [ ${#REMOTE_VHOST_TEMPLATE} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: REMOTE_VHOST_TEMPLATE"
fct_erreur 2
fi
if [ ${#DEHYDRATED_DOMAIN_LIST} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: DEHYDRATED_DOMAIN_LIST"
fct_erreur 2
fi
if [ ${#HTTPD_PATH} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: HTTPD_PATH"
fct_erreur 2
fi
if [ ${#WWW_ROOT_DIR} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: WWW_ROOT_DIR"
fct_erreur 2
fi
fct_message " * RPROXY_VHOST_TEMPLATE: ${RPROXY_VHOST_TEMPLATE}"
fct_message " * REMOTE_VHOST_TEMPLATE: ${REMOTE_VHOST_TEMPLATE}"
fct_message " * DEHYDRATED_DOMAIN_LIST: ${DEHYDRATED_DOMAIN_LIST}"
fct_message " * HTTPD_PATH: ${HTTPD_PATH}"
fct_message " * WWW_ROOT_DIR: ${WWW_ROOT_DIR}"
fct_message " * Domain: ${domain}"
fct_message " * Backend host: ${backend_host}"
fct_message " * Backend port: ${backend_port}"
}
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 create_backend_document_root
{
fct_message "Création du répertoire d'accueil du backend sur ${backend_host}" -color jaune
ssh ${backend_host} "sudo mkdir -p ${WWW_ROOT_DIR}/${domain}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la création du répertoire d'accueil du backend"
fct_erreur 2
fi
fct_message "Application des droits sur le répertoire d'accueil du backend" -color jaune
ssh ${backend_host} "sudo chown -R apache:apache ${WWW_ROOT_DIR}/${domain}"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de de l'application des droits sur le répertoire d'accueil du backend"
fct_erreur 2
fi
fct_message "Application des permissions sur le répertoire d'accueil du backend" -color jaune
ssh ${backend_host} "sudo chmod -R 775 ${WWW_ROOT_DIR}/${domain}"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de de l'application des droits sur le répertoire d'accueil 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_config
check_port
check_templates
create_rproxy_conf
if [ "${#backend_host}" -gt 0 ]; then
create_backend_conf
fi
create_backend_document_root
add_domain
fct_erreur 0

120
bin/sys_deploy_socle.sh

@ -1,120 +0,0 @@ @@ -1,120 +0,0 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : sys_deploy_socle.sh
# Auteur : Doug Le Tough
# Date : 22-07-2017
# Version : 1.0.0
# Objet : Déploiement du socle Bash à partir du répertoire fourni en option
# sur la VM dont le nom est passé en option
#
#
#------------------------------------------------------------------------------------------------------------------
# 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:vm:vm:1/1::::
# @OPT: o:socle_dir:socle_dir:1/1::::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> sys_deploy_socle.sh -vm <VM> -socle_dir <DIR>
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr
##
## Fonctionnement:
## ---------------
## Installe le socle Bash à partir du répertoire passée en paramètre (socle_dir) sur la VM
## dont le nom est recu en paramètre.
##
#------------------------------------------------------------------------------------------------------------------
# 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
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_socle_dir
{
if [ ! -d ${socle_dir} ]; then
ERROR="Erreur le répertoire ${socle_dir} n'existe pas"
fct_erreur 2
fi
}
function rm_socle_dir
{
fct_message "Suppression du socle dans ${socle_dir} sur ${vm}:" -color rose
ssh ${vm} rm -Rf ${socle_dir}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression du socle sur ${vm}."
fct_erreur 2
fi
}
function scp_socle_dir
{
fct_message "Copie du socle dans ${socle_dir} sur ${vm}:" -color rose
scp -q -r ${socle_dir} ${vm}:${socle_dir}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la copie du socle."
fct_erreur 2
fi
}
function install_socle
{
fct_message "Installation du socle sur ${vm}:" -color rose
ssh ${vm} "cd ${socle_dir} && sudo ./install.sh"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'installation du socle."
fct_erreur 2
fi
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
check_socle_dir
rm_socle_dir
scp_socle_dir
install_socle
fct_erreur 0

227
bin/sys_refresh_ref_cron.sh

@ -1,227 +0,0 @@ @@ -1,227 +0,0 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : sys_refresh_ref_cron.sh
# Auteur : Doug Le Tough
# Date : 24-07-2017
# Version : 1.0.0
# Objet : Met à jour le référentiel des jobs cron de l'ensemble de l'infra
# accessible par https://ref.tetalab.org
#
#
#------------------------------------------------------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production
#
#------------------------------------------------------------------------------------------------------------------
# Dependances : Aucune
#
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# Ce script n'accepte *aucune* option
#
# @OPT: f:force:force:1/1:false:show_only::
# @OPT: f:show_only:show_only:1/1:false:force::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
# Liste des paramètres de configuration:
#
# PGPASSFILE=/home/asr/.pgpass
# DB_TABLE=ref_cron
# TETALAB_USERS[0]=root
# TETALAB_USERS[1]=asr
# TETALAB_VM[0]=sousetsuken.local.tetalab.org
# TETALAB_VM[1]=jimmy.local.tetalab.org
# TETALAB_VM[2]=billy.local.tetalab.org
# TETALAB_VM[3]=marian.local.tetalab.org
# TETALAB_VM[4]=sonny.local.tetalab.org
# TETALAB_VM[5]=web.local.tetalab.org
#
##------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> sys_refresh_ref_cron.sh [-force true] [-show_only true]
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr
##
## Fonctionnement:
## ---------------
## Récupère l'ensemble des cronjobs des utilisateurs listés dans TETALAB_USERS
## mis en place sur les VM définies dans TETALAB_VM et les enregistre dans la table
## DB_TABLE de la base de données "referentiel".
##
## À moins que l'option -force soit passée à true, le script ne fait qu'ajouter les nouvelles
## entrées dans la base. Par défaut cette option est positionnée à false, de ce fait
## aucune données n'est supprimée dans la base y compris si le cronjob n'existe plus sur le
## système concernée.
##
## Lorsqu'un cron job est supprimé, forcer une régénération complète des entrées de la base est
## donc nécessaire (sys_refresh_ref_cron.sh -force true)
##
## L'option -show_only positionnée à true permet de lister les cronjobs installés sur les VM sans
## les enregistrer dans la base de données.
##
## Les informations de connexion à la base de données doivent être stockées dans
## le fichier PGPASSFILE sur sousetsuken au format suivant:
##
## hostname:port:database:username:password
##
## https://www.postgresql.org/docs/9.6/static/libpq-pgpass.html
##
##
#------------------------------------------------------------------------------------------------------------------
# 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
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_config
{
fct_message "Vérification de la configuration:" -color jaune
if [ ! -r ${SH_FICCFG} ]; then
ERROR="Fichier de configuration ${SH_FICCFG} absent ou illisible"
fct_erreur 2
fi
if [ ! -r ${PGPASSFILE} ]; then
ERROR="Fichier des informations de connexion ${PGPASSFILE} absent ou illisible"
fct_erreur 2
fi
fct_message " * PGPASSFILE: ${PGPASSFILE}"
if [ ${#DB_TABLE} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: DB_TABLE"
fct_erreur 2
fi
fct_message " * DB_TABLE: ${DB_TABLE}"
fct_message " * Force: ${force}"
fct_message " * Show only: ${show_only}"
if [ ${#TETALAB_USERS[*]} -eq 0 ]; then
ERROR="Aucune VM définie dans le fichier de configuration"
fct_erreur 2
fi
INDEX=0
for TETALAB_USER in ${TETALAB_USERS[@]}
do
fct_message " * TETALAB_USERS[${INDEX}]: ${TETALAB_USER}"
INDEX=$(( INDEX+1 ))
done
if [ ${#TETALAB_VM[*]} -eq 0 ]; then
ERROR="Aucune VM définie dans le fichier de configuration"
fct_erreur 2
fi
INDEX=0
for VM in ${TETALAB_VM[@]}
do
fct_message " * VM[${INDEX}]: ${VM}"
INDEX=$(( INDEX+1 ))
done
}
function get_db_info
{
DB_HOST=$(cat ${PGPASSFILE} | cut -d: -f1)
DB_DATABASE=$(cat ${PGPASSFILE} | cut -d: -f3)
DB_USER=$(cat ${PGPASSFILE} | cut -d: -f4)
}
function clean_table
{
if [ "${force}" == "true" ]; then
fct_message "Option -force activée: Suppression des données dans la table." -color orange
SQL="delete from ref_cron where id > 0;"
psql -q -t -h ${DB_HOST} -U ${DB_USER} -d ${DB_DATABASE} -c "${SQL}"
fi
}
function refresh_cronjobs
{
fct_message "Récupération des cronjobs:" -color jaune
for VM in ${TETALAB_VM[@]}
do
fct_message " * ${VM}" -color rose
for TETALAB_USER in ${TETALAB_USERS[@]}
do
fct_message " * ${TETALAB_USER}" -color orange
IFS_BAK=${IFS}
IFS=$'\n'
CRONJOBS=$(ssh ${VM} "sudo crontab -u ${TETALAB_USER} -l 2>/dev/null | grep -v '^\#' | grep -v '^$' | grep -vP '^ +$'")
for CRONJOB in ${CRONJOBS}
do
COLOR="blanc"
MESSAGE=" - ${CRONJOB}"
if [ $(echo "${CRONJOB}" | grep "run-parts" | wc -l) -eq 1 ]; then
COLOR="vert"
fi
fct_message ${MESSAGE} -color ${COLOR}
if [ "${show_only}" == "false" ]; then
if [ ${#CRONJOB} -gt 0 ]; then
fct_message " Checking database:"
MINUTES=$(echo ${CRONJOB} | cut -d' ' -f1)
HOURS=$(echo ${CRONJOB} | cut -d' ' -f2)
DAYS=$(echo ${CRONJOB} | cut -d' ' -f3)
MONTHS=$(echo ${CRONJOB} | cut -d' ' -f4)
DAYSOFWEEK=$(echo ${CRONJOB} | cut -d' ' -f5)
COMMAND=$(echo ${CRONJOB} | cut -d' ' -f6-)
REQUEST_ID_PARAMS="host='${VM}' and s_user='${TETALAB_USER}' and minutes='${MINUTES}' and hours='${HOURS}'
and days='${DAYS}' and months='${MONTHS}' and daysofweek='${DAYSOFWEEK}' and command='${COMMAND}'"
RESULT=$(psql -q -t -h ${DB_HOST} -U ${DB_USER} -d ${DB_DATABASE} -c "select ID from
ref_cron where ${REQUEST_ID_PARAMS};")
if [ ${#RESULT} -eq 0 ]; then
fct_message " -> Cronjob not in database, inserting..."
REQUEST_INSERT_PARAMS="'${VM}', '${TETALAB_USER}', '${MINUTES}',
'${HOURS}', '${DAYS}', '${MONTHS}', '${DAYSOFWEEK}', '${COMMAND}'"
psql -q -t -h ${DB_HOST} -U ${DB_USER} -d ${DB_DATABASE} -c "insert into ref_cron
(\"host\", \"s_user\", \"minutes\", \"hours\", \"days\", \"months\", \"daysofweek\", \"command\")
values (${REQUEST_INSERT_PARAMS});"
else