From 031d8db355b49955a1c135ca5468ae5eb607e15f Mon Sep 17 00:00:00 2001 From: Doug Le Tough Date: Sat, 22 Jul 2017 13:22:19 +0200 Subject: [PATCH] "Ajout expl_transfert_dir.sh" --- bin/expl_create_vhost.sh | 1 - bin/expl_transfert_dir.sh | 270 +++++++++++++++++++++++++++++++++++++ bin/transfert.sh | 163 ++++++++++++++++++++++ msg/expl_transfert_dir.msg | 3 + 4 files changed, 436 insertions(+), 1 deletion(-) create mode 100644 bin/expl_transfert_dir.sh create mode 100755 bin/transfert.sh create mode 100644 msg/expl_transfert_dir.msg diff --git a/bin/expl_create_vhost.sh b/bin/expl_create_vhost.sh index 8acc90e..1bc8c90 100755 --- a/bin/expl_create_vhost.sh +++ b/bin/expl_create_vhost.sh @@ -24,7 +24,6 @@ # @OPT: o:domain:domain:1/1:::: # @OPT: f:backend_host:backend_host:1/1:::: # @OPT: o:backend_port:backend_port:1/1:::: -# @OPT: f:enable_vhost:enable_vhost:1/1:false::: # #------------------------------------------------------------------------------------------------------------------ # Liste des erreurs: diff --git a/bin/expl_transfert_dir.sh b/bin/expl_transfert_dir.sh new file mode 100644 index 0000000..13c1f95 --- /dev/null +++ b/bin/expl_transfert_dir.sh @@ -0,0 +1,270 @@ +#!/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:recursive:recursive:1/1:false::: +# @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 -dst_host -src_dir -dst_dir [-recursive true] [-create true] [-dst_user ] [-dst_group ] [-dst_mode ] +## +## ex: expl_transfert_dir.sh -src_host marian -dst_host jimmy -src_dir /etc/httpd -dst_dir /home/doug -recursive true -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 -recursive est positionnée à true, la récupération sera récursive. +## Par défaut cette option vaut false. +## +## 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é +## +##----------------------------------------------------------------------------------------------------------------- +#------------------------------------------------------------------------------------------------------------------ +# 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 + + + +################################################################################## +# +# Main +# +################################################################################## + +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 + 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époertoire ${src_host}:${src_dir} n'existe pas" + fi + if [ "${create}" != "true" ]; then + fct_message "Vérification du répertoire destination ${dst_dir} sur ${dst_host}" -color jaune + 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époertoire ${dst_host}:${dst_dir} n'existe pas" + fi + 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 + TAR_OPTIONS="--no-recursive" + if [ "${recursive}" == "true" ]; then + fct_message " * Option d'archivage récursif activée" + TAR_OPTIONS="" + fi + ssh ${src_host} "sudo tar -C ${ROOT_SRC_DIR} ${TAR_OPTIONS} -cvzf /tmp/${ARCHIVE_NAME} ${BASE_SRC_DIR}" + 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 ${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 /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} -xvzf /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 +if [ "${create}" == "true" ]; then + create_dst_dir +fi +get_src_archive +cp_archive +untar_archive +set_rights +set_permissions +rm_archives + +fct_erreur 0 diff --git a/bin/transfert.sh b/bin/transfert.sh new file mode 100755 index 0000000..f3e7906 --- /dev/null +++ b/bin/transfert.sh @@ -0,0 +1,163 @@ +#!/bin/bash +#------------------------------------------------------------------------------------------------------------------ +# Script : expl_transfert_files.sh +# Auteur : Doug Le Tough +# Date : 22-07-2017 +# Version : 1.0.0 +# Objet : Permet le transfert de répertoires 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:recursive:recursive:1/1:false::: +# @OPT: f:create:create:1/1:false::: +# +#------------------------------------------------------------------------------------------------------------------ +# Liste des erreurs: +# +# 2 | erreur | stop | ${ERROR} +# +#------------------------------------------------------------------------------------------------------------------ +## +## Syntaxe : +## -------- +## +## prompt> expl_transfert_files.sh -src_host -dst_host -src_dir -dst_dir +## +## ex: expl_transfert_files.sh -src_host marian -dst_host jimmy -src_dir /etc/httpd -dst_dir /home/doug [-recursive true] [-create true] +## +## 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 -recursive est positionnée à true, la récupération sera récursive. +## Par défaut cette option vaut false. +## +## 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 l'option -create ne vaut pas true, le script remontera une erreur. +## +## +##----------------------------------------------------------------------------------------------------------------- +#------------------------------------------------------------------------------------------------------------------ +# 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 + + + +################################################################################## +# +# Main +# +################################################################################## + +# controle de l'utilisateur +if [ ! ${USER} == "asr" ]; then + rouge "Seul l'utilisateur asr peut utiliser ce script" + exit 1 +fi + +# Controle du nombre d'arguments +if [ ! $# -eq 2 ]; then + usage + exit 1 +fi + +# Controle de la validité des arguments +if [ ! $(expr index $1 ':/') -gt 0 ] || [ ! $(expr index $2 ':/') -gt 0 ]; then + rouge "Erreur dans les arguments." + usage + exit 1 +fi + +SOURCE_HOST=$(echo $1 | cut -d: -f1) +DEST_HOST=$(echo $2 | cut -d: -f1) +SOURCE_PATH=$(echo $1 | cut -d: -f2) +DEST_PATH=$(echo $2 | cut -d: -f2) + +# 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 + +jaune "Récupération sur ${SOURCE_HOST} de ${SOURCE_PATH} et copie vers ${DEST_HOST} vers ${DEST_PATH}:" + +jaune "Création de l'archive distante ${TETALABTMP}/${ARCHIVE_NAME}" +ssh ${SOURCE_HOST} "sudo tar -cvzf ${TETALABTMP}/${ARCHIVE_NAME} ${SOURCE_PATH}" +if [ ! $? -eq 0 ]; then + rouge "Erreur lors de la création de l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} à partir de ${SOURCE_PATH}" + delete_archive + exit 1 +fi + +jaune "Modification des droits et permissions sur l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME}:" +ssh ${SOURCE_HOST} "sudo chown -v asr: ${TETALABTMP}/${ARCHIVE_NAME}" +if [ ! $? -eq 0 ]; then + rouge "Erreur lors de la modification des droits et permissions sur l'archive $SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME}" + delete_archive + exit 1 +fi + +jaune "Rappatriement de l'archive distante ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} sur $(hostname)" +scp ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} ${TETALABTMP}/${ARCHIVE_NAME} +if [ ! $? -eq 0 ]; then + rouge "Erreur lors du rappatriement de l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} dans $(hostname):${TETALABTMP}/${ARCHIVE_NAME}" + delete_archive + exit 1 +fi + +jaune "Copie de l'archive locale ${TETALABTMP}/${ARCHIVE_NAME} vers ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}" +scp ${TETALABTMP}/${ARCHIVE_NAME} ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME} +if [ ! $? -eq 0 ]; then + rouge "Erreur lors de la copie de l'archive locale ${TETALABTMP}/${ARCHIVE_NAME} vers ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}" + delete_archive + exit 1 +fi + +jaune "Extraction du contenu de l'archive ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME} dans ${DEST_HOST}:${DEST_PATH}" +ssh ${DEST_HOST} "sudo tar -C ${DEST_PATH} -xvzf ${TETALABTMP}/${ARCHIVE_NAME}" +if [ ! $? -eq 0 ]; then + rouge "Erreur lors de la copie de la décompression de l'archive ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}" + delete_archive + exit 1 +fi + +delete_archive +vert "Ok" +exit 0 diff --git a/msg/expl_transfert_dir.msg b/msg/expl_transfert_dir.msg new file mode 100644 index 0000000..e57d003 --- /dev/null +++ b/msg/expl_transfert_dir.msg @@ -0,0 +1,3 @@ +1 | erreur | stop | Sortie du script | +2 | erreur | stop | ${ERROR} | +3 | erreur | exec | rm_archives |