diff options
author | root <root@toothrot.meleeweb.net> | 2007-08-29 10:19:50 +0200 |
---|---|---|
committer | root <root@toothrot.meleeweb.net> | 2007-08-29 10:19:50 +0200 |
commit | 38f171205b76110ec10d060e86435d3503bc1140 (patch) | |
tree | 99e379baa4c6ee631eae991bcdd088cbc3784364 | |
parent | Make fsave.sh executable (diff) | |
download | fsave-38f171205b76110ec10d060e86435d3503bc1140.tar.gz |
Too big, too heavy, too slow
Have been replaced by powerfull new scripts, fast, concurrent actions, stronger
So here the last commit which some new modules
-rw-r--r-- | cnf/fsave.conf | 22 | ||||
-rw-r--r-- | src/ejabberd.sh | 44 | ||||
-rw-r--r-- | src/files.sh | 10 | ||||
-rwxr-xr-x[-rw-r--r--] | src/fsave.sh | 66 | ||||
-rw-r--r-- | src/gest-screen.sh | 14 | ||||
-rw-r--r-- | src/gest-url.sh | 28 | ||||
-rw-r--r-- | src/iptables.sh | 36 | ||||
-rw-r--r-- | src/ldap.sh | 37 | ||||
-rw-r--r-- | src/mysql.sh | 40 | ||||
-rw-r--r-- | src/typo.sh | 41 |
10 files changed, 279 insertions, 59 deletions
diff --git a/cnf/fsave.conf b/cnf/fsave.conf index daab5e8..381404c 100644 --- a/cnf/fsave.conf +++ b/cnf/fsave.conf @@ -1,7 +1,7 @@ # /etc/fsave.conf # Fichier de configuration de fsave # -# (c) 2005-2006 Bertand Jacquin <beber_AT_meleeweb.net> +# (c) 2005-2007 Bertand Jacquin <beber@meleeweb.net> # Under GPL-2 # PATH_TO_SAVE: @@ -19,27 +19,23 @@ # mysql://127.0.0.1 mysql://root:motdepasse@sbdg.domain.com/phpbb \ # mysql://john@localhost" # -PATH_TO_SAVE=" /etc /var/chroot /var/www/ /usr/local \ - /home/beber/cic.gsb /home/beber/.enlightenment \ - /home/beber/bin /root/bin \ - mysql://beber@localhost" - -#PATH_TO_SAVE=" /etv \ -# /dev \ -# mysql://root:@localhost/sys_cacti \ -# ssh://zesdfx" +#PATH_TO_SAVE="typo:///var/www/else-projects.org/htdocs/typo" # DEST: # Destination des sauvegardes (peut etre un montage ou autre) # Préférer une partition prévue a cet effet # -DEST="/mnt/save" +DEST="/data/backup" # TO_UMOUNT: # La partition de sauvegarde doit-elle etre démontée a la fin de la procédure ? # Peut etre O ou 1 -TO_UMOUNT=0 +TO_UMOUNT=1 + +# EMAILTO: +# Definie le destinataire des sauvegardes +EMAILTO="beber.arch@gmail.com" # MODULES: # Modules a charger -MODULES="mysql" +MODULES="mysql ejabberd typo iptables ldap" diff --git a/src/ejabberd.sh b/src/ejabberd.sh new file mode 100644 index 0000000..0df3022 --- /dev/null +++ b/src/ejabberd.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# +# (c) 2005-2007 Bertrand Jacquin <beber@meleeweb.net> +# Under GPL-2 +# +# Module ejabberd pour fsave + +REGISTER_PROTO="$REGISTER_PROTO ejabberd:ejabberd_archive" + +ejabberd_archive() +{ + local node="${FUSER}@${FHOST}" + + moreindent + local FDEST="${DEST}/ejabberd/${node}" + check_fdest + + einfo "ejabberd: Dumping ejabberd database (node: ${node})" + local cmd="ejabberdctl ${node} dump ${FDEST}/${DATE}.db.txt" + moreindent + eecho "${cmd}" + ${cmd} + + lessindent + + einfo "ejabberd: Backup ejabberd database (node: ${node})" + local cmd="ejabberdctl ${node} backup ${FDEST}/${DATE}.db" + moreindent + eecho "${cmd}" + ${cmd} + + einfo "ejabberd: Compressing backup" + local cmd="tar cjf ${FDEST}/${DATE}.tar.bz2 ${FDEST}/${DATE}.db*" + eecho "${cmd}" + ${cmd} + + rm ${FDEST}/${DATE}.db* + + lessindent + + export LAST_ARCH=${FDEST}/${DATE}.tar.bz2 + + lessindent +} diff --git a/src/files.sh b/src/files.sh index 798ff98..5fb78ec 100644 --- a/src/files.sh +++ b/src/files.sh @@ -1,6 +1,6 @@ -#!/bin/sh +#!/bin/bash # -# (c) 2005-2006 Bertand Jacquin <beber_AT_meleeweb.net> +# (c) 2005-2007 Bertand Jacquin <beber@meleeweb.net> # Under GPL-2 # # Modules de sauvegarde de repertoire et fichier pour fsave @@ -26,8 +26,10 @@ files_archive() check_fdest einfo "Taring $1 to ${FDEST}/${DATE}.tar.bz2" - eecho "tar -cj --atime-preserve --preserve-permissions --index-file ${FDEST}/${DATE}.log -f ${FDEST}/${DATE}.tar.bz2 $1" - tar -cj --atime-preserve --preserve-permissions --index-file ${FDEST}/${DATE}.log -f ${FDEST}/${DATE}.tar.bz2 $1 2>&1 >> ${FDEST}/${DATE}.log + eecho "tar -cj --atime-preserve --preserve-permissions -f ${FDEST}/${DATE}.tar.bz2 $1" + tar -cj --atime-preserve --preserve-permissions -f ${FDEST}/${DATE}.tar.bz2 $1 2>&1 + + export LAST_ARCH="${FDEST}/${DATE}.tar.bz2" lessindent lessindent diff --git a/src/fsave.sh b/src/fsave.sh index d879266..9f71f74 100644..100755 --- a/src/fsave.sh +++ b/src/fsave.sh @@ -1,30 +1,41 @@ #!/bin/sh -# (c) Beber 2005-2006 <beber_AT_meleeweb.net> +# (c) Beber 2005-2007 <beber@meleeweb.net> # Under GPL-2 -# Sauvegarde de répertoire pour crontab -# Monte la destination si possible et démontage +# Sauvegarde de répertoire pour crontab +# Monte la destination si possible et démontage # Enregistre au format <destination>/<chemin a sauvegarder>-<date du jour>.tar.bz2 -# Création d'un log +# Création d'un log # Todo: -# Si destination non trouvé alors rechercher le point de montage qui serait le plus adéquate et test de récursivité (si repertoire dans partition, !root de la partition) -# Gestion des différentes sauvegarde faite +# Si destination non trouvé alors rechercher le point de montage qui serait le plus adéquate et test de récursivité (si repertoire dans partition, !root de la partition) +# Gestion des différentes sauvegarde faite # Gestion du nombre max de sauvegarde | date maxi | temps de stockage max (par options) -# Calcul de la taille moyenne d'une sauvegarde pour éviter le remplissage de la partition de stockage +# Calcul de la taille moyenne d'une sauvegarde pour éviter le remplissage de la partition de stockage # Suppression d'une vieille sauvegarde (par options) -# Laisser le choix du démontage a la fin (par options) +# Laisser le choix du démontage a la fin (par options) # SCP sur machine distante de la sauvegarde # Script pour la restauration -# Script pour visualiser/gérer les sauvegarde -# Vérif de si sauvegarde sur machine distante ok +# Script pour visualiser/gérer les sauvegarde +# Vérif de si sauvegarde sur machine distante ok # Sauvegarde de /dev/x (dd) # Sauvegarde svn (svnadmin dump / hotcopy) # Sauvegarde mysql -# Rajouter la possiblité de sauvegarder une table -# Modifier le code pour plus de flexibilité dans le traitement des user, pass, host & bases +# Rajouter la possiblité de sauvegarder une table +# Modifier le code pour plus de flexibilité dans le traitement des user, pass, host & bases +renice 19 -p $$ > /dev/null +umask 077 + +if [ $# -ne 0 ] ; then + if [ "$1" = "-nc" ] ; then + COLOR="no" + else + echo "Unknown option: $1" 2>&1 + exit 2 + fi +fi . /usr/lib/fsave/gest-screen.sh . /usr/lib/fsave/gest-url.sh @@ -36,7 +47,7 @@ check_fsave_conf -DATE=`date +%F` +DATE=$(date +%F) check_to_save dest_mount @@ -50,27 +61,32 @@ for i in $PATH_TO_SAVE do get_proto $i - if [ -z $PROTO ] + if [ -z ${PROTO} ] then files_archive $i else +# if [ -d ${i} ] ; then +# files_archive ${i} +# break +# fi + cut_url $i - # Crado, a travailler avec du sed pour récuperer directement la commande a executer - if [ `echo $REGISTER_PROTO | grep $PROTO | wc -l` -eq 0 ] + # Crado, a travailler avec du sed pour récuperer directement la commande a executer + if [ $(echo ${REGISTER_PROTO} | grep ${PROTO} | wc -l) -eq 0 ] then moreindent - eerror "$PROTO is not a supported protocol" + eerror "${PROTO} is not a supported protocol" lessindent else - for j in $REGISTER_PROTO + for j in ${REGISTER_PROTO} do - if [ `echo $REGISTER_PROTO | grep $PROTO | wc -l` -eq 1 ] + if [ $(echo $j | grep $PROTO | wc -l) -eq 1 ] then - FCT_TO_CALL=`echo $j | cut -s -d ':' -f 2` - if [ -z $FCT_TO_CALL ] + FCT_TO_CALL=$(echo $j | cut -s -d ':' -f 2) + if [ -z ${FCT_TO_CALL} ] then - eerror "Module for $PROTO is not usable" + eerror "Module for ${PROTO} is not usable" else $FCT_TO_CALL break @@ -79,6 +95,12 @@ do done fi fi + + if [ -n "${LAST_ARCH}" ] ; then + einfo "Send $LAST_ARCH to $EMAILTO" + mpack -s "${DATE}: ${LAST_ARCH}" "${LAST_ARCH}" ${EMAILTO} + unset LAST_ARCH + fi done dest_umount diff --git a/src/gest-screen.sh b/src/gest-screen.sh index ef03776..9ec8188 100644 --- a/src/gest-screen.sh +++ b/src/gest-screen.sh @@ -7,12 +7,14 @@ DOTS="..." -GOOD=$'\e[32;01m' -WARN=$'\e[33;01m' -BAD=$'\e[31;01m' -NORMAL=$'\e[0m' -HILITE=$'\e[36;01m' -BRACKET=$'\e[34;01m' +if [ "$COLOR" != "no" ] ; then + GOOD=$'\e[32;01m' + WARN=$'\e[33;01m' + BAD=$'\e[31;01m' + NORMAL=$'\e[0m' + HILITE=$'\e[36;01m' + BRACKET=$'\e[34;01m' +fi INDENT=" " diff --git a/src/gest-url.sh b/src/gest-url.sh index 45339a6..d2a0469 100644 --- a/src/gest-url.sh +++ b/src/gest-url.sh @@ -10,7 +10,13 @@ get_proto() { local URL=$1 - PROTO=`echo $URL | cut -s -d ':' -f 1` + if [ -d ${URL} -o -f ${URL} ] ; then + PROTO= + return + fi + +# PROTO=`echo $URL | cut -s -d ':' -f 1` + PROTO=${URL%%:*} } # Fonction récuperant le user, mot de passe, host et chemin @@ -21,15 +27,23 @@ cut_url() local URL=$1 local FULL_WITHOUT_PROTO=`echo $URL | cut -c $((${#PROTO}+4))-` - local FUSER_AND_FPASS=`echo $FULL_WITHOUT_PROTO | rev | cut -s -d '@' -f 2- | rev` - local FHOST_AND_FPATH=`echo $FULL_WITHOUT_PROTO | rev | cut -s -d '@' -f 1 | rev` +# local FUSER_AND_FPASS=`echo $FULL_WITHOUT_PROTO | rev | cut -s -d '@' -f 2- | rev` +# local FHOST_AND_FPATH=`echo $FULL_WITHOUT_PROTO | rev | cut -s -d '@' -f 1 | rev` + local FUSER_AND_FPASS=${FULL_WITHOUT_PROTO//@*} + local FHOST_AND_FPATH=${FULL_WITHOUT_PROTO##*@} - FUSER=`echo $FUSER_AND_FPASS | cut -s -d ':' -f 1` - FPASS=`echo $FUSER_AND_FPASS | cut -s -d ':' -f 2-` +# FUSER=`echo $FUSER_AND_FPASS | cut -s -d ':' -f 1` +# FPASS=`echo $FUSER_AND_FPASS | cut -s -d ':' -f 2-` + FUSER=${FUSER_AND_FPASS/:*} + FPASS=${FUSER_AND_FPASS#*:} - FHOST=`echo $FHOST_AND_FPATH | cut -s -d '/' -f 1` - FPATH=`echo $FHOST_AND_FPATH | cut -s -d '/' -f 2-` +# FHOST=`echo $FHOST_AND_FPATH | cut -s -d '/' -f 1` +# FPATH=`echo $FHOST_AND_FPATH | cut -s -d '/' -f 2-` + FHOST=${FHOST_AND_FPATH//\/*} + FPATH=${FHOST_AND_FPATH##*/} FUSER=${FUSER:-"$USER"} FHOST=${FHOST:-"localhost"} + + export FUSER FPASS FHOST FPATH } diff --git a/src/iptables.sh b/src/iptables.sh new file mode 100644 index 0000000..72d9ec0 --- /dev/null +++ b/src/iptables.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# +# (c) 2005-2006 Bertrand Jacquin <beber@meleeweb.net> +# Under GPL-2 +# +# Module MySQL pour fsave + +REGISTER_PROTO="$REGISTER_PROTO iptables:iptables_archive" + +iptables_archive() +{ + moreindent + einfo "iptables: Dumping state" + + local FDEST="${DEST}/iptables" + check_fdest + + moreindent + + cmd="iptables-save -c" + eecho "${cmd}" + ${cmd} > ${FDEST}/${DATE}.ipt + + lessindent + + cmd="tar cjf ${FDEST}/${DATE}.tar.bz2 ${FDEST}/${DATE}.ipt" + eecho "${cmd}" + ${cmd} + + eecho "rm -r ${FDEST}/${DATE}.ipt" + rm -r ${FDEST}/${DATE}.ipt + + export LAST_ARCH=${FDEST}/${DATE}.tar.bz2 + + lessindent +} diff --git a/src/ldap.sh b/src/ldap.sh new file mode 100644 index 0000000..00452fe --- /dev/null +++ b/src/ldap.sh @@ -0,0 +1,37 @@ +#!/bin/sh +# +# (c) 2005-2007 Bertrand Jacquin <beber@meleeweb.net> +# Under GPL-2 +# +# Module MySQL pour fsave + +REGISTER_PROTO="$REGISTER_PROTO ldap:ldap_archive" + +ldap_archive() +{ + basedn=${FHOST#*,} + FHOST=${FHOST%%,*} + + moreindent + einfo "OpenLDAP: Dumping ${basedn} tree" + + local FDEST="${DEST}/ldap/${basedn}" + check_fdest + + replace_password_with_star + + ecmd="ldapsearch -LLL -x -y /etc/ldap.secret -D ${FUSER} -b ${basedn} -h ${FHOST}" + eecho "${ecmd}" + ${ecmd} > ${FDEST}/${DATE}.ldif + + ecmd="tar cjf ${FDEST}/${DATE}.tar.bz2 ${FDEST}/${DATE}.ldif" + eecho "${ecmd}" + ${ecmd} + + eecho "rm ${FDEST}/${DATE}.ldif" + rm -r ${FDEST}/${DATE}.ldif + + export LAST_ARCH=${FDEST}/${DATE}.tar.bz2 + + lessindent +} diff --git a/src/mysql.sh b/src/mysql.sh index f4fb83c..539172e 100644 --- a/src/mysql.sh +++ b/src/mysql.sh @@ -17,18 +17,44 @@ mysql_archive() local JUST_BASE=$SQL_BASE SQL_BASE=${SQL_BASE:+"--databases $SQL_BASE"} - SQL_BASE=${SQL_BASE:-"--all-databases"} + SQL_BASE=${SQL_ASE:-"--all-databases"} # Volontaire ! - local FDEST="${DEST}/mysql/${FHOST}/${JUST_BASE:-"all-databases"}" + local FDEST="${DEST}/mysql/${JUST_BAS:-"all-databases"}" # Volontaire ! check_fdest replace_password_with_star - + moreindent - eecho "mysqldump $SQL_BASE --comments --lock-tables --host=$FHOST --user=$FUSER ${FPASS:+"--password=$STAR_PASS"} | gzip > ${FDEST}/${DATE}.gz" - - mysqldump $SQL_BASE --comments --lock-tables --host=$FHOST --user=$FUSER ${FPASS:+"--password=$FPASS"} | gzip > ${FDEST}/${DATE}.gz + einfo "Getting all databases" + all_db=$(mysql --user=$FUSER ${FPASS:+"--password=$FPASS"} << EOF | tail -n +2 +show databases +EOF) + + eecho "mkdir -p ${FDEST}/${DATE}" + mkdir -p ${FDEST}/${DATE} + + for base in $all_db + do + + einfo "Dumping base $base" + moreindent + eecho "mysqldump ${base} --comments --lock-tables --host=$FHOST --user=$FUSER ${FPASS:+"--password=$STAR_PASS"} > ${FDEST}/${DATE}/${base}.sql" + + + mysqldump ${base} --comments --lock-tables --host=$FHOST --user=$FUSER ${FPASS:+"--password=$FPASS"} > ${FDEST}/${DATE}/${base}.sql + #eecho "mysqlhotcopy --user=$FUSER ${FPASS:+"--password=$STAR_PASS"} ${base} ${FDEST}/${DATE}/${base}/" + #mysqlhotcopy --user=$FUSER ${FPASS:+"--password=$FPASS"} ${base} ${FDEST}/${DATE}/${base}/ > /dev/null + + lessindent + done + + eecho "tar cjf ${FDEST}/${DATE}.tar.bz2 ${FDEST}/${DATE}" + tar cjf ${FDEST}/${DATE}.tar.bz2 ${FDEST}/${DATE} > /dev/null 2>&1 + + eecho "rm -r ${FDEST}/${DATE}" + rm -r ${FDEST}/${DATE} + + export LAST_ARCH=${FDEST}/${DATE}.tar.bz2 lessindent - lessindent } diff --git a/src/typo.sh b/src/typo.sh new file mode 100644 index 0000000..bddf168 --- /dev/null +++ b/src/typo.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# +# (c) 2005-2007 Bertrand Jacquin <beber_AT_meleeweb.net> +# Under GPL-2 +# +# Module typo pour fsave + +REGISTER_PROTO="$REGISTER_PROTO typo:typo_archive" + +typo_archive() +{ + local blog_path="${FUSER}" + local site=$(echo ${blog_path} | cut -d '/' -f 4) + + local FDEST="${DEST}/typo/${site}" + check_fdest + + einfo "typo: Backup ${blog_path}" + local cmd="typo backup ${blog_path}" + moreindent + eecho "${cmd}" + local file_path=$(${cmd} 2>&1 | awk '{print $4}') + + local cmd="mv ${file_path} ${FDEST}/${DATE}.yml" + eecho "${cmd}" + ${cmd} + + lessindent + + einfo "typo: Compressing backup" + moreindent + local cmd="tar cjf ${FDEST}/${DATE}.tar.bz2 ${FDEST}/${DATE}.yml" + eecho "${cmd}" + ${cmd} + + rm ${FDEST}/${DATE}.yml + + export LAST_ARCH="${FDEST}/${DATE}.tar.bz2" + + lessindent +} |