mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
6.9 KiB
281 lines
6.9 KiB
#!/bin/sh
|
|
#
|
|
# $Id$
|
|
#
|
|
# SER dbtext Database Administration Tool
|
|
#
|
|
# TODO: Check if user and group exist
|
|
#
|
|
# Copyright (C) 2006-2008 iptelorg GmbH
|
|
#
|
|
|
|
#################################################################
|
|
# configuration variables
|
|
#################################################################
|
|
DEFAULT_ROOTDIR="/var/local/lib/ser" # Default dbtext root directory
|
|
DEFAULT_DBNAME="ser" # Default database name
|
|
DEFAULT_OWNER="ser" # The owner of dbtext files
|
|
DEFAULT_GROUP="ser" # The group of dbtext files
|
|
DEFAULT_SRCDB_DIR="" # Default directory of the source data
|
|
DEFAULT_SRCDB="ser_db" # Source data generated from XML description
|
|
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
NAME
|
|
$COMMAND - SER dbtext Database Administration Tool
|
|
|
|
SYNOPSIS
|
|
$COMMAND [options] create
|
|
$COMMAND [options] drop
|
|
$COMMAND [options] backup [filename.tar]
|
|
$COMMAND [options] restore [filename.tar]
|
|
|
|
DESCRIPTION
|
|
This tool is a simple shell wrapper that can be used to create, drop, or
|
|
backup SER database stored in plain-text files on the filesystem (used by
|
|
dbtext SER module). See section COMMANDS for brief overview of supported
|
|
actions.
|
|
|
|
The database template for SER dbtext database is stored in dbtext_template
|
|
directory which can usualy be found in /var/lib/ser (depending on
|
|
installation). You can use the template to create SER database manually if
|
|
you cannot or do not want to use this shell wrapper.
|
|
|
|
COMMANDS
|
|
create
|
|
Create a new SER database from scratch. The database must not exist. This
|
|
command creates the database, the default name of the database is
|
|
'${DEFAULT_DBNAME}' (the default name can be changed using a command line
|
|
parameter, see below). The database will be created in the default dbtext
|
|
database directory (${DEFAULT_ROOTDIR}) unless changed using -d command
|
|
line option (see below). You can use command line options to change the
|
|
default database name, owner username and group.
|
|
|
|
drop
|
|
This command can be used to delete SER database. WARNING: This command
|
|
will delete all data in the database and this action cannot be undone
|
|
afterwards. Make sure that you have backups if you want to keep the data
|
|
from the database.
|
|
|
|
backup <filename>
|
|
Backup the contents of SER database. If you specify a filename then the
|
|
contents of the database will be saved in that file, otherwise the tool
|
|
will dumps the contents on the standard output.
|
|
|
|
restore <filename>
|
|
Load the contents of SER database from a file (if you specify one) or from
|
|
the standard input.
|
|
|
|
OPTIONS
|
|
-h, --help
|
|
Display this help text.
|
|
|
|
-n NAME, --name=NAME
|
|
Database name of SER database.
|
|
(Default value is '$DEFAULT_DBNAME')
|
|
|
|
-d DIR, --dir=DIR
|
|
Root directory of dbtext databases.
|
|
(Default value is '$DEFAULT_ROOTDIR')
|
|
|
|
-o USERNAME, --owner=USERNAME
|
|
Owner of files in the database.
|
|
(Default value is '$DEFAULT_OWNER')
|
|
|
|
-g GROUP, --group=GROUP
|
|
Group of files in the database.
|
|
(Default value is '$DEFAULT_GROUP')
|
|
|
|
-v, --verbose
|
|
Enable verbose mode. This option can be given multiple times
|
|
to produce more and more output.
|
|
|
|
AUTHOR
|
|
Written by Jan Janak <jan@iptel.org>
|
|
|
|
COPYRIGHT
|
|
Copyright (C) 2006-2008 iptelorg GmbH
|
|
This is free software. You may redistribute copies of it under the termp of
|
|
the GNU General Public License. There is NO WARRANTY, to the extent
|
|
permitted by law.
|
|
|
|
FILES
|
|
${SRCDB_DIR}/${SRCDB}
|
|
|
|
REPORTING BUGS
|
|
Report bugs to <sr-dev@lists.kamailio.org>
|
|
EOF
|
|
} #usage
|
|
|
|
dbg()
|
|
{
|
|
if [ ! -z $VERBOSE ] ; then
|
|
echo $@
|
|
fi
|
|
}
|
|
|
|
err()
|
|
{
|
|
echo "ERROR: $@"
|
|
}
|
|
|
|
|
|
# Dump the contents of the database to stdout
|
|
backup_db()
|
|
{
|
|
if [ ! -z $VERBOSE ] ; then
|
|
(cd "${ROOTDIR}/$1"; tar cfv - *)
|
|
else
|
|
(cd "${ROOTDIR}/$1"; tar cf - * 2>/dev/null)
|
|
fi
|
|
}
|
|
|
|
|
|
# Re-create the contents of database from a tar file
|
|
restore_db()
|
|
{
|
|
if [ ! -d "${ROOTDIR}/$1" ] ; then
|
|
err "Database $1 does not exist, create it first"
|
|
exit 1
|
|
fi
|
|
if [ ! -z $VERBOSE ] ; then
|
|
(cd $ROOTDIR/$1; rm -f *; tar xfv -)
|
|
else
|
|
(cd $ROOTDIR/$1; rm -f *; tar xf -)
|
|
fi
|
|
}
|
|
|
|
|
|
# Drop SER database
|
|
drop_db()
|
|
{
|
|
dbg "Removing dbtext database directory ${ROOTDIR}/${DBNAME}"
|
|
rm -rf "${ROOTDIR}/${DBNAME}"
|
|
} # drop_db
|
|
|
|
|
|
# Create SER database
|
|
create_db ()
|
|
{
|
|
dbg "Creating database directory ${ROOTDIR}/${DBNAME}"
|
|
mkdir -p "${ROOTDIR}/${DBNAME}"
|
|
if [ ! -d ] ; then
|
|
err "Could not create directory ${ROOTDIR}/${DBNAME}"
|
|
exit 1
|
|
fi
|
|
|
|
dbg "Copying template files from ${SRCDB_DIR}/${SRCDB} to ${ROOTDIR}/${DBNAME}"
|
|
cp -a ${SRCDB_DIR}/${SRCDB}/* "${ROOTDIR}/${DBNAME}"
|
|
|
|
dbg "Setting owner and group of new files to ${OWNER}:${GROUP}"
|
|
chown -R "${OWNER}:${GROUP}" "${ROOTDIR}/${DBNAME}"
|
|
chmod -R 0660 ${ROOTDIR}/${DBNAME}/*
|
|
} # create_db
|
|
|
|
|
|
# Convert relative path to the script directory to absolute if necessary by
|
|
# extracting the directory of this script and prefixing the relative path with
|
|
# it.
|
|
abs_srcdb_dir()
|
|
{
|
|
my_dir=`dirname $0`;
|
|
if [ "${SRCDB_DIR:0:1}" != "/" ] ; then
|
|
SCRIPT_DIR="${my_dir}/${SRCDB_DIR}"
|
|
fi
|
|
}
|
|
|
|
|
|
# Main program
|
|
COMMAND=`basename $0`
|
|
|
|
if [ -z "$DBNAME" ] ; then DBNAME="$DEFAULT_DBNAME"; fi;
|
|
if [ -z "$OWNER" ] ; then OWNER="$DEFAULT_OWNER"; fi;
|
|
if [ -z "$GROUP" ] ; then GROUP="$DEFAULT_GROUP"; fi;
|
|
if [ -z "$SRCDB_DIR" ] ; then SRCDB_DIR="$DEFAULT_SRCDB_DIR"; fi;
|
|
if [ -z "$SRCDB" ] ; then SRCDB="$DEFAULT_SRCDB"; fi
|
|
|
|
abs_srcdb_dir
|
|
|
|
TEMP=`getopt -o hn:d:o:g:v --long help,name:,dir:,owner:,group:,verbose -n $COMMAND -- "$@"`
|
|
if [ $? != 0 ] ; then exit 1; fi
|
|
eval set -- "$TEMP"
|
|
|
|
while true ; do
|
|
case "$1" in
|
|
-h|--help) usage; exit 0 ;;
|
|
-n|--name) DBNAME=$2; shift 2 ;;
|
|
-d|--dir) ROOTDIR=$2; shift 2 ;;
|
|
-o|--owner) OWNER=$2; shift 2 ;;
|
|
-g|--group) GROUP=$2; shift 2 ;;
|
|
-v|--verbose) export OPTS="${OPTS} -v "; VERBOSE=1; shift ;;
|
|
--) shift; break ;;
|
|
*) echo "Internal error"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
if [ $# -eq 0 ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
TEMP=`id $OWNER > /dev/null 2>&1`
|
|
if [ $? != 0 ] ; then
|
|
err "User '$OWNER' does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
TEMP=`id -g $GROUP > /dev/null 2>&1`
|
|
if [ $? != 0 ] ; then
|
|
err "Group '$GROUP' does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
case $1 in
|
|
create) # Create SER database
|
|
create_db
|
|
exit $?
|
|
;;
|
|
|
|
drop) # Drop SER database
|
|
drop_db
|
|
exit $?
|
|
;;
|
|
|
|
backup) # backup SER database
|
|
shift
|
|
if [ $# -eq 1 ]; then
|
|
dbg "Backing up ${ROOTDIR}/$DBNAME"
|
|
backup_db $DBNAME > $1
|
|
elif [ $# -eq 0 ]; then
|
|
dbg "Backing up ${ROOTDIR}/$DBNAME"
|
|
backup_db $DBNAME
|
|
else
|
|
usage
|
|
exit 1
|
|
fi
|
|
exit $?
|
|
;;
|
|
|
|
restore) # restore SER database
|
|
shift
|
|
if [ $# -eq 1 ]; then
|
|
dbg "Restoring ${ROOTDIR}/$DBNAME"
|
|
cat $1 | restore_db $DBNAME
|
|
elif [ $# -eq 0 ]; then
|
|
dbg "Restoring ${ROOTDIR}/$DBNAME"
|
|
restore_db $DBNAME
|
|
else
|
|
usage
|
|
exit 1
|
|
fi
|
|
exit $?
|
|
;;
|
|
|
|
*)
|
|
echo "Unknown command '$1'"
|
|
usage
|
|
exit 1;
|
|
;;
|
|
esac
|