123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- #!/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 <[email protected]>
- 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 <[email protected]>
- 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
|