Mailing list header changes (fuck you Google)
[citadel.git] / citadel / database_cleanup.sh.in
1 #!/bin/bash
2
3 die () {
4         echo Exiting.
5         exit 1
6 }
7
8 # data dir from autoconf?
9 DATA_DIR="@MAKE_DATA_DIR@"
10 if test -z "$DATA_DIR" ; then
11         DATA_DIR="/usr/local/citadel"
12 fi
13 DATA_DIR=$DATA_DIR/data
14
15 # If we're on an Easy Install system, use our own db_ tools.
16 #
17 if [ -x /usr/local/ctdlsupport/bin/db_dump ] ; then
18         export PATH=/usr/local/ctdlsupport/bin:$PATH
19         RECOVER=/usr/local/ctdlsupport/bin/db_recover
20         DUMP=/usr/local/ctdlsupport/bin/db_dump
21         LOAD=/usr/local/ctdlsupport/bin/db_load
22
23 else
24         # ok usual install?
25         if test -f /usr/bin/db_dump; then 
26                 RECOVER=/usr/bin/db_recover
27                 DUMP=/usr/bin/db_dump
28                 LOAD=/usr/bin/db_load
29         else
30                 if test -n "`ls /usr/bin/db?*recover`"; then
31                         # seems we have something debian alike thats adding version in the filename
32                         if test "`ls /usr/bin/db*recover |wc -l`" -gt "1"; then 
33                                 echo "Warning: you have more than one version of the Berkeley DB utilities installed." 1>&2
34                                 echo "Using the latest one." 1>&2
35                                 RECOVER=`ls /usr/bin/db*recover |sort |tail -n 1`
36                                 DUMP=`ls /usr/bin/db*dump |sort |tail -n 1`
37                                 LOAD=`ls /usr/bin/db*load |sort |tail -n 1`
38                         else
39                                 RECOVER=`ls /usr/bin/db*recover`
40                                 DUMP=`ls /usr/bin/db*dump`
41                                 LOAD=`ls /usr/bin/db*load`
42                         fi
43                 else
44                         echo "database_cleanup.sh cannot find the Berkeley DB utilities.  Exiting." 1>&2
45                         die
46                 fi
47
48         fi
49 fi
50
51 # Ok, let's begin.
52 #
53
54 clear
55 cat <<!
56
57 Citadel Database Cleanup
58 ---------------------------
59
60 This script exports, deletes, and re-imports your database.  If you have
61 any data corruption issues, this program may be able to clean them up for you.
62  
63 Please note that this program does a Berkeley DB dump/load, not a Citadel
64 export.  The export files are not generated by the Citadel export module.
65
66 WARNING #1:
67   MAKE A BACKUP OF YOUR DATA BEFORE ATTEMPTING THIS.  There is no guarantee
68   that this will work (in case of disk full, power failure, program crash)!
69
70 WARNING #2:
71   citserver must NOT be running while you do this.
72
73 WARNING #3:
74   Please try "cd $DATA_DIR; $RECOVER -c" first. Run citserver afterwards to 
75   revalidate whether its fixed or not, No news might be good news. Use this
76   tool only if that one fails to fix your problem.
77
78 WARNING #4:
79   You must have an amount of free space on your disk that is at least twice
80   the size of your database, see the following output:
81   (for substantially better performance you should specify a location that is 
82    on another disk than $DATA_DIR)
83
84 `df -h`
85
86 you will need `du -sh $DATA_DIR|sed "s;/.*;;"` of free space.
87
88 !
89
90 echo -n "Do you want to continue? "
91
92 read yesno
93 case "$yesno" in
94         "y" | "Y" | "yes" | "YES" | "Yes" )
95                 echo 
96                 echo DO NOT INTERRUPT THIS PROCESS.
97                 echo
98         ;;
99         * )
100                 exit
101 esac
102
103 for x in 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d
104 do
105         filename=cdb.$x
106         echo Dumping $filename
107         $DUMP -h $DATA_DIR $filename >/tmp/CitaDump.$x || die
108         rm -f $DATA_DIR/$filename
109 done
110
111 echo Removing old databases
112 rm -f ./data/*
113
114 for x in 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d
115 do
116         filename=cdb.$x
117         echo Loading $filename
118         $LOAD -h $DATA_DIR $filename </tmp/CitaDump.$x && {
119                 rm -f /tmp/CitaDump.$x
120         }
121 done
122
123 echo 
124 echo Dump/load operation complete.  Start your Citadel server now.
125 echo