diff --git a/ctdb/Makefile.in b/ctdb/Makefile.in index 2210474c908..7b6febc3927 100644 --- a/ctdb/Makefile.in +++ b/ctdb/Makefile.in @@ -116,6 +116,7 @@ distclean: clean install: all mkdir -p $(DESTDIR)$(bindir) + mkdir -p $(DESTDIR)$(sbindir) mkdir -p $(DESTDIR)$(includedir) mkdir -p $(DESTDIR)$(etcdir)/ctdb mkdir -p $(DESTDIR)$(etcdir)/ctdb/events.d diff --git a/ctdb/packaging/RHEL/ctdb.spec b/ctdb/packaging/RPM/ctdb.spec similarity index 78% rename from ctdb/packaging/RHEL/ctdb.spec rename to ctdb/packaging/RPM/ctdb.spec index 3c60d61510e..b592973d73c 100644 --- a/ctdb/packaging/RHEL/ctdb.spec +++ b/ctdb/packaging/RPM/ctdb.spec @@ -12,12 +12,10 @@ Group: System Environment/Daemons URL: http://ctdb.samba.org/ Source: ctdb-%{version}.tar.bz2 -Source999: ctdb-setup.tar.bz2 Prereq: /sbin/chkconfig /bin/mktemp /usr/bin/killall /usr/bin/nc Prereq: fileutils sed /etc/init.d -Requires: initscripts >= 5.54-1 Provides: ctdb = %{version} Prefix: /usr @@ -32,7 +30,7 @@ ctdb is the clustered database used by samba %prep %setup -q # setup the init script and sysconfig file -%setup -T -D -a 999 -n ctdb-%{version} -q +%setup -T -D -n ctdb-%{version} -q %build @@ -54,18 +52,13 @@ make rm -rf $RPM_BUILD_ROOT # Create the target build directory hierarchy -mkdir -p $RPM_BUILD_ROOT%{_includedir} -mkdir -p $RPM_BUILD_ROOT{%{_libdir},%{_includedir}} -mkdir -p $RPM_BUILD_ROOT%{_prefix}/{bin,sbin} -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ctdb -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ctdb/events.d mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d make DESTDIR=$RPM_BUILD_ROOT install -install -m644 setup/ctdb.sysconfig $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/ctdb -install -m755 setup/ctdb.init $RPM_BUILD_ROOT%{initdir}/ctdb +install -m644 tools/ctdb.sysconfig $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/ctdb +install -m755 packaging/ctdb.init $RPM_BUILD_ROOT%{initdir}/ctdb # Remove "*.old" files find $RPM_BUILD_ROOT -name "*.old" -exec rm -f {} \; @@ -74,12 +67,11 @@ find $RPM_BUILD_ROOT -name "*.old" -exec rm -f {} \; rm -rf $RPM_BUILD_ROOT %post -/sbin/chkconfig --add ctdb +[ -x /sbin/chkconfig ] && /sbin/chkconfig --add ctdb %preun if [ $1 = 0 ] ; then - /sbin/chkconfig --del ctdb - /sbin/service ctdb stop >/dev/null 2>&1 + [ -x /sbin/chkconfig ] && /sbin/chkconfig --del ctdb fi exit 0 diff --git a/ctdb/packaging/RHEL/makerpms.sh b/ctdb/packaging/RPM/makerpms.sh similarity index 82% rename from ctdb/packaging/RHEL/makerpms.sh rename to ctdb/packaging/RPM/makerpms.sh index e43d53683c7..df06b905c64 100755 --- a/ctdb/packaging/RHEL/makerpms.sh +++ b/ctdb/packaging/RPM/makerpms.sh @@ -15,9 +15,7 @@ EXTRA_OPTIONS="$1" -RHEL="packaging/RHEL" - -[ -d ${RHEL} ] || { +[ -d packaging ] || { echo "Must run this from the ctdb directory" exit 1 } @@ -62,7 +60,7 @@ if [ ! -d ctdb-${VERSION} ]; then REMOVE_LN=$PWD/ctdb-$VERSION fi echo -n "Creating ctdb-${VERSION}.tar.bz2 ... " -tar --exclude=.bzr --exclude .bzrignore --exclude packaging --exclude="*~" -cf - ctdb-${VERSION}/. | bzip2 > ${SRCDIR}/ctdb-${VERSION}.tar.bz2 +tar --exclude=.bzr --exclude .bzrignore --exclude="*~" -cf - ctdb-${VERSION}/. | bzip2 > ${SRCDIR}/ctdb-${VERSION}.tar.bz2 echo "Done." if [ $? -ne 0 ]; then echo "Build failed!" @@ -76,8 +74,7 @@ popd ## ## copy additional source files ## -(cd packaging/RHEL && tar --exclude=.bzr --exclude="*~" -jcvf - setup) > ${SRCDIR}/ctdb-setup.tar.bz2 -cp -p ${RHEL}/${SPECFILE} ${SPECDIR} +cp -p packaging/RPM/ctdb.spec ${SPECDIR} ## ## Build @@ -87,4 +84,6 @@ cd ${SPECDIR} ${RPMBUILD} -ba --clean --rmsource $EXTRA_OPTIONS $SPECFILE echo "$(basename $0): Done." -[ ${REMOVE_LN} ] && rm $REMOVE_LN +[ ${REMOVE_LN} ] && /bin/rm -f $REMOVE_LN + +exit 0 diff --git a/ctdb/packaging/RHEL/setup/ctdb.init b/ctdb/packaging/ctdb.init similarity index 57% rename from ctdb/packaging/RHEL/setup/ctdb.init rename to ctdb/packaging/ctdb.init index e34107e6b30..488cbd7618f 100755 --- a/ctdb/packaging/RHEL/setup/ctdb.init +++ b/ctdb/packaging/ctdb.init @@ -1,35 +1,46 @@ #!/bin/sh # +############################## +# init info for redhat distros # chkconfig: - 90 36 # description: Starts and stops the clustered tdb daemon -# # pidfile: /var/run/ctdbd/ctdbd.pid +############################## + +############################## +# SLES/OpenSuSE init info +### BEGIN INIT INFO +# Provides: ctdb +# Required-Start: $network +# Required-Stop: +# Default-Start: 3 5 +# Default-Stop: +# Description: initscript for the ctdb service +### END INIT INFO # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions -else - exit 0 fi # Avoid using root's TMPDIR unset TMPDIR -# Source networking configuration. -. /etc/sysconfig/network +# check networking is up (for redhat) +[ -f /etc/sysconfig/network ] && { + . /etc/sysconfig/network + [ ${NETWORKING} = "no" ] && exit 0 +} CTDB_OPTIONS="" -# pull in admin specified config +# pull in admin specified config for ctdb if [ -f /etc/sysconfig/ctdb ]; then . /etc/sysconfig/ctdb fi -# Check that networking is up. -[ ${NETWORKING} = "no" ] && exit 0 - # build up CTDB_OPTIONS variable [ -z "$LOGFILE" ] || CTDB_OPTIONS="$CTDB_OPTIONS --logfile=$LOGFILE" [ -z "$NODES" ] || CTDB_OPTIONS="$CTDB_OPTIONS --nlist=$NODES" @@ -41,24 +52,44 @@ fi [ -z "$TRANSPORT" ] || CTDB_OPTIONS="$CTDB_OPTIONS --transport $TRANSPORT" [ -z "$DEBUGLEVEL" ] || CTDB_OPTIONS="$CTDB_OPTIONS -d $DEBUGLEVEL" +if [ -x /sbin/startproc ]; then + init_style="suse" +else + init_style="redhat" +fi + start() { - echo -n $"Starting ctdbd services: " - daemon ctdbd $CTDB_OPTIONS - RETVAL=$? - echo - [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ctdb || \ - RETVAL=1 - return $RETVAL + echo -n $"Starting ctdbd service: " + case $init_style in + suse) + startproc ctdbd $CTDB_OPTIONS + rc_status -v + ;; + redhat) + daemon ctdbd $CTDB_OPTIONS + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ctdb || RETVAL=1 + return $RETVAL + ;; + esac } stop() { - echo -n $"Shutting down ctdbd services: " + echo -n $"Shutting down ctdbd service: " ctdb shutdown RETVAL=$? - echo - [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ctdb - echo "" - return $RETVAL + case $init_style in + suse) + rc_status -v + ;; + redhat) + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ctdb + echo "" + return $RETVAL + ;; + esac } restart() { @@ -66,20 +97,11 @@ restart() { start } -rhstatus() { +status() { ctdb status - if [ $? -ne 0 ] ; then - return 1 - fi } -# Allow status as non-root. -if [ "$1" = status ]; then - rhstatus - exit $? -fi - case "$1" in start) start @@ -94,7 +116,7 @@ case "$1" in rhstatus ;; condrestart) - [ -f /var/lock/subsys/ctdb ] && restart || : + ctdb status > /dev/null && restart || : ;; *) echo $"Usage: $0 {start|stop|restart|status|condrestart}" diff --git a/ctdb/takeover/system.c b/ctdb/takeover/system.c index cff122f35b0..95c790fc1a0 100644 --- a/ctdb/takeover/system.c +++ b/ctdb/takeover/system.c @@ -324,13 +324,17 @@ static void ctdb_event_script_handler(struct event_context *ev, struct fd_event struct ctdb_event_script_state *state = talloc_get_type(p, struct ctdb_event_script_state); int status = -1; + void (*callback)(struct ctdb_context *, int, void *) = state->callback; + void *private_data = state->private_data; + struct ctdb_context *ctdb = state->ctdb; + waitpid(state->child, &status, 0); if (status != -1) { status = WEXITSTATUS(status); } - state->callback(state->ctdb, status, state->private_data); talloc_set_destructor(state, NULL); talloc_free(state); + callback(ctdb, status, private_data); } /* diff --git a/ctdb/packaging/RHEL/setup/ctdb.sysconfig b/ctdb/tools/ctdb.sysconfig similarity index 100% rename from ctdb/packaging/RHEL/setup/ctdb.sysconfig rename to ctdb/tools/ctdb.sysconfig diff --git a/ctdb/tools/events.d/samba b/ctdb/tools/events.d/samba index 417b6c4b3a5..51a42cfad3d 100644 --- a/ctdb/tools/events.d/samba +++ b/ctdb/tools/events.d/samba @@ -12,7 +12,7 @@ shift case $cmd in startup) # wait for the Samba tcp ports to become available - smb_ports=`testparm -stv 2> /dev/null | egrep '\s*smb ports =' | cut -d= -f2"` + smb_ports=`testparm -stv 2> /dev/null | egrep '\s*smb ports =' | cut -d= -f2` ctdb_wait_tcp_ports "Samba" $smb_ports # wait for all shared directories to become available @@ -34,6 +34,7 @@ case $cmd in ;; shutdown) + # shutdown Samba cleanly when ctdb goes down /etc/init.d/smb stop /etc/init.d/winbind stop ;; diff --git a/ctdb/tools/functions b/ctdb/tools/functions index df39c732b2f..5342dff7bd1 100644 --- a/ctdb/tools/functions +++ b/ctdb/tools/functions @@ -15,7 +15,14 @@ ctdb_wait_tcp_ports() { while [ $all_ok -eq 0 ]; do all_ok=1 for p in $wait_ports; do - /usr/bin/nc -z 127.0.0.1 $p || all_ok=0 + if [ -x /usr/bin/netcat ]; then + /usr/bin/netcat -z 127.0.0.1 $p || all_ok=0 + elif [ -x /usr/bin/nc ]; then + /usr/bin/nc -z 127.0.0.1 $p || all_ok=0 + else + echo "`date` netcat not found - cannot check tcp ports" + return + fi done [ $all_ok -eq 1 ] || sleep 1 /usr/bin/ctdb status > /dev/null 2>&1 || { diff --git a/ctdb/tools/statd-callout b/ctdb/tools/statd-callout index 92fb1aa031d..fd9a6a3f31a 100755 --- a/ctdb/tools/statd-callout +++ b/ctdb/tools/statd-callout @@ -25,8 +25,8 @@ case "$1" in ;; notify) # restart the local lock manager and statd - /sbin/service nfslock stop > /dev/null 2>&1 - /sbin/service nfslock start > /dev/null 2>&1 + /etc/init.d/nfslock stop > /dev/null 2>&1 + /etc/init.d/nfslock start > /dev/null 2>&1 # send out notifications to any additional ips we now serve for f in `/bin/ls /etc/ctdb/state/statd/ip/*`; do ip=`/bin/basename $f`