lunes, 29 de abril de 2013

BackUp - Zimbra Open Source

La version de Zimbra open source no cuenta con una interfaz web de BackUp's, para ello existen scripts que se pueden realizar mediante los comandos de Zimbra. Para un facil manejo de ello, elabore un pequeño script.

Edito el archivo /usr/local/sbin/ZimbraBackup.sh

# vim /usr/local/sbin/ZimbraBackup.sh


#!/bin/bash
echo ""
echo "*******************************************"
echo "********  Zimbra BackUp & Restore  ********"
echo "*******************************************"
echo ""
echo "Seleccione una opcion..."
echo ""
echo "BackUp completo de todo el Zimbra         : opcion 1"
echo "BackUp de todas las cuentas                       : opcion 2"
echo "BackUp de una cuenta                              : opcion 3"
echo "Restore completo de todo el Zimbra                : opcion 4"
echo "Restore de todas las cuentas                      : opcion 5"
echo "Restore de una cuenta                             : opcion 6"
echo "Enviar BackUp por SSH a otro servidor             : opcion 7"
echo ""
echo -n "Ingrese opcion : "
read opcion
if [ $opcion -eq 1 ]; then
        echo ""
        echo "BackUp Completo"
        echo "---------------"
        echo Start time of the backup = $(date +%T)
        before="$(date +%s)"
        echo -n "Ingrese ruta destino local :"
        read destino
        echo "Se va a realizar el BackUp completo de /opt/zimbra a $destino ..."
        /usr/bin/rsync -aHK --delete /opt/zimbra $destino/
        before2="$(date +%s)"
        echo The process lasted = $(date +%T)
        after="$(date +%s)"
        elapsed="$(expr $after - $before)"
        hours=$(($elapsed / 3600))
        elapsed=$(($elapsed - $hours * 3600))
        minutes=$(($elapsed / 60))
        seconds=$(($elapsed - $minutes * 60))
        echo The complete backup lasted : "$hours hours $minutes minutes $seconds seconds"
        else
                if [ $opcion -eq 2 ]; then
                echo ""
                echo "Backup all email accounts"
                echo "-------------------------"
                echo Start time of the backup = $(date +%T)
                before="$(date +%s)"
                echo ""
                echo -n "Ingrese ruta destino local :"
                read destino
                echo "Generando backup a la ruta $destino/ ..."
                DATE=`date +"%a"`
                ZDUMPDIR=$destino/$DATE
                ZMBOX=/opt/zimbra/bin/zmmailbox
                if [ ! -d $ZDUMPDIR ]; then
                mkdir -p $ZDUMPDIR
                fi
                echo " Running zmprov ... "
                       for mbox in `/opt/zimbra/bin/zmprov -l gaa`
                do
                echo " Generating files from backup $mbox ..."
                       $ZMBOX -z -m $mbox getRestURL "//?fmt=zip" > $ZDUMPDIR/$mbox.zip
                done
                before2="$(date +%s)"
                echo The process lasted = $(date +%T)
                after="$(date +%s)"
                elapsed="$(expr $after - $before)"
                hours=$(($elapsed / 3600))
                elapsed=$(($elapsed - $hours * 3600))
                minutes=$(($elapsed / 60))
                seconds=$(($elapsed - $minutes * 60))
                echo The complete backup lasted : "$hours hours $minutes minutes $seconds seconds"
                else
                        if [ $opcion -eq 3 ]; then
                        echo ""
                        echo "Backup una cuenta"
                        echo "-----------------"
                        echo Start time of the backup = $(date +%T)
                        before="$(date +%s)"
                        echo ""
                        echo -n "Ingrese ruta destino local :"
                        read destino
                        echo -n "Ingrese una cuenta de correo, ejemplo user@dominio.com :"
                        read cuenta
                        echo "Generando backup a la ruta $destino/ ..."
                        DATE=`date +"%a"`
                        ZDUMPDIR=$destino/$DATE
                        ZMBOX=/opt/zimbra/bin/zmmailbox
                        if [ ! -d $ZDUMPDIR ]; then
                        mkdir -p $ZDUMPDIR
                        fi
                        $ZMBOX -z -m $cuenta getRestURL "//?fmt=zip" > $ZDUMPDIR/$cuenta.zip
                        before2="$(date +%s)"
                        echo The process lasted = $(date +%T)
                        after="$(date +%s)"
                        elapsed="$(expr $after - $before)"
                        hours=$(($elapsed / 3600))
                        elapsed=$(($elapsed - $hours * 3600))
                        minutes=$(($elapsed / 60))
                        seconds=$(($elapsed - $minutes * 60))
                        echo The complete backup lasted : "$hours hours $minutes minutes $seconds seconds"
                        else
                                if [ $opcion -eq 4 ]; then
                                echo ""
                                echo "Restore todo el Zimbra"
                                echo "----------------------"
                                echo Start time of the backup = $(date +%T)
                                before="$(date +%s)"
                                echo ""
                                echo -n "Ingrese ruta donde esta el Backup completo(todo el directorio zimbra) :"
                                read origen
                                echo "Generando backup desde $origen hacia /opt/zimbra..."
                                /usr/bin/rsync -aHK --delete $origen /opt/zimbra
                                /bin/chown -R zimbra:zimbra /opt/zimbra
                                before2="$(date +%s)"
                                echo The process lasted = $(date +%T)
                                after="$(date +%s)"
                                elapsed="$(expr $after - $before)"
                                hours=$(($elapsed / 3600))
                                elapsed=$(($elapsed - $hours * 3600))
                                minutes=$(($elapsed / 60))
                                seconds=$(($elapsed - $minutes * 60))
                                echo The complete backup lasted : "$hours hours $minutes minutes $seconds seconds"
                                else
                                        if [ $opcion -eq 5 ]; then
                                echo ""
                                echo "Restore all email accounts"
                                echo "--------------------------"
                                echo Start time of the backup = $(date +%T)
                                before="$(date +%s)"
                                echo ""
                                echo -n "Ingrese ruta de origen :"
                                read origen
                                echo "Restaurando backup desde $origen/ ..."
                                ZMBOX=/opt/zimbra/bin/zmmailbox
                                if [ ! -d $origen ]; then
                                echo "Backups do not exist !"
                                exit 255;
                                fi
                                for mbox in `/opt/zimbra/bin/zmprov -l gaa`
                                do
                                echo " Restoring files from backup $mbox ..."
                                $ZMBOX -z -m $mbox postRestURL "//?fmt=zip&resolve=reset" $origen/$mbox.zip
                                done
                                before2="$(date +%s)"
                                echo The process lasted = $(date +%T)
                                after="$(date +%s)"
                                elapsed="$(expr $after - $before)"
                                hours=$(($elapsed / 3600))
                                elapsed=$(($elapsed - $hours * 3600))
                                minutes=$(($elapsed / 60))
                                seconds=$(($elapsed - $minutes * 60))
                                echo The complete backup lasted : "$hours hours $minutes minutes $seconds seconds"
                                else
                                        if [ $opcion -eq 6 ]; then
                                echo ""
                                echo "Restore de una cuenta"
                                echo "---------------------"
                                echo Start time of the backup = $(date +%T)
                                before="$(date +%s)"
                                echo ""
                                echo -n "Ingrese ruta de origen :"
                                read origen
                                echo -n "Ingrese la cuenta de correo, ejemplo user@dominio.com :"
                                read cuenta
                                echo "Restaurando la cuenta $cuenta desde $origen ..."
                                ZMBOX=/opt/zimbra/bin/zmmailbox
                                $ZMBOX -z -m $cuenta postRestURL "//?fmt=zip&resolve=reset" $origen/$cuenta.zip
                                before2="$(date +%s)"
                                echo The process lasted = $(date +%T)
                                after="$(date +%s)"
                                elapsed="$(expr $after - $before)"
                                hours=$(($elapsed / 3600))
                                elapsed=$(($elapsed - $hours * 3600))
                                minutes=$(($elapsed / 60))
                                seconds=$(($elapsed - $minutes * 60))
                                echo The complete backup lasted : "$hours hours $minutes minutes $seconds seconds"
                                else
                                        if [ $opcion -eq 7 ]; then
                                echo ""
                                echo "Enviar por SSH a otro servidor"
                                echo "------------------------------"
                                echo Start time of the backup = $(date +%T)
                                before="$(date +%s)"
                                echo ""
                                echo -n "Ingrese ruta del BackUp :"
                                read origen
                                echo -n "Ingrese la IP y ruta destino del BackUP, ejemplo 192.168.1.100:/backup/ :"
                                read destino
                                echo "Enviado el Backup desde $origen hacia el servidor $destino ..."
                                /usr/bin/rsync -aHK --delete $origen $destino
                                before2="$(date +%s)"
                                echo The process lasted = $(date +%T)
                                after="$(date +%s)"
                                elapsed="$(expr $after - $before)"
                                hours=$(($elapsed / 3600))
                                elapsed=$(($elapsed - $hours * 3600))
                                minutes=$(($elapsed / 60))
                                seconds=$(($elapsed - $minutes * 60))
                                echo The complete backup lasted : "$hours hours $minutes minutes $seconds seconds"
                                else
                                echo "Ingrese una opcion valida"
                                fi
                                fi
                        fi
                fi
        fi
        fi
fi

Finalmente le damos permiso de ejecucion


# chmod +x /usr/local/sbin/ZimbraBackup.sh

Listo, espero le sirva a alguien ...