#/bin/bash
_help(){
cat << fim
Autor:
Ricardo Brito do Nascimento
Email:
britodfbr[at]incolume.com.br
Descrição:
Este script realiza o backup via repozo do plone versão 2.5.5 ou superior;
pode ser utilizado para realizar backups de versões anteriores,
entretanto não foi testado, e possivelmente será necessário
customização para funcionar adequadamente.
Além do backup realiza controle de retenção do backup, excluindo automaticamente
os arquivos antigos.
Variáveis de configuração:
DAYS - dias de retenção;
FILESTORAGEDIR - diretório de instalação;
BACKUPDIR - diretório que os backups serão mantidos;
REPOZO - plone 3.3.5 ou superior '"/opt/p335/${B}/bin/repozo"';
plone 2.5.5 '`find ${FILESTORAGEDIR} -name "*repozo*" -iwholename "*bin*"`'
EXCEPTION[n] - diretórios ou arquivos que terão validade ignorada;
VOL[n] - volumes de disco remotos;
STORAGEDIR[n] - ponto de montagem dos volumes de disco;
ARQANX - diretório para gravar os arquivos anexos FSS ou Blobstorage
BKPCONF - diretório para gravar os backups de configuração
Versão: 9
Execução:
$0; ou
$0 -h | --help | ?
fim
}
########### Variavéis de configuração ########
DAYS=2
HOSTNAME=$(/bin/hostname | /bin/awk -F. '{if (NR>0) { A=$1 } else { A=$NF }; print A}')
VOL[0]=192.168.22.2:/vol/zope_dzeta
VOL[1]=192.168.22.2:/vol/zope_dmz
VOL[2]=192.168.22.2:/vol/zope_bkp
STORAGEDIR[0]=/opt
STORAGEDIR[1]=/storage/arquivosAnexos
STORAGEDIR[2]=/storage/backup
EXCEPTION[0]=".snapshot"
EXCEPTION[1]="arquivosAnexos"
EXCEPTION[2]="plone_conf.tar"
EXCEPTION[3]="Products.list"
FILESTORAGEDIR=${STORAGEDIR[0]}/p255
ARQANX=${STORAGEDIR[1]}
BACKUPDIR=${STORAGEDIR[2]}/${HOSTNAME}
BKPCONF=$BACKUPDIR/conf
REPOZO=($(find $FILESTORAGEDIR -iwholename "*bin*" -name "repozo*" -print))
TAR=$(which tar)
FIND=$(which find)
RM=$(which rm)
#REMOTEHOST="192.168.22.2"
#REMOTEDIR=/vol/zope_dmz
#LOCALDIR=/storage/arquivosAnexos
#
########### Funções ################
_erro(){
cat << fim
opção inválida, consulte o help, com as opções --help ou, -h ou, ?.
fim
}
_confTar(){
echo "===inicio confTar=== "
[ ! -e ${BKPCONF} ] && mkdir -pv $BKPCONF;
${FIND} ${FILESTORAGEDIR} -iwholename "*etc*" -name "*.conf" -printf '%h %f \n'|while read a b; do A=$(dirname `dirname ${a#${STORAGEDIR[0]}}`); echo $A; echo $b; echo "---"; tar -rvf ${BKPCONF}/${HOSTNAME}`sed 's;/;_;g' <<< $A`_`date +%-F`.tar $a/$b; echo "===="; done
${FIND} ${FILESTORAGEDIR} -maxdepth 1 -mindepth 1 -type f ! -iwholename "*Zope*" \( -name "*.cfg" -o -name "bootstrap.py" \) -printf '%h %f \n'|while read p f; do ${TAR} rvf ${BKPCONF}/${HOSTNAME}_$(sed 's\/\_\g;' <<< ${p#${STORAGEDIR[0]}}).tar $p/$f; done
#
echo "===fim confTar=== "
}
_verifyNFS(){
# Este script verifica o compartilhamento remoto, se não tiver ativo
# ele é montado
#echo "==="
##Unitários
#echo ${VOL[0]}
#echo ${VOL[1]}
#echo ${VOL[2]}
#echo "==="
##Quantitativos
#echo ${#VOL[*]}
##Todos os elementos
#echo ${VOL[@]}
#echo "==="
##Todos os elementos
#echo ${VOL[*]}
#
#echo "==="
mount
echo "==="
echo "=inicio verifyNFS="
for ((i=0;i<${#VOL[*]};i++ )); do
echo $i - ${VOL[$i]}
grep -Eo ${VOL[$i]} /etc/mtab >> /dev/null
[ `echo $?` == "1" ] && mount ${VOL[$i]} ${STORAGEDIR[$i]}||echo "ok"
done
echo "==="
mount
echo "=fim verifyNFS="
}
_repozoBackup(){
echo "=inicio repozoBackup="
echo ${REPOZO[@]}
if [ ${#REPOZO[*]} -ge 1 ]; then
${FIND} $FILESTORAGEDIR -type f -iwholename "*var*" -name "*.fs" -printf '%h %f\n'|while read a b; do A=$BACKUPDIR/`dirname ${a#${FILESTORAGEDIR}}`/${b%.fs}; mkdir -pv $A; ${REPOZO[@]} -BFvzf $a/$b -r $A; echo ---; done
else
${FIND} $FILESTORAGEDIR -type f -iwholename "*var*" -name "*.fs" -printf '%h %f\n'|while read a b; do A=$BACKUPDIR; B=$(awk -F/ '{print $4"/"$5}' <<< ${a}); C=${b%.fs}; mkdir -pv ${A}/${B}/${C}; ${REPOZO} -BFvzf ${a}/${b} -r ${A}/${B}/${C}; done
fi
echo "=fim repozoBackup="
}
_removeOld(){
echo "=inicio removeOld="
LIMITE=$(expr ${#EXCEPTION[*]} - 1)
COMMAND="${FIND} $BACKUPDIR ( -ctime +${DAYS} -o -atime +${DAYS} -o -mtime +${DAYS} )"
for ((i=0;i<=${LIMITE};i++)); do
# echo $i;
# echo ${LIMITE}
# echo ${COMMAND}
[ $i -eq 0 ] && COMMAND+=" ! ( ";
COMMAND+=" -iwholename \"*${EXCEPTION[$i]}*\"";
if [ \( $i -ge 0 \) -a \( $i -lt ${LIMITE} \) ]; then
COMMAND+=" -o ";
else
COMMAND+=" ) -exec rm -vrf {} ;";
#COMMAND+=" ) -exec ls {} ;";
fi
done
echo ${COMMAND}
${COMMAND}
echo "=fim removeOld="
}
_start(){
_erro;
}
_stop(){
_erro;
}
_restart(){
_erro
}
_status(){
_erro
}
case $1 in
start) _start;;
stop) _stop;;
status) _status;;
restart) _restart;;
-h|--help|?) _help;;
'') echo '= Menu =='
_verifyNFS;
_repozoBackup;
_confTar;
_removeOld;
echo;;
*) _erro ;;
esac