Hello Torsten. On Mon, 23 May 2005 17:11:44 +0200 you wrote:
TL> Looks like we should do that after bazillions of people requested it. TL> Any suggestions how to implement this correctly? The attached patch adds calling db4.2_recover to slapd.init on every slapd startup.
diff -Nru openldap2.2-2.2.23/debian/slapd.init openldap2.2-hack/debian/slapd.init --- openldap2.2-2.2.23/debian/slapd.init 2005-05-24 19:42:21.000000000 +0800 +++ openldap2.2-hack/debian/slapd.init 2005-05-25 23:15:35.000000000 +0800 @@ -48,6 +48,10 @@ "$SLAPD_CONF"` fi +# Find out slapd db directories +SLAPD_DBDIRS=`sed -ne 's/^directory[[:space:]]\+"*\([^"]\+\).*/\1/p' \ + "$SLAPD_CONF" ` + # XXX: Breaks upgrading if there is no pidfile (invoke-rc.d stop will fail) # -- Torsten if [ -z "$SLAPD_PIDFILE" ]; then @@ -107,6 +111,24 @@ } +# Try to recover slapd database +try_fix_db() { + if [ "$SLAPD_TRYFIXDB" != yes -o \ + -z "$SLAPD_DBDIRS" ]; then + return 0 + fi + echo -n " (possibly) fixing db," + for DBDIR in $SLAPD_DBDIRS; do + if [ -d "$DBDIR" -a -f "$DBDIR/objectClass.bdb" ]; then + db4.2_recover -eh $DBDIR 2>&1 + if [ $? -ne 0 ]; then + reason="Automatic recovery of slapd database failed. You will need to perform recovery by hand, possibly from backup." + exit 1 + fi + fi + done +} + # Start the slapd daemon and capture the error message if any to # $reason. start_slapd() { @@ -157,6 +179,7 @@ start() { echo -n "Starting OpenLDAP:" trap 'report_failure' 0 + try_fix_db start_slapd start_slurpd trap "-" 0