Browse Source

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

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

+ 0
- 218
bin/ctl_all_nrpe.sh View File

@ -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

+ 0
- 87
bin/ctl_host_process.sh View File

@ -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

bin/ctl_vm.sh → bin/expl_dummy_script.sh View File


+ 0
- 166
bin/expl_refresh_thsf_site.sh View File

@ -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

+ 0
- 294
bin/expl_transfert_dir.sh View File

@ -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

+ 0
- 309
bin/sys_create_vhost.sh View File

@ -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

+ 0
- 120
bin/sys_deploy_socle.sh View File

@ -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

+ 0
- 227
bin/sys_refresh_ref_cron.sh View File

@ -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
fct_message " -> Cronjob already in database"
fi
fi
fi
done
IFS=${IFS_BAK}
done
done
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
DB_HOST=""
DB_DATABASE=""
DB_USER=""
check_config
get_db_info
clean_table
refresh_cronjobs
fct_erreur 0

+ 0
- 185
bin/sys_refresh_socle_bash.sh View File

@ -1,185 +0,0 @@
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : sys_refresh_socle_bash.sh
# Auteur : Doug Le Tough
# Date : 23-07-2017
# Version : 1.0.0
# Objet : Permet la mise à jour de l'installation du socle bash
# sur les VM du Tetalab
#
#------------------------------------------------------------------------------------------------------------------
# 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:
#
# SOCLE_DIR=/home/asr/
# SOCLE_GIT_URL=ssh://git@tetalab.org:2213/tetalab/socle_bash
# 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
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> sys_refresh_socle_bash.sh
##
## ex:
## sys_refresh_socle_bash.sh
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur sousetsuken
##
## Fonctionnement:
## ---------------
## Sur sousetsuken: Supprime la copie locale du dépôt Git du socle Bash, clone le dépôt Git dont l'URL est
## définie dans le fichier de configuration (SOCLE_GIT_URL) et installe le socle Bash.
##
## Puis, copie, sur l'ensemble des VM listées dans le fichier de configuration (TETALAB_VM[*]),
## le dépot Git local du socle Bash et l'installe.
##
#------------------------------------------------------------------------------------------------------------------
# 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 [ ${#SOCLE_DIR} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: SOCLE_DIR"
fct_erreur 2
fi
if [ ${#SOCLE_GIT_URL} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: SOCLE_GIT_URL"
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 " * SOCLE_DIR: ${SOCLE_DIR}"
fct_message " * SOCLE_GIT_URL: ${SOCLE_GIT_URL}"
INDEX=0
for VM in ${TETALAB_VM[@]}
do
fct_message " * VM[${INDEX}]: ${VM}"
INDEX=$(( INDEX+1 ))
done
}
function rm_local_repo
{
fct_message "Suppression de la copie locale du dépôt: ${SOCLE_DIR}" -color jaune
rm -Rf ${SOCLE_DIR}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression du dépôt local"
fct_erreur 2
fi
}
function install_local
{
fct_message "Installation locale du socle Bash" -color jaune
sudo ${SOCLE_DIR}/install.sh
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'installation du socle Bash"
fct_erreur 2
fi
fct_message "----------------------------------------------------------"
}
function clone_repo
{
fct_message "Clonage du dépôt distant ${SOCLE_GIT_URL}" -color jaune
git clone ${SOCLE_GIT_URL} ${SOCLE_DIR}
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors du clonage du dépôt"
fct_erreur 2
fi
}
function cp_install_repo
{
for VM in ${TETALAB_VM[@]}
do
fct_message "Suppression du dépôt sur la VM: ${VM}" -color jaune
ssh ${VM} "rm -Rf ${SOCLE_DIR}"
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la suppression du dépôt"
fct_erreur 2
fi
fct_message "Copie du dépôt sur la VM: ${VM}" -color jaune
scp -qr ${SOCLE_DIR} ${VM}:${SOCLE_DIR}
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de la copie du dépôt"
fct_erreur 2
fi
fct_message "Installation du socle Bash sur ${VM}" -color jaune
ssh ${VM} "sudo ${SOCLE_DIR}/install.sh"
if [ ! ${RET_VAL} -eq 0 ]; then
ERROR="Erreur lors de l'installation du socle Bash"
fct_erreur 2
fi
fct_message "----------------------------------------------------------"
done
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
check_config
rm_local_repo
clone_repo
install_local
cp_install_repo
fct_erreur 0

+ 0
- 35
conf/ctl_all_nrpe.conf View File

@ -1,35 +0,0 @@
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

+ 0
- 8
conf/ctl_vm.conf View File

@ -1,8 +0,0 @@
NUC=nuc.tetalab.org
NUC_SSH_PORT=2022
IRC_BOT=/usr/local/bin/tetalab/ircbot.py
TETALAB_VM[0]=jimmy
TETALAB_VM[1]=billy
TETALAB_VM[2]=marian
TETALAB_VM[3]=sonny
TETALAB_VM[4]=web

conf/sys_refresh_ref_cron.conf → conf/expl_dummy_script.conf View File


+ 0
- 5
conf/expl_refresh_thsf_site.conf View File

@ -1,5 +0,0 @@
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

+ 1
- 0
conf/lisezmoi.txt View File

@ -0,0 +1 @@
Ce repertoire recoit les fichiers de configuration utilises par les scripts

+ 0
- 5
conf/sys_create_vhost.conf View File

@ -1,5 +0,0 @@
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

+ 0
- 7
conf/sys_refresh_socle_bash.conf View File

@ -1,7 +0,0 @@
SOCLE_DIR=/home/asr/socle_bash
SOCLE_GIT_URL=ssh://git@jimmy/tetalab/socle_bash
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

+ 0
- 13
mod/backend_template.conf View File

@ -1,13 +0,0 @@
<VirtualHost SITE_IP:SITE_PORT>
ServerName SITE_NAME
ServerAdmin bofh@tetalab.org
DocumentRoot /var/www/SITE_NAME
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 192.168.122.0/24
<Directory /var/www/SITE_NAME>
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/SITE_NAME.error.log
CustomLog /var/log/httpd/SITE_NAME.access.log combined
</VirtualHost>

+ 1
- 0
mod/lisezmoi.txt View File

@ -0,0 +1 @@
Ce repertoire recoit les modeles utilises par les scripts

+ 0
- 36
mod/rproxy_template.conf View File

@ -1,36 +0,0 @@
<VirtualHost 192.168.122.42:80>
# ReverseProxy with https redirect template
#
# Written by Doug Le Tough
#
# Usage:
# sed -s 's/SITE_NAME/example.com/g' site_template.conf > example.org.conf
# sed -i 's/SITE_HOST/hostname.local.tetalab.org/g' example.org.conf
#
Define FQDN SITE_NAME
Define HOST SITE_HOST
Define HOST_PORT SITE_PORT
ServerName ${FQDN}
### All HTTP requests are converted to HTTPS requests
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>
ErrorLog "/var/log/httpd/${FQDN}_error.log"
CustomLog "/var/log/httpd/${FQDN}_access.log" Combined
</VirtualHost>
<VirtualHost 192.168.122.42:443>
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
ServerName ${FQDN}
ProxyPreserveHost On
SSLEngine on
SSLCertificateFile /etc/dehydrated/certs/${FQDN}/cert.pem
SSLCertificateKeyFile /etc/dehydrated/certs/${FQDN}/privkey.pem
SSLCertificateChainFile /etc/dehydrated/certs/${FQDN}/fullchain.pem
RequestHeader set X_FORWARDED_PROTO 'https'
ProxyPass / http://${HOST}:${HOST_PORT}/
ProxyPassReverse / http://${HOST}:${HOST_PORT}/
ErrorLog "/var/log/httpd/${FQDN}_error.log"
CustomLog "/var/log/httpd/${FQDN}_access.log" Combined
</VirtualHost>

+ 0
- 2
msg/ctl_all_nrpe.msg View File

@ -1,2 +0,0 @@
2 | erreur | stop | ${ERROR}
3 | erreur | continu | ${ERROR}

+ 0
- 3
msg/ctl_host_process.msg View File

@ -1,3 +0,0 @@
1 | erreur | stop | Processus inexistant sur ${vm}
2 | erreur | stop | ${ERROR}
3 | erreur | continu | ${ERROR}

+ 0
- 2
msg/ctl_vm.msg View File

@ -1,2 +0,0 @@