28 changed files with 41 additions and 1801 deletions
@ -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 |
@ -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 |
@ -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 |
@ -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 |
@ -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 |
@ -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 |
@ -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 |
||||