diff --git a/README.md b/README.md index da75bb9..39cbcd5 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,35 @@ -# Aide memoire pour l'écriture de scripts avec le socle bash +# Historique -* Sommaire +Le **socle Bash** est **une version allégée** d'un ensemble de bibliothèques et fonctions +écrit en grande partie par **Emmanuel Confrère**, émminent DBA Calédonien qui nous a +autorisé à l'utiliser au sein du Tetalab, et dont l'utilité est d'assurer la cohérence + des scripts qui s'appuient dessus. + +Ce **socle Bash** est fiable et robuste. Il peut sans aucun doute être utilisé en production +à la condition que l'ensemble des conseils listés dans la documentation soient respectés. + +Entre autres fonctionalités ce **socle Bash** permet aux scripts qui s'appuient dessus: +* La gestion de l'historique d'execution +* La gestion des logs +* La gestion des fichiers temporaires +* La gestion des options et arguments +* La gestion des erreurs +* La standadisation de l'affichage +* ... + +# Installation + +L'installlation du script bash est simple et nécessite les droits **root**. + +* Éditez le fichier de configuration **./conf/install_init.conf** de manière à ce +que les variables qui y sont définies correspondent à vos besoins. +* Lancez l'installation en tant qu'utilisateur **root** (ou sudo): + + sudo ./install.sh + +# Documentation + +* **Sommaire** * I - Arborescence du socle * II - Variables d'environement * 1 - Variables globales @@ -32,7 +61,7 @@ ## I - Arborescence du socle -La racine des dossiers utilisée par le Socle Bash est définie par la variable d'environement NC\_EXPL\_ROOT. +La racine des dossiers utilisée par le **socle Bash** est définie par la variable d'environement NC\_EXPL\_ROOT. Cette dernière est initialisée à la connexion par l'appel au script /etc/profile.d/tetalab.sh Cette arborescence est utilisée pour tous scripts Bash ainsi que les variables d'environement qui en découlent. @@ -306,7 +335,7 @@ Les options par défaut réalisent les actions suivantes : -log [id] : Affiche le dernier journal ou le journal "id" (identifiant de session d'exécution). -cpt [id] : Affiche le dernier compte-rendu ou le Compte-rendu "id" (identifiant de session d'execution). -hist [N] : Affiche l'historique des "N" dernières executions (N=10 par défaut) - -dbg N : Activation du mode debug au niveau "N". Active les messages gérés par la librairie fct_message + -dbg N : Activation du mode debug au niveau "N". Active les messages gérés par la bibliothèque fct_message dont l'option -debug est utilisée. @@ -473,7 +502,7 @@ assurer une homogénéite dans l'ensemble du socle. G_VAR1=${G_AVR1:="Valeur par defaut"} # ... - # -- Control de coherence des options + # -- Contrôle de cohérence des options # -- -------------------------------- # -- Traitement diff --git a/conf/install_init.conf b/conf/install_init.conf new file mode 100644 index 0000000..13465f8 --- /dev/null +++ b/conf/install_init.conf @@ -0,0 +1,12 @@ +#!/bin/bash + +# La variable d'environnement qui définira l'emplacement +# de l'ensemble du socle Bash +NC_EXPL_ROOT=/opt/tetalab +export NC_EXPL_ROOT + +# Le repertoire d'installation des fichiers de profiles système +PROFILE_DIR=/etc/profile.d + +# Le nom du fichier de profile système à créer +PROFILE_FILE=tetalab.sh diff --git a/install.sh b/install.sh index 86e08f8..9a5d0b8 100755 --- a/install.sh +++ b/install.sh @@ -1,29 +1,15 @@ #!/bin/bash # -# Script d'installation du socle bash Tetalab +# Script d'installation du socle Bash # -# 21/07/2017 - Doug Le Tough +# 21/07/2017 - Doug Le Tough / Tetalab # - - -PROFILE_DIR=/etc/profile.d -PROFILE_FILE=tetalab.sh -INSTALL_DIR=$(dirname $0) -NC_EXPL_ROOT=/opt/tetalab -export NC_EXPL_ROOT - -NC_EXPL_LIB=${NC_EXPL_ROOT}/lib -NC_EXPL_BIN=${NC_EXPL_ROOT}/bin -NC_EXPL_LOG=${NC_EXPL_ROOT}/log -NC_EXPL_HST=${NC_EXPL_ROOT}/hist -NC_EXPL_CPT=${NC_EXPL_ROOT}/cpt -NC_EXPL_TMP=${NC_EXPL_ROOT}/tmp -NC_EXPL_DAT=${NC_EXPL_ROOT}/dat -NC_EXPL_MOD=${NC_EXPL_ROOT}/mod -NC_EXPL_CFG=${NC_EXPL_ROOT}/conf -NC_EXPL_MSG=${NC_EXPL_ROOT}/msg -NC_EXPL_MAN=${NC_EXPL_ROOT}/man +######################################################################## +# +# Fonctions +# +######################################################################## function exit_on_error { @@ -32,48 +18,96 @@ function exit_on_error exit 1 } +function continue_on_ok +{ + echo -e "\033[92m[OK]\033[0m" +} + +######################################################################## +# +# Contrôles +# +######################################################################## + if [ ! $(id -u) -eq 0 ]; then exit_on_error "Ce script doit être exécuté par l'utilisateur root" fi -echo -e "\033[93mInstallation du socle bash Tetalab:\033[0m" -echo -e "\033[93m * Création du répertoire racine: ${NC_EXPL_ROOT}\033[0m" +PKG_DIR=$(dirname $0) +PKG_INSTALL_CONF=${PKG_DIR}/conf/install_init.conf +PKG_SOCLE_INIT_CONF=${PKG_DIR}/conf/shell-env/profile_init.env + +if [ ! -r ${PKG_INSTALL_CONF} ] || [ ! -r ${PKG_SOCLE_INIT_CONF} ] ; then + exit_on_error "Erreur lors de l'initialisation de l'environnement d'installation. Vérifier les permissions sur les fichiers ${PKG_INSTALL_CONF} et ${PKG_SOCLE_INIT_CONF} " +fi + +######################################################################## +# +# Main +# +######################################################################## + +source ${PKG_INSTALL_CONF} +source ${PKG_SOCLE_INIT_CONF} + + +echo -e "\033[93mInstallation du socle Bash:\033[0m" +echo -e "\033[93m * Répertoire racine: ${NC_EXPL_ROOT}\033[0m" echo -e "\033[93m * Création des répertoires:\033[0m" +# Création des répertoires de destination for DIR in $NC_EXPL_LIB $NC_EXPL_BIN $NC_EXPL_LOG $NC_EXPL_HST $NC_EXPL_CPT $NC_EXPL_TMP $NC_EXPL_DAT $NC_EXPL_MOD $NC_EXPL_CFG $NC_EXPL_MSG $NC_EXPL_MAN; do - echo -e " * ${DIR}" + echo -en " * ${DIR} " sudo mkdir -p ${DIR}; RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then exit_on_error "Erreur lors de la création des répertoires" fi + continue_on_ok done -echo -e "\033[93m * Copie des fichiers de profile dans ${PROFILE_DIR}\033[0m" -cp ${INSTALL_DIR}/${PROFILE_FILE} ${PROFILE_DIR} +# Installation des fichiers de profile +echo -en "\033[93m * Création du fichier de profile dans ${PROFILE_DIR}\033[0m " + +cat << EOF > ${PROFILE_DIR}/${PROFILE_FILE} +NC_EXPL_ROOT=${NC_EXPL_ROOT} +export NC_EXPL_ROOT +source \${NC_EXPL_ROOT}/conf/shell-env/profile_init.env +EOF RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then - exit_on_error "Erreur lors de la copie des fichiers de profile" + exit_on_error "Erreur lors de la création du fichier de profile" fi +continue_on_ok -echo -e "\033[93m * Copie des fichiers de configuration dans ${NC_EXPL_CFG}\033[0m" -cp -R ${INSTALL_DIR}/conf/* ${NC_EXPL_CFG} +# Installation des fichiers de configuration +echo -en "\033[93m * Copie des fichiers de configuration dans ${NC_EXPL_CFG}\033[0m " +cp -R ${PKG_DIR}/conf/* ${NC_EXPL_CFG} RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then exit_on_error "Erreur lors de la copie des fichiers de configuration" fi +continue_on_ok -echo -e "\033[93m * Copie des bibliothèques dans ${NC_EXPL_LIB}\033[0m" -cp -R ${INSTALL_DIR}/lib/* ${NC_EXPL_LIB} +# Installation des bibliothèques +echo -en "\033[93m * Copie des bibliothèques dans ${NC_EXPL_LIB}\033[0m " +cp -R ${PKG_DIR}/lib/* ${NC_EXPL_LIB} RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then exit_on_error "Erreur lors de la copie des bibliothèques" fi +continue_on_ok -echo -e "\033[93m * Copie des scripts dans ${NC_EXPL_BIN}\033[0m" -cp -R ${INSTALL_DIR}/bin/* ${NC_EXPL_BIN} -RET_VAL=$? -if [ ! ${RET_VAL} -eq 0 ]; then - exit_on_error "Erreur lors de la copie des scripts" +# Installation des scripts +SCRIPTS_NUM=$(find ${PKG_DIR}/bin/ -type f | wc -l) +if [ ! ${SCRIPTS_NUM} -eq 0 ]; +then + echo -en "\033[93m * Copie des scripts dans ${NC_EXPL_BIN}\033[0m " + cp -R ${PKG_DIR}/bin/* ${NC_EXPL_BIN} + RET_VAL=$? + if [ ! ${RET_VAL} -eq 0 ]; then + exit_on_error "Erreur lors de la copie des scripts" + fi + continue_on_ok fi diff --git a/tetalab.sh b/tetalab.sh deleted file mode 100644 index 96365e0..0000000 --- a/tetalab.sh +++ /dev/null @@ -1,3 +0,0 @@ -NC_EXPL_ROOT=/opt/tetalab -export NC_EXPL_ROOT -source ${NC_EXPL_ROOT}/conf/shell-env/profile_init.env