Re: Backup Script
Wendelmaques <wendel-e5LGQ1J1bCxwFqzsTH5u/[email protected]> Mon, 23 May 2005 01:07:58 -0300
| Newsgroups | gmane.comp.isp.ispman.user |
|---|---|
| Message-ID | <[email protected]> |
> Wendel,
>
> What are you waiting for?
>
> patch please....
Hi Atif,
sorry, I'm suck with diff/patch/cvs etc.
Attached is the script or in
url: http://www.dotpix.com.br/~wendel/ispman/openldap_backup
This version has been complete rewrite and added:
1) Work (and tested) on FreeBSD and Debian GNU/Linux.
2) support to 'on line' and 'off line'
database backup/recovery.
3) tested (on FreeBSD) the revcoery script.
4) added more checks to work on Linux and FreeBSD.
5) added wizard to recovery a database by date.
Not tested: recovery on Debian GNU/Linux.
On FreeBSD work very nice.
--
wendelmaques
http://www.dotpix.com.br/~wendel
openldap_backup
(text/plain, 5.8 KB)
#!/usr/local/bin/bash
# ^^^ CHANGE bash LOCATION!!!
# Copyright (c) 2005-2005 Wendelmaques R. Pereira.
# Terms and conditions based on the BSD copyright.
# /root/doc/rc.ldap-backup - general opendlap backup.
# ref: http://www.tldp.org/LDP/abs/html
# ref: http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-6.html
# (as root): crontab -e
# 0 * * * * /root/doc/ldap/openldap_backup backup
# ATTENTION: ALL ALERT IS SENT TO SYSLOG!
# tip: to monitor test's (open a new terminal):
# on FreeBSD: tail -f /var/log/messages
# on GNU/Linux Debian: tail -f /var/log/syslog
# base dir to store backups
# protect this directory! (tip: chmod 700 $basedir).
basedir=/root/doc/ldap;
# the ldap server
server="192.168.200.253";
# base suffix if you have multiple database
suffix="o=dotpix";
# start a live backup, don't stop database.
# set to "no" to to stop database and start
# backup. See init_script above if "no".
live_backup="no"
# detect OS and try to configure the script
# we try to auto configure script for
# FreeBSD and Debian GNU/Linux. If you have
# diferent file locations you need to
# reconfigure manualy.
OS=`uname`;
# If you have OS BSD Like change OS_BSD.
OS_BSD='FreeBSD'; # for *BSD's World
OS_LNX='Linux'; # for Linux World
# direcoty format
# date command must return 2005/05/22 (YYYY/MM/DD)
date=`date "+%Y/%m/%d"`; # work on Debian/FreeBSD
ldif=${date//\//.}; # set file to: YYYY.MM.DD
# if no live backup, we need to know the
# init script to start and stop the slapd.
# the init script must accept start and stop
# operations. ex: slapd.sh stop
if [ "$OS" == "$OS_BSD" ]; then
init_script=/usr/local/etc/rc.d/slapd.sh;
elif [ "$OS" = "$OS_LNX" ]; then
init_script=/etc/init.d/slapd;
fi
# slpacat used to backup.
if [ "$OS" == "$OS_BSD" ]; then
slapcat=/usr/local/sbin/slapcat
elif [ "$OS" = "$OS_LNX" ]; then
slapcat=/usr/sbin/slapcat
fi
# slapadd used to recovery data.
if [ "$OS" == "$OS_BSD" ]; then
slapadd=/usr/local/sbin/slapadd
elif [ "$OS" = "$OS_LNX" ]; then
slapadd=/usr/sbin/slapadd
fi
# slapindex used to regenerate
# initial database index's.
if [ "$OS" == "$OS_BSD" ]; then
slapindex=/usr/local/sbin/slapindex
elif [ "$OS" = "$OS_LNX" ]; then
slapindex=/usr/sbin/slapindex
fi
# ldapdelete used to drop database
if [ "$OS" == "$OS_BSD" ]; then
ldapdelete=/usr/local/bin/ldapdelete
elif [ "$OS" = "$OS_LNX" ]; then
ldapdelete=/usr/bin/ldapdelete
fi
# openldap configuration file.
if [ "$OS" == "$OS_BSD" ]; then
conf=/usr/local/etc/openldap/slapd.conf
elif [ "$OS" = "$OS_LNX" ]; then
conf=/etc/ldap/slapd.conf
fi
# if we need to restart slapd we need
# check if init script is executable.
if [ "$live_backup" == "no" ]; then
if [ ! -x $init_script ]; then
logger "$0: start/stop executable not found";
logger "$0: tip: we need to know how to stop/start slapd";
exit;
fi
fi
# check executables and configuration file:
if [ ! -d $basedir ]; then
logger "$0: basedir $basedir not found, creating.";
mkdir -p $basedir;
chmod 700 $basedir;
fi
if [ ! -x $slapcat ]; then
logger "$0: slapcat executable not found";
logger "$0: tip: whereis slapcat";
exit;
fi
if [ ! -x $slapadd ]; then
logger "$0: slapadd executable not found";
logger "$0: tip: whereis slapadd";
exit;
fi
if [ ! -x $slapindex ]; then
logger "$0: slapindex executable not found";
logger "$0: tip: whereis slapindex";
exit;
fi
if [ ! -r $conf ]; then
logger "$0: slapd.conf not found";
logger "$0: tip: provide all path for the slapd.conf";
exit;
fi
function cmd_backup(){
# protect files, to avoid unauth access.
mkdir -p "$basedir/$date";
chmod 700 $basedir;
chmod 700 $basedir/$date;
file="$basedir/$date/$ldif.ldif";
mkdir -p "$basedir/$date";
# do backup!!!
cmd="$slapcat -f $conf -b $suffix -l $file";
logger "$cmd";
if [ "$live_backup" == "no" ]; then
$init_script stop &> /dev/null
$cmd;
$init_script start &> /dev/null
else
$cmd;
fi;
}
# function use to drop database
function cmd_drop(){
echo "We need to cleanup the database to reload backup!";
echo "This script will DROP all data in $suffix! Continue?";
printf "Choose n here and we try to add data without droping.\n\ny/[n]:";
read y_n;
if [ "$y_n" = "y" ]; then
echo "Use default ISPMan Administrator (cn=Directory Administrator,$suffix) ? y/[n]";
read default;
if [ "$default" = "y" ]; then
DN="cn=Directory Administrator,$suffix";
else
printf "Please, type Administrator DN (with suffix) to drop the database $suffix:\n";
read dn;
DN="$dn";
fi;
cmd_drop="$ldapdelete -x -D $DN -W -h $server -r $suffix";
printf "\n\nExecute the following command? y/[n]\n";
printf "\n$cmd_drop\n";
logger "$cmd_drop";
read exe;
if [ "$exe" = "y" ]; then
printf "\nYou need to type password of DN ($DN) to continue:\n\n";
logger "$cmd_drop";
$cmd_drop; # try to drop all data in database.
fi;
fi;
}
# function to do the backup recover.
function cmd_recover(){
ldif=${1//\//.}; # set file to: YYYY.MM.DD
file="$basedir/$1/$ldif.ldif";
cmd="$slapadd -f $conf -b $suffix -c -l $file";
logger $cmd;
if [ "$live_backup" == "no" ]; then
$init_script stop &> /dev/null
$cmd; # reload database with backup.
$slapindex -f $conf -b $suffix; # rebuild index.
$init_script start &> /dev/null
else
$cmd; # work only on cleanup databases.
$slapindex -f $conf -b $suffix;
fi;
}
case "$1" in
backup)
cmd_backup $2;
;;
recover)
cmd_drop $2;
cmd_recover $2;
;;
*)
echo "{ backup|recover $date }" >&2
;;
esac
# function to do the backup.