From 103f54f89592ac146fa340ae90158208634df7c8 Mon Sep 17 00:00:00 2001 From: Doug Le Tough Date: Fri, 21 Jul 2017 09:44:49 +0200 Subject: [PATCH] initial commit --- conf/init.conf | 159 +++++++ conf/shell-env/lisezmoi.txt | 22 + conf/shell-env/profile_init.env | 74 +++ how_to_use_bash_socle.txt | 793 ++++++++++++++++++++++++++++++++ install.sh | 79 ++++ lib/affiche-ligne.lib | 169 +++++++ lib/erreur.lib | 121 +++++ lib/esql.lib | 266 +++++++++++ lib/format-ligne.lib | 69 +++ lib/gen-mdp.lib | 47 ++ lib/message.lib | 153 ++++++ lib/params.lib | 580 +++++++++++++++++++++++ lib/path.lib | 109 +++++ lib/rotattrace.lib | 97 ++++ lib/semaphore.lib | 153 ++++++ lib/usage.lib | 24 + lib/what.lib | 32 ++ tetalab.sh | 3 + 18 files changed, 2950 insertions(+) create mode 100755 conf/init.conf create mode 100755 conf/shell-env/lisezmoi.txt create mode 100755 conf/shell-env/profile_init.env create mode 100755 how_to_use_bash_socle.txt create mode 100755 install.sh create mode 100755 lib/affiche-ligne.lib create mode 100755 lib/erreur.lib create mode 100755 lib/esql.lib create mode 100755 lib/format-ligne.lib create mode 100755 lib/gen-mdp.lib create mode 100755 lib/message.lib create mode 100755 lib/params.lib create mode 100755 lib/path.lib create mode 100755 lib/rotattrace.lib create mode 100755 lib/semaphore.lib create mode 100755 lib/usage.lib create mode 100755 lib/what.lib create mode 100644 tetalab.sh diff --git a/conf/init.conf b/conf/init.conf new file mode 100755 index 0000000..c9e2b9c --- /dev/null +++ b/conf/init.conf @@ -0,0 +1,159 @@ +##------------------------------------------------------------------------------ +## Script : init.conf +## Module Puppet : gnc-script_core_dtsi +## Auteur : Emmanuel Confrere +## Date : 29-06-2017 +## Version : 2.1.2 +## Objet : Fichier de configuration commun a tout les scripts +## +## Detail : Ce fichier contient les varaibles de fonctionement commune au script du socle +## Il est charge systematiquement au debut de chaque script +## Toute les variables initialisees ici sont nomme SH_* +## +## ----------------------------------------------------------------------------- +# Mise a jour : +# 1.0.0 23-04-2014 - Emmanuel Confrere - Cre : Creation a partir de commun.conf +# qu'il doit remplacer a terme +# 1.1.0 13-05-2014 - Emmanuel Confrere - Evo : Factorisation du code +# Amelioration de la lisibilite et ajout de commentaire +# Passage de certaine variable en heritage +# 1.2.0 13-05-2014 - Emmanuel Confrere - Evo : Ajout de message de debug +# 1.3.0 16-04-2015 - Daniel Frochtmann - Evo : Ajout semaphore pour controler les executions +# multiples (SH_CPT_SEMAPHORE) +# 1.4.0 22-09-2015 - Emmanuel Confrere - Evo : Possibilite de defferencier les retentions entre les fichier cpt et log +# 2.0.0 10-02-2016 - Emmanuel Confrere - Evo : Integration au socle DTSI via Puppet +# 2.0.1 16-03-2016 - Emmanuel Confrere - Ano : Perte de la variable SH_RETENTION (Cf. DBA-2088) +# 2.1.0 24-03-2017 - Emmanuel Confrere - Evo : Changement du nom du serveur de batch +# 2.1.1 27-06-2017 - Emmanuel Confrere - Ano : Fonctionnement inattendu sous Bash 3.2.25 +# la fonction logname ne renvoi rien ? +# 2.1.2 29-06-2017 - Emmanuel Confrere - Ano : Erreur : logname() renvoi null si connexion via sshd +# Remplacement de logname() par /etc/proc/self/loginuid +## ----------------------------------------------------------------------------- +## Ce fichier contient les varaibles de fonctionement commune au script du socle +## Il est charge systematiquement au debut de chaque script +## Toute les variables initialisees ici sont nomme SH_* +## ----------------------------------------------------------------------------- +# - Init variables +# - -------------- +# - Elements d infrastructure et systeme +[ "`hostname`" = "sousetsuken" ] && SH_SRVDEP="oui" || SH_SRVDEP="non" +SH_OS_TYPE=`uname -s` +SH_IDLOGUSER=`cat /proc/self/loginuid` +SH_LOGUSER=`grep -E "[^:]*:[^:]:${SH_IDLOGUSER}" /etc/passwd|cut -d":" -f1` +SH_EXECUSER=${LOGNAME} +SH_PATH=${PATH} + +# - Identification de la session de travail +# - --------------------------------------- +# La variable SH_SESSION_ID permet d identifier une session de travail. +# Il s agit d un identifiant unique permentant de reunir dans une unite commune +# les objets trace, journaux , historique ... Cette variable est partage par tout +# les shell appele en aval d un shell pere. La variable SH_SESSION_ID est initialise +# qu au premier chargement de init.conf +# L initialisation de certainne variable sont dependante de cette premiere initialisation +# pour permetre l heritage des parametres au sous-shell appele. +SH_TIME_STAMP=`date "+%x %X"` # Horrodatage pour l historique +SH_TIMES=`date +"%s"` # Horrodatage pour identification +SH_OSPID=$$ # Numero de processus +SH_SESSION_IDP="${SH_TIMES}_${SH_OSPID}" +# La variable SH_SESSION_ID est initialise que la premiere fois +[ -z "${SH_SESSION_ID}" ] && SH_SESSION_ID="${SH_SESSION_IDP}" +# La variable SH_FIRSTTIME permet de savoir si l execution courante de init.conf +# est issu d un appel depuis un script ou d un lancement manuel depuis le shell. +[ "${SH_SESSION_IDP}" = "${SH_SESSION_ID}" ] && SH_FIRSTTIME="oui" || SH_FIRSTTIME="non" + + +# - Localistaion du script, pour afficher l'aide si +# necessaire.Localisation defini par $SH_DIR/$SH_PROG +SH_PROG=`which $0 2>&1` +SH_DIR=`dirname ${SH_PROG}` +[ "${SH_DIR}" = "." ] && SH_DIR=`pwd` +SH_PROG=`basename ${SH_PROG}` +SH_PROG_VERSION=`grep "^## Version *:" ${SH_DIR}/${SH_PROG}|cut -d: -f2|sed 's/ *//g'` +SH_PARAM="$*" + +# - Initialisationdes fichiers de trace, compte-rendu, message, +# historique, configuration specifique, fichier de semaphore +SH_FICTRC="${NC_EXPL_HST}/`echo ${SH_PROG}|cut -d"." -f1`.hist" +SH_FICMSG="${NC_EXPL_MSG}/`echo ${SH_PROG}|cut -d"." -f1`.msg" +SH_FICCFG="${NC_EXPL_CFG}/`echo ${SH_PROG}|cut -d"." -f1`.conf" +SH_FICSEM="/dev/shm/`echo ${SH_PROG}|cut -d"." -f1`.sem" +[ "${SH_FIRSTTIME}" = "oui" ] && SH_FICLOG="${NC_EXPL_LOG}/`echo ${SH_PROG}|cut -d"." -f1`_${SH_SESSION_IDP}.log" +[ "${SH_FIRSTTIME}" = "oui" ] && SH_FICCPT="${NC_EXPL_CPT}/`echo ${SH_PROG}|cut -d"." -f1`_${SH_SESSION_IDP}.cpt" + +# - initialisation des variables commune aux scripts +# Ces variable peuvent etre surcharge ou modifier dans le fichier de configuration specifique du script +# SH_FICCFG mais dans ce cas il n y auras plus d heritage. +[ "${SH_FIRSTTIME}" = "oui" ] && SH_RETENTION_CPT=8 # Retention des fichiers cpt en jours par defaut +[ "${SH_FIRSTTIME}" = "oui" ] && SH_RETENTION_LOG=8 # Retention des fichiers trc en jours par defaut +[ "${SH_FIRSTTIME}" = "oui" ] && SH_SILENCE="non" # Mode d affichage silencieu (Valeur par default) +[ "${SH_FIRSTTIME}" = "oui" ] && SH_NIV_DEBUG=0 # Debug inactif par defaut +[ "${SH_FIRSTTIME}" = "oui" ] && SH_AFF_SID="non" # Affichage du numero de session dans fct_message et fct_erreur +# Les variable prefixe avec F sont utilise pour proteger l initialisation des variables principales (sans le F) +# Lorsque qu un script initialise une des ce variables dans le fichier de configuration specifique au script +# alors il faut ignorer les initialisation specifique qui pourrais etre effectuer par les scripts appeles par ce dernier. +SH_RETENTION_FLOG=${SH_RETENTION_LOG} +SH_RETENTION_FCPT=${SH_RETENTION_CPT} +SH_FSILENCE=${SH_SILENCE} + +# - Parallelisation d execution des scripts. +# - Par defaut seul une occurance active d un meme script +# - Le controle d execution concurrente est realiase par la lib semaphore.lib +SH_CPT_SEMAPHORE=1 # Valeur d execution du semaphore par defaut + +# - Indentation des messages affiche par fct_message +# pour ameliore la lisibilite des traces +# La valeur de la variable SH_INDENT_MSG est diminuer par fct_erreur(stop) +[ "${SH_FIRSTTIME}" = "non" ] && SH_INDENT_MSG="${SH_INDENT_MSG} " || SH_INDENT_MSG="" + +# - Connection a la base de referencement +[ -z "${SH_CNX_REF}" ] && SH_CNX_REF=${SH_CNX_REF:="cmdb/IRji_5#1O@refpro"} + +# Globalisation des variables +export SH_FICLOG SH_FICCPT SH_CNX_REF SH_INDENT_MSG SH_SESSION_ID SH_NIV_DEBUG SH_SILENCE +export SH_RETENTION_CPT SH_RETENTION_LOG SH_LOGUSER SH_EXECUSER + +# - Chargement de l'environement specifique au script +if [ -f ${SH_FICCFG} ] +then + fct_message -debug 0 "Chargement de fichier de configuration : ${SH_FICCFG}" + . ${SH_FICCFG} +fi + +# - Remise en etat des variables protegees +if [ "${SH_FIRSTTIME}" = "oui" ] +then + # - Les variables peuvent etre changees dans le fichier specifique lors de la premiere inittialisation + # - Cependant pour conserve la compatibilte acsendante la variable SH_RETENTION doit etre controlee + # - Si cette derniere est non vide alors c est qu elle a ete utilise dans le fichier de configuration specifique + # - on doit alors initialiser les nouvelles variables avec cette valeur ... + # - Note : SH_RETENTION est obsolete et ne doit plus etre utilise dans les scripts + # Cette variable a ete remplace par SH_RETENTION_CPT et SH_RETENTION_LOG + if [ -n "${SH_RETENTION}" ] + then + SH_RETENTION_LOG=${SH_RETENTION} + SH_RETENTION_CPT=${SH_RETENTION} + else + SH_RETENTION=8 # Valeur par defaut, conserve pour compatibilite ascendante + fi + export SH_RETENTION +else + SH_RETENTION_LOG=${SH_RETENTION_FLOG} + SH_RETENTION_CPT=${SH_RETENTION_FCPT} + SH_SILENCE=${SH_FSILENCE} +fi + +# - Rotation des fichiers de compte-rendu et de trace +[ "${SH_FIRSTTIME}" = "oui" ] && fct_rotation ${SH_FICCPT} ${SH_RETENTION_CPT} +[ "${SH_FIRSTTIME}" = "oui" ] && fct_rotation ${SH_FICLOG} ${SH_RETENTION_LOG} + +# - Marque le debut de l execution du programme +fct_message -hist "(${SH_SESSION_ID}) : Debut du script" +fct_message -hist "(${SH_SESSION_ID}) : Parametre : ${SH_PARAM}" +[ "${SH_FIRSTTIME}" = "oui" -a ${SH_NIV_DEBUG} -gt 0 ] && fct_message -color rouge "ATTENTION - Mode debug activer : Niveau de trace ${SH_NIV_DEBUG}" + +# - Liberation des variables locale +unset SH_TIMES SH_OSPID SH_TIME_STAMP SH_FIRSTTIME SH_RETENTION_FLOG SH_RETENTION_FCPT SH_FSILENCE SH_IDLOGUSER + +# - Gestion des options et argument +fct_params ${*} diff --git a/conf/shell-env/lisezmoi.txt b/conf/shell-env/lisezmoi.txt new file mode 100755 index 0000000..ad4d64f --- /dev/null +++ b/conf/shell-env/lisezmoi.txt @@ -0,0 +1,22 @@ +Ce dossier contient les fichiers d initialisation d'environement. +Il sont charger par le script /etc/profile.d/socle_bash_dtsi.sh. + +Le nom des fichiers sont de la forme profile__.env. + + prend une des valeurs suivante : + - "socle" : profile dependant du socle + - "grp" : Profile lie au groupe Linux + - "app" : profile indepandant du socle + + est libre sauf pour le type "grp". Dans ce cas +la valeurs doit etre le nom d un groupe Linux existant. Le fichiers +d'environement seras alors source uniquemement si le compte de connexion +est membre du groupe. + +Les fichiers de ce dossiers sont sources dans l ordre suivant : + 1 - le fichier profile_init.env + 2 - les fichiers profile_socle_*.env + 3 - les fichiers profile_grp_*.env (En fontion des groupe dont est membre le compte de connexion) + 4 - les fichiers profile_app_*.env + + Attention : Les fichiers present ici, doivent etre gere par Puppet. \ No newline at end of file diff --git a/conf/shell-env/profile_init.env b/conf/shell-env/profile_init.env new file mode 100755 index 0000000..c47edb4 --- /dev/null +++ b/conf/shell-env/profile_init.env @@ -0,0 +1,74 @@ +##---------------------------------------------------------------------------- +## Script : profile_init.env +## Module Puppet : gnc-script_core_dtsi +## Auteur : Emmanuel Confrere +## Date : 11-07-2017 +## Version : 1.2.3 +## Objet : Initialisation des variables d environements du socle +## Chargement des librairie bash +## Initialisation du PATH +## +## Fonctionnement : Ce script est depose dans le repertoire ${NC_EXPL_ROOT}/conf/shell-env +## avec les droits suivant : 0644 asr:asr +## +## Il initialise l environement globale du socles, charge les librairie et +## initialise les PATH et les alias commun. +## +## Il est appele par le script /etc/profile.d/dtsi.sh +## +# ---------------------------------------------------------------------------- +# Mise a jour : +# 1.0.0 10-02-2016 - Emmanuel Confrere - Cre : A partir de l ancien fichier .dbenv +# 1.0.1 21-07-2016 - Stephane Tourneyre - Ano : Ajout ancien path pour man ADMLINUX-1176 +# 1.1.0 28-07-2016 - Emmanuel Confrere - Evo : Normalisation : Versionnage Sementique +# 1.2.0 05-04-2017 - Emmanuel Confrere - Evo : Ajout de la variable NC_EXPL_NFS +# 1.2.1 07-04-2017 - Emmanuel Confrere - Ano : Definition du prompt +# 1.2.2 11-04-2017 - Emmanuel Confrere - Ano : Suppression de la definition du Prompt +# 1.2.3 11-07-2017 - Emmanuel Confrere - Ano : Description du fonctionnement erronee. +# ---------------------------------------------------------------------------- + +# -- Initialisation des variable globale NC_* +# +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 + + +#[ `df|grep -c "srv-nfs"` -eq 1 ] && NC_EXPL_NFS="oui" || NC_EXPL_NFS="non" +NC_EXPL_NFS="non" + +# -- Export des variables +# +export NC_EXPL_LOG NC_EXPL_HST NC_EXPL_TMP NC_EXPL_LIB NC_EXPL_DAT NC_EXPL_MAN +export NC_EXPL_CPT NC_EXPL_BIN NC_EXPL_CFG NC_EXPL_MSG NC_EXPL_MOD NC_EXPL_NFS + +# -- Chargement des librairies +# +for lib in `find ${NC_EXPL_LIB} -name \*.lib` +do +. ${lib} +done + +# Ajout du repertoire des scripts au Path +# bin -> Repertoire des script dba +fctpath "${NC_EXPL_BIN}" PATH : +fctpath '/usr/local/share/man' MANPATH : +fctpath '/usr/share/man/fr' MANPATH : +fctpath '/usr/share/man/overrides' MANPATH : +fctpath '/usr/share/man/' MANPATH : +fctpath "${NC_EXPL_MAN}" MANPATH : + +# -- Definition des alias +# +alias bbin='cd ${NC_EXPL_ROOT}/bin' +alias type='whence -v' +alias log='cd ${NC_EXPL_LOG}' +alias hist='cd ${NC_EXPL_HST}' diff --git a/how_to_use_bash_socle.txt b/how_to_use_bash_socle.txt new file mode 100755 index 0000000..ecb8142 --- /dev/null +++ b/how_to_use_bash_socle.txt @@ -0,0 +1,793 @@ +-- ----------------------------------------------------------------- -- +-- Aide memoire pour l ecriture de script Bash sous le socle DTSI -- +-- ----------------------------------------------------------------- -- + +-- -------------------------------------------------------- +-- Sommaire +-- +-- I - Arborescence du socle +-- II - Variables d environement +-- 1 - Variables globales +-- 2 - Variables globales specifiques +-- 2.1 Pour les serveurs BDD +-- 3 - Variables de session +-- III - Utilisation du socle bash +-- 1 - Cartouche +-- 1.1 Elements du cartouche +-- 1.2 Versionnement semantique +-- 1.2.1 Usage +-- 1.2.2 Format +-- 1.2.3 Semantique +-- 2 - Initialisation du socle +-- 3 - Structure d un script +-- 4 - Actions realisees au lancement d un script +-- IV - Nomenclature +-- 1 - Fichiers temporaires +-- 2 - Nom des executables +-- V - Description et usage des Librairies +-- 1 - fct_message +-- 2 - fct_affiche_ligne +-- 3 - fct_erreur +-- 4 - fct_unique_exec +-- 5 - fct_libere_exec +-- 6 - fct_usage +-- 7 - fct_rotation +-- 8 - fctpath +-- 9 - fct_params +-- VI - Deploiement via puppet +-- -------------------------------------------------------- + +I - Arborescence du socle + --------------------- + + La racine des dossiers utilisee par le Socle DTSI est definie par la variable d'environement NC_EXPL_ROOT. + Cette derniere est initialisee a la connexion par l appel au script /etc/profile.d/dtsi.sh + Cette arborescence est utilisee pour tous scripts Bash ou Ruby, ainsi que les variables d'environement qui + en decoulent. + + Sous l arborescence ${NC_EXPL_ROOT} on trouve les dossiers suivants : + + +-----------------+-----------------------------------------------------------------------------------------------+ + | Dossier | Description | + +-----------------+-----------------------------------------------------------------------------------------------+ + | {Racine}/bin | Contient les binaires (scripts Bash et Ruby, eventuellement C) | + | {Racine}/conf | Contient les fichiers de configuration des scripts, ainsi que du socle | + | {Racine}/cpt | Contient les fichiers de comtpe rendu generes par les script (purge auto , 8 jours par defaut)| + | {Racine}/dat | Contient les fichiers de donnees geres par les scripts | + | {Racine}/hist | Contient l historique d execution des scripts (pas de purge) | + | {Racine}/lib | Contient les librairies charge a la connexion par le socle | + | {Racine}/log | Contient les fichiers de logs d execution des scripts (purge auto , 8 jours par defaut ) | + | {Racine}/man | Contient les fichiers d aide des scripts pour l utilitaire "man" | + | {Racine}/mod | Contient les fichiers modeles a usage des scripts | + | {Racine}/msg | Contient les fichiers de message pour les scripts pour la librairie "fct_erreur" | + | {Racine}/tmp | Continet les fichiers temporaires des scripts du socle | + +-----------------+-----------------------------------------------------------------------------------------------+ + + Note : Sous chaque dossier vous trouverez un fichier texte lisezmoi.txt decrivant l usage du repertoire. + + +II - Variables d environement + ------------------------ + + Le socle utilise deux groupes de variables. Le premier dit "global" le second "de session". + Sauf si explicite, les variables globales sont definies et exportees a la connexion. Elles sont donc utilisables + par tous les scripts, mais elles ne sont pas modifiables. + + Les variables de session sont definies a l'execution d un script et lui sont propre. + Cependent certaines d entre elles sont transmises au script enfant + - SH_SESSION_ID, SH_FICLOG, SH_FICCPT, SH_RETENTION_CPT, SH_RETENTION_LOG, SH_NIV_DEBUG, SH_SILENCE, SH_AFF_SID + + Les variables de session sont modifiable a 2 niveaux. De facon global dans le fichier "init.conf" ou pour un script + particulier dans le fichier ${NC_EXPL_CFG}/.conf. La valeur definit dans "init.conf" seras utlisee sauf + si elle as ete surchargee dans le fichier de configuration du script. + Il y a cependant une specificite pour SH_RETENTION_CPT et SH_RETENTION_LOG, ces variables sont defini une et une seul fois + lors de la premiere initialisation. Ce qui signinfie qu'un script qui aurait surcharge ces variables, ignorera l initialisation + de ces variable si il est appeler par un autre script. + + + 1 - Variables globales generals + +-------------------+----------------------------+ + | Nom | Usage | + +-------------------+----------------------------+ + | NC_EXPL_ROOT | Racine /opt/expl | + | EXPL_ROOT | Alias pour NC_EXPL_ROOT | + | NC_EXPL_BIN | Pointe vers {Racine}/bin | + | NC_EXPL_CFG | Pointe vers {Racine}/conf | + | NC_EXPL_CPT | Pointe vers {Racine}/cpt | + | NC_EXPL_DAT | Pointe vers {Racine}/dat | + | NC_EXPL_HST | Pointe vers {Racine}/hist | + | NC_EXPL_LIB | Pointe vers {Racine}/lib | + | NC_EXPL_LOG | Pointe vers {Racine}/log | + | NC_EXPL_MAN | Pointe vers {Racine}/man | + | NC_EXPL_MOD | Pointe vers {Racine}/mod | + | NC_EXPL_MSG | Pointe vers {Racine}/msg | + | NC_EXPL_TMP | Pointe vers {Racine}/tmp | + | RUBYLIB | vaut ${NC_EXPL_LIB} | + | NC_EXPL_SRVBATCH | Nom du serveur Batch | + +-------------------+----------------------------+ + + Les variables NC_EXPL_ROOT, EXPL_ROOT et NC_EXPL_SRVBATCH sont definie dans le fichier "dtsi.sh" + Les autres variables NC_~ sont definie dans le fichier "profile_init.env" + + 2 - Variables globales specifiques + 2.1 Pour les serveurs BDD + +--------------------+------------------------------------------+ + | Nom | Usage | + +--------------------+------------------------------------------+ + | NC_EXPL_SQL | Pointe vers {Racine}/sql | + | NC_EXPL_DBTAB | Pointe vers le fichier .dbtab | + | NC_EXPL_DBEDITEUR | Vaut : "oracle" ou "postgres" ou "mysql" | + +--------------------+------------------------------------------+ + + Ces variables sont definie dans le fichier "profile_socle_database.env" + + 3 - Variables de session + Cette liste n est pas exhaustive, seules les principales variables sont citees. + +--------------------+-------------------------------------------------------------------------------+ + | Nom | Usage | + +--------------------+-------------------------------------------------------------------------------+ + | SH_SESSION_ID | Numero unique d execution : _ | + | SH_SILENCE | Acitve ou non l affichage des messages via fct_message. Par defaut vaut "non" | + | SH_PROG | Nom du script | + | SH_LOGUSER | Compte initial de connexion au serveur | + | SH_EXECUSER | Compte courant executant le script | + | SH_DIR | Dossier hebergeant le script | + | SH_PROG_VERSION | Version du script | + | SH_FICTRC | Pointe vers le fichier ${NC_EXPL_HST}/.hist | + | SH_FICMSG | Pointe vers le fichier ${NC_EXPL_MSG}/.msg | + | SH_FICCFG | Pointe vers le fichier ${NC_EXPL_CFG}/.conf | + | SH_FICSEM | Pointe vers le fichier /dev/shm/.sem | + | SH_FICLOG | Pointe vers le fichier ${NC_EXPL_LOG}/.log | + | SH_FICCPT | Pointe vers le fichier ${NC_EXPL_CPT}/.cpt | + | SH_NIV_DEBUG | Vaut 0 par defaut. Niveau d affichage dans les fichiers de trace | + | SH_RETENTION_CPT | Vaut 8 par defaut. Duree de retention en jours des fichiers de compte-rendu | + | SH_RETENTION_LOG | Vaut 8 par defaut. Duree de retention en jours des fichiers de trace | + +--------------------+-------------------------------------------------------------------------------+ + + Remarque : Les variables SH_SILENCE et SH_NIV_DEBUG sont controlees par les options "-s" et "-dbg" + si la gestion des options a ete activee. + + +III - Utilisation du socle bash + ------------------------- + + Cette partie decrit sommairmement les quelques regles d usage pour ecrire un script Bash sous le socle DTSI + Ceci ne concerne pas les script Ruby qui ne sont pas pris en charge par le socle decrit ici. + + 1 - Cartouche + Les scripts doivent commencer par le cartouche ci-dessous : + +----------------------------------------------------------------------------------------------------+ + | | + | #!/bin/bash | + | ##---------------------------------------------------------------------------- | + | ## Script : | + | ## Module Puppet : | + | ## Auteur : | + | ## Date : | + | ## Version : | + | ## Objet : | + | ## | + | # ---------------------------------------------------------------------------- | + | # Mise a jour : | + | # - - : | + | # 0.0.1 08-06-2016 - Toto Laricot - Cre : Creation | + | # 0.0.2 08-09-2016 - Titi Alapeti - Ano : Ce truc est faux | + | # ---------------------------------------------------------------------------- | + | # Dependance : | + | # @DEP: : | + | # ---------------------------------------------------------------------------- | + | # Liste des options et arguments | + | # @OPT: ::::::: # | + | # @OPT: :... # | + | # @ARG: :::: # | + | ##---------------------------------------------------------------------------- | + | ## | + | ## Syntaxes : | + | ## -------- | + | ## | + | ## prompt> | + | ## | + | ## : | + | ## | + | ## Fonctionnement : | + | ## -------------- | + | ## | + | ## | + | ## | + | ##---------------------------------------------------------------------------- | + | . | + | . | + | . | + | | + +----------------------------------------------------------------------------------------------------+ + + Note : Les lignes commencant par 2 "#" sont utilisees pour generer l aide, leur maintient est donc necessaire + pour garantir la fiabilite de l information. Ce sont ces lignes, qui sont lues lors de l utilisation de + l'option par defaut "-h". + + 1.1 Elements du cartouche + 1.1.1 Meta-donnees + - : peut prendre les valeurs suivantes -> cre, ano, evo, typo + cre : Creation du script. + evo : Evolution du script -> Ajout de nouvelles fonctionnalites, Amelioration du code. + ano : Correction du code suite a un comportement inattendu. + typo : Ajout de commentaires, de texte ou correction gramatical sans influence sur le code. + + - : + + - : Format x.y.z + Pour le suivie des versions on utilisera le versionnement semantique (voir paragraphe III-1.2). + + 1.1.2 Paragraphe + - Mise a jour : Ce paragraphe est utilise pour suivre l evolution des versions. La derniere version en + vigueur doit etre reportee dans le premier paragraphe. + + - Dependance : Permet de definir la liste ainsi que la version des scripts qui sont appeles. + Dans le cas d un changement cela permet de connaitre les scripts qui sont impactes. + Pour le moment aucun script n exploite cette meta-donnee. + Present pour un future usage. + + - Liste des options : La declaration des options n est pas obligatoire. + + Si aucune declaration n est presente alors la librairie params.lib ne fait aucune action. + Dans ce cas les options par defaut -h, -log, -hist, -cpt, -s et -dbg ne seront pas disponible. + + Si le script ne necessite pas d option mais que l on souhaite disposer des options par defaut, il + faudras declarer une option bidon. ex: "# @OPT: f:bidon::::::" + + Si la declaration existe alors le socle gerera les parametres en entree du script, ainsi que + les options par defaut -h, -log, -hist, -cpt, -s et -dbg. Ces mots cle sont reserve et ne + peuvent pas etre utilise par le script. + + La declaration est realise dans le paragraphe "Liste des options et arguments". Chaque + option est identifiee par l entete de ligne "# @OPT:" suivi de la description. + La description consiste en une liste de parametres separes par ":" + ::::::: + + L ordre des parametre est fige et tous doivent etre presents. + 8 champs sont obligatoires, soit 7 caracteres ":" (on ne compte pas le caracatere ":" suivant @OPT). + Exemple de declaration valide : + # @OPT: fb:h::0::: + # @OPT: fb:s::0::: + # @OPT: f:dbg:SH_NIV_DEBUG:0/1::: + # @OPT: fb:log::0::: + # @OPT: f:hist:SH_ARG_HIST:0/1:10:: + # @OPT: oM:i:G_INSTANCE:1/1:ALL:dbid: + # @OPT: oM:pr:G_PR_NOM:1/1:sq,t,l: + + : Propriete de l attribu defini par l agregation des lettres suivantes + f -> Option falcultative + b -> Booleen + o -> Option obligatoire + M -> Argument transforme en majuscule + + : nom de l option (sans le tiret) Attention le nom de l option est senssible a la casse. + + : nom de la variable dans laquelle sera stockee le(s) argument(s) + si plusieurs arguments alors un tableau sera initialise + L index [n] commence a zero. + Le nombre d arguments effectivement passes a la commande est "${#[*]}". + L valeur max de l index [n] est "${#[*]} - 1". + + : nombre d arguments attendus de la forme "min/max", "min/", "max" ou "" + si vide ou "0" alors l option est booleene. + la forme "min/" considere le nombre max non determine (infini) + + : Valeur par defaut assignee a + Fonctionne si vaut 0/1 1/1 + + : Liste des options mutellement exclusives separees par une virgule. + + : Liste des options inclusives separees par une virgule. + + Lors de l initialisation les marqueurs "@OPT" sont lues et analysees. + Le resultat est compare aux arguments et options sousmis au script + et les variables suivantes son initialisees ... + + - SH_OPTION_ : Initialisee a "1" (Vrai) ou "0" (Faux) selon que l option est respectivement utilise ou non. + Il existe toujours une variable par option declaree. Ceci concerne aussi les options par defaut + gere par la librairie params.lib + - SH_ARG_ : Cette variable existe uniquement si le champ est null et si le type n est pas booleen. + Par defaut elle est initialisee a null ou avec la valeur + Si le champ est renseigne, alors SH_ARG_ est remplacee pas . + Si l option associee peut prendre plusieurs arguments, alors les variables + SH_ARG_ ou sont des tableaux dont l index commence a zero. + La taille du tableau peut etre recuperee via ${#SH_ARG_[*]} ou ${#[*]}. + + Les option -h, -s, -log [id], -hist [N] et -dbg N + sont prises en charge automatiquement. Ces noms sont donc reserves. + + Les options par defaut realisent les actions suivantes : + + -h : Affiche l aide du script (Ligne du cartouche qui commence par "##") + -s : Mode silence. Plus d'affichage sur le terminal. + Initialise la variable SH_SILENCE a "oui" + -log [id] : Affiche le dernier journal ou le journal "id" (identifiant de session d'execution). + -cpt [id] : Affiche le dernier compte-rendu ou le Compte-rendu "id" (identifiant de session d'execution). + -hist [N] : Affiche l historique des "N" dernieres executions (N=10 par dafaut) + -dbg N : Activation du mode debug au niveau "N". Active les messages geres par la librairie fct_message + dont l'option -debug est utilisee. + + - Arguments : La declaration des argument du script n est pas obligatoire + + Attention : Si aucune option "@OPT:" n est declaree alors il n y auras pas de prise en charge des arguments. + Si votre script ne necessite pas d option, mais qu il presente des arguments, alors il faudras declarer + une option bidon :"# @OPT: f:bidon::::::" + + La declaration est realise dans le paragraphe "Liste des options et arguments". + Elle est identifiee par l entete de ligne "# @ARG:" suivi de la description. + Il ne peut y avoir qu une ligne de description pour les arguments. + (Si plusieurs lignes avec le marqueur @ARG existe, alors seul la premiere et prise en compte) + + La description consiste en une liste de parametres separes par ":" + :::: + + L ordre des parametres est fige et tous doivent etre presents. + + : Propriete de l attribu defini par l agregation des lettres suivantes + f -> Argument falcultative + o -> Argument obligatoire + M -> Argument transforme en majuscule + + : nom de la variable dans laquelle sera stockee le(s) argument(s) + si plusieurs arguments alors un tableau sera initialise + L index [n] commence a zero. + Le nombre d arguments effectivement passes a la commande est "${#[*]}". + L valeur max de l index [n] est "${#[*]} - 1". + + Si n est pas renseigne alors la variable SH_ARGS[] est initialisee + + : nombre d arguments attendus de la forme "min/max", "min/", "max" ou "". + si vide alors on considere que le nombre d arguments est a minima de 1. + la forme "min/" considere le nombre est a minima de "min". + + : Valeur par defaut assignee a + Fonctionne si vaut 0/1 1/1 + + ATTENTION + Si le caractere "&" est present dans la valeur d un argument, alors cette valeur doit etre encadree + par une simple cote et le caractere "&" doit etre proteger par un anti-slash "\". + + Le cas echeans le shell generera un fils qui tentera l execution d'un script portant le nom de la valeur de l argument. + + 1.2 Versionnement semantique + 1.2.1 Usage + L idee de l utilisation du versionnement semantique est de definir clairement les intentions + d un changement dans un code pour les clients de ce dernier. Ceci permet de fiabiliser la mise en + place de dependances et de determiner les impacts d un changement. + + 1.2.2 Format + Le format utilise est le suivant x.y.z + x est l identifiant de version majeure. + y est l identifiant de version mineure. + z est l identifiant de version de correction. + + 1.2.3 Semantique + - Version majeure X : Il vaut "0" lors du developpement, le script est considere non valide et ne + devrait pas etre appele par d autre script. Une fois le script valide la version + doit etre 1.0.0 (premiere version stable). + Il doit etre incremente si des changements dans le code n assure plus la compatibilite + ascendante. Les identifiants de version mineure et de correction doivent etre remis + a zero quand l identifiant de version majeure est incremente. + + - Version mineur y : Doit etre incremente lors de l ajout de nouvelle fonctionnalite ou d amelioration + du code qui n on t pas d impact sur la compatibilite ascendante. L identifiant de + version de correction doit ĂȘtre remis a zero lorsque l identifiant de version mineure + est incremente. + + - Version de correction z : Doit ĂȘtre incremente si seules des corrections retro-compatibles sont introduites. + Une correction est definie comme un changement interne qui corrige un comportement incorrect. + Il peut etre incremente lors de correction typographique ou grammaticale. + + + 2 - Initialisation du socle. + Par defaut les librairies du socle sont chargees a la connexion. Mais pour qu elles puissent etre operationnelles + il faut initialiser les variables de session. + Ceci est realise en sourcant le fichier "${NC_EXPL_CFG}/init.conf" au debut du script : + + Rem : L analyse des options et arguments est aussi realise par "${NC_EXPL_CFG}/init.conf". + + +----------------------------------------------------------------------------------------------------+ + | | + | #!/bin/bash | + | ##---------------------------------------------------------------------------- | + | . | + | | + | . | + | ##---------------------------------------------------------------------------- | + | #----------------------------------------------------------------------------- | + | # Initialisation de l environement | + | #----------------------------------------------------------------------------- | + | if [ ! -f ${NC_EXPL_CFG}/init.conf ] | + | then | + | echo "Fichier d initialisation du socle \${NC_EXPL_CFG}/init.conf n existe pas !" | + | echo "Arret du script par securite" | + | exit 250 | + | else | + | . ${NC_EXPL_CFG}/init.conf | + | fi | + | . | + | . | + | | + +----------------------------------------------------------------------------------------------------+ + + 3 - Structure d un script + Voici les elements qui devraient etre present a minima dans les script Bash. Ceci est recommande pour + assurer une homogeneite dans l ensemble du socle. + + +----------------------------------------------------------------------------------------------------+ + | | + | #!/bin/bash | + | ##---------------------------------------------------------------------------- | + | . | + | | + | . | + | ##---------------------------------------------------------------------------- | + | #----------------------------------------------------------------------------- | + | # Initialisation de l environement | + | #----------------------------------------------------------------------------- | + | if [ ! -f ${NC_EXPL_CFG}/init.conf ] | + | then | + | echo "Fichier d initialisation du socle \${NC_EXPL_CFG}/init.conf n existe pas !" | + | echo "Arret du script par securite" | + | exit 250 | + | else | + | . ${NC_EXPL_CFG}/init.conf | + | fi | + | | + | #----------------------------------------------------------------------------- | + | # Definition des fonctions | + | #----------------------------------------------------------------------------- | + | # | + | function fct_un | + | { ... | + | } | + | | + | #----------------------------------------------------------------------------- | + | function fct_deux | + | { ... | + | } | + | | + | #----------------------------------------------------------------------------- | + | # Programme principal MAIN | + | #----------------------------------------------------------------------------- | + | # | + | fct_message "${SH_PROG}" | + | fct_message "version ${SH_PROG_VERSION}" | + | | + | # -- Initialisation des variables par defaut | + | # -- --------------------------------------- | + | G_VAR1=${G_AVR1:="Valeur par defaut"} # | + | ... | + | | + | # -- Control de coherence des options | + | # -- -------------------------------- | + | | + | # -- Traitement | + | # -- ---------- | + | | + | < ... Code du script ...> | + | | + | fct_erreur 0 | + | | + +----------------------------------------------------------------------------------------------------+ + + Note : La construction /G_VAR1=${G_AVR1:="Valeur par defaut"}/ permet de definir une variable avec une + valeur par defaut, qui peut etre surchargee dans le fichier de configuration {NC_EXPL_CFG}/.conf + + Concernant les fonctions /fct_message/ et /fct_erreur/ voir le chapitre V. + + 4 - Actions realisees au lancement d un script + Le script commence par le chargement de la configuration ". ${NC_EXPL_CFG}/init.conf" + un certain nombre d action sont effectuees par defaut en plus de l initialisation des variables de session. + + - Initialisation des variables de session (Cf. II.3) + + - Generation d'un numero de session unique sous la varable ${SH_SESSION_ID} + + - Chargement du fichier ${SH_FICCFG} + + - Rotation des fichiers ${SH_FICLOG} et ${SH_FICCPT} selon les retentions respective ${SH_RETENTION_LOG} et ${SH_RETENTION_CPT} + + - Purge des fichiers temporaires (${NC_EXP_ROOT}/tmp) anterieurs selon la retentions ${SH_RETENTION_LOG} + et suppression des fichiers generes par le script utilsant le socle dans ${NC_EXP_ROOT}/log et ${NC_EXP_ROOT}/cpt + + - Ecriture dans le fichier ${SH_FICTRC} de la date de debut execution, ainsi que des arguments passes au script + + - Initialisation du fichier ${SH_FICLOG} a vide + + - Analyse des parametres passes au script + Cette analyse ne fonctionne que si les options ont ete declarees dans l entete du script (Cf. III.1.1.2) + + + +IV - Nomenclature + ------------ + 1 - Fichier temporaire + Les fichiers temporaires doivent etre ecrits dans le repertoire ${NC_EXPL_TMP}. + Les noms des fichiers temporaires sont de le forme : _${SH_SESSION_ID}.tmp + De cette facon il seront geres par le socle (Suppresion automatique) + + 2 - Nom des executables ( fichiers du dossier {racine}/bin ) + Les noms des fichiers doit etre de la forme : +
_
+            
_.
+            
__[_].
+            _.
+
+          
      est une des valeurs suivantes : "sys", "dba", "exp", "ctl", "aud", "int"
+
+                     - "sys" : Scrit d administration systeme.
+                     - "dba" : Script d administration base de donnees
+                     Ces scripts peuvent presenter des risques et doivent faire 
+                     l objet d une attention particuliere lors de leurs execution.
+
+                     - "exp" : Script d exploitation devolue principalement au traitement reccurent
+                     Ces scripts sont reserves a l'exploitation courante. Il peuvent 
+                     modifier le systeme dans le cadres de traitements reccurents.
+                     Leurs execution est de risque modere, comme respecter une date d execution.
+                     Il sont reserves a l exploitation systeme uniquement. Dans le cas d un traitement
+                     reccurrent pour le compte d une application le nom doit etre de la forme _.
+
+                     - "int" : Script dedier aux interfaces entre applications
+                     Ces script doivent fair l objet d une attention particuliere car il peuvent modifier
+                     les donnees applicative et peuvent etre contraint par des conditions d execution.
+
+                     - "ctl" : Script de controle (devolu principalement a icinga)
+                     - "aud" : Script d audit ne modifiant pas le systeme.
+                     Ces scripts peuvent etre executes sans aucun risque.
+ 
+              est libre, doit refleter si possible la fonction du script.
+          
+           est une des valeurs suivantes :
+                      - "rb"            : Script Ruby.
+                      - "sh"            : Script Bash.
+                      - Pas d extention : Script C
+          
+                est le nom de  application a laquelle le script est dedie.
+                     Ces scripts sont reserves a une application particuliere, 
+                     dans le cadres de l exploitation reccurente de l'application.
+
+
+V   - Description et usage des Librairies
+      -----------------------------------
+    1 - fct_message
+    --- -----------
+
+        Syntaxe  : fct_message [-cpt] [-hist] [-nolog] [-debug N] [-color Couleur] ""
+        Usage    : Cette fonction est a utiliser en remplacement de la commande "echo".
+                   Elle ajoute l horadatage au message et gere la ventilation des ecritures dans les differents fichiers de traces.
+
+        Fonction : Par defaut le message est affiche sur le terminal et est ecrit dans le fichier journal ${NC_EXPL_LOG}/.log
+                   Les options modifient la destination de l ecriture :
+                   - cpt     : Ecrit en plus du journal dans le fichier de compte-rendu ${NC_EXPL_CPT}/.cpt
+                   - hist    : Ecrit uniquement dans le fichier d historique des executions ${NC_EXPL_TRC}/.hist
+                   - nolog   : inhibe l ecritutre dans le fichier journal
+                   - debug N : N'affiche pas le message sur le terminal mais uniquement dans le fichier journal, a condition
+                               que le script soit execute en mode debug de niveau equivalent a "N" via l'option "-dbg N".
+                               Par defaut le niveau de debug est 0, ainsi si "N" vaut zero alors le message est ecrit 
+                               uniquement dans le fichier journal.
+                   - color   : Affiche le message en couleur. Les couleurs reconues sont : vert,rouge,bleu,cyan,jaune,orange,blanc et noir
+
+
+    2 - fct_affiche_ligne
+    --- -----------------
+
+       Syntaxe  : fct_affiche_ligne [entete|pied] 
+       Usage    : Affiche un tableau sur la sortie standard et dans le fichier compte-rendu ${NC_EXPL_ROOT}/