4 changed files with 436 additions and 1 deletions
@ -0,0 +1,270 @@
@@ -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 <VM1> -dst_host <VM2> -src_dir <DIR1> -dst_dir <DIR2> [-recursive true] [-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 -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 |
@ -0,0 +1,163 @@
@@ -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 <VM1> -dst_host <VM2> -src_dir <DIR1> -dst_dir <DIR2> |
||||
## |
||||
## 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 |
Loading…
Reference in new issue