exit 1
}
+DATA_DIR="/usr/local/citadel"
+
+usage() {
+ echo "Usage: database_cleanup.sh [ -h citadel_dir ]"
+ exit 2
+}
+
+PARSED_ARGUMENTS=$(getopt -a -n database_cleanup.sh -o h: -- "$@")
+VALID_ARGUMENTS=$?
+if [ "$VALID_ARGUMENTS" != "0" ]; then
+ usage
+fi
+
+eval set -- "$PARSED_ARGUMENTS"
+while :
+do
+ case "$1" in
+ -h | --alpha)
+ DATA_DIR=${2}
+ shift 2
+ ;;
+ # -- means the end of the arguments; drop this, and break out of the while loop
+ --) shift; break ;;
+ # If invalid options were passed, then getopt should have reported an error,
+ # which we checked as VALID_ARGUMENTS when getopt was called...
+ *) echo "Unexpected option: $1 - this should not happen."
+ usage
+ ;;
+ esac
+done
+
+DATA_DIR=$DATA_DIR/data
+
+# If we're on an AppDir system, use the embedded db_tools.
+if [ "${APPDIR}" != "" ] ; then
+ export PATH=${APPDIR}/usr/bin:$PATH
+ RECOVER=${APPDIR}/usr/bin/db_recover
+ DUMP=${APPDIR}/usr/bin/db_dump
+ LOAD=${APPDIR}/usr/bin/db_load
# If we're on an Easy Install system, use our own db_ tools.
-#
-if [ -x /usr/local/ctdlsupport/bin/db_dump ] ; then
+elif [ -x /usr/local/ctdlsupport/bin/db_dump ] ; then
export PATH=/usr/local/ctdlsupport/bin:$PATH
+ RECOVER=/usr/local/ctdlsupport/bin/db_recover
+ DUMP=/usr/local/ctdlsupport/bin/db_dump
+ LOAD=/usr/local/ctdlsupport/bin/db_load
+
+# usual install
+else
+ if test -f /usr/bin/db_dump; then
+ RECOVER=/usr/bin/db_recover
+ DUMP=/usr/bin/db_dump
+ LOAD=/usr/bin/db_load
+ else
+ if test -n "`ls /usr/bin/db?*recover`"; then
+ # seems we have something debian alike thats adding version in the filename
+ if test "`ls /usr/bin/db*recover |wc -l`" -gt "1"; then
+ echo "Warning: you have more than one version of the Berkeley DB utilities installed." 1>&2
+ echo "Using the latest one." 1>&2
+ RECOVER=`ls /usr/bin/db*recover |sort |tail -n 1`
+ DUMP=`ls /usr/bin/db*dump |sort |tail -n 1`
+ LOAD=`ls /usr/bin/db*load |sort |tail -n 1`
+ else
+ RECOVER=`ls /usr/bin/db*recover`
+ DUMP=`ls /usr/bin/db*dump`
+ LOAD=`ls /usr/bin/db*load`
+ fi
+ else
+ echo "database_cleanup.sh cannot find the Berkeley DB utilities. Exiting." 1>&2
+ die
+ fi
+
+ fi
fi
# Ok, let's begin.
-#
+
clear
cat <<!
WARNING #1:
MAKE A BACKUP OF YOUR DATA BEFORE ATTEMPTING THIS. There is no guarantee
- that this will work!
+ that this will work (in case of disk full, power failure, program crash)!
WARNING #2:
citserver must NOT be running while you do this.
WARNING #3:
- Please try "db_recover -c" from the data/ directory first. Use this tool
- only if that one fails to fix your problem.
+ Please try "cd $DATA_DIR; $RECOVER -c" first. Run citserver afterwards to
+ revalidate whether its fixed or not, No news might be good news. Use this
+ tool only if that one fails to fix your problem.
WARNING #4:
You must have an amount of free space on your disk that is at least twice
- the size of your database.
+ the size of your database, see the following output:
+ (for substantially better performance you should specify a location that is
+ on another disk than $DATA_DIR)
+
+`df -h`
+
+you will need `du -sh $DATA_DIR|sed "s;/.*;;"` of free space.
!
+echo We will attempt to look for a Citadel database in $DATA_DIR
echo -n "Do you want to continue? "
read yesno
exit
esac
-for x in 00 01 02 03 04 05 06 07 08 09 0a
+for x in 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d
do
filename=cdb.$x
echo Dumping $filename
- db_dump -h ./data $filename >/tmp/CitaDump.$x || die
- rm -f ./data/$filename
+ $DUMP -h $DATA_DIR $filename >/tmp/CitaDump.$x || {
+ echo error $?
+ die
+ }
+ rm -vf $DATA_DIR/$filename
done
echo Removing old databases
-rm -f ./data/*
+rm -vf $DATA_DIR/*
-for x in 00 01 02 03 04 05 06 07 08 09 0a
+for x in 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d
do
filename=cdb.$x
echo Loading $filename
- db_load -h ./data $filename </tmp/CitaDump.$x && {
+ $LOAD -h $DATA_DIR $filename </tmp/CitaDump.$x && {
rm -f /tmp/CitaDump.$x
}
done