]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
make the packaging much more portable - tested on SLES9 and RHEL4
authorAndrew Tridgell <tridge@samba.org>
Fri, 1 Jun 2007 13:25:33 +0000 (23:25 +1000)
committerAndrew Tridgell <tridge@samba.org>
Fri, 1 Jun 2007 13:25:33 +0000 (23:25 +1000)
(This used to be ctdb commit 9521e3eee42b11303a2d6e0f5c05d0c0de4292d8)

ctdb/Makefile.in
ctdb/packaging/RPM/ctdb.spec [moved from ctdb/packaging/RHEL/ctdb.spec with 78% similarity]
ctdb/packaging/RPM/makerpms.sh [moved from ctdb/packaging/RHEL/makerpms.sh with 82% similarity]
ctdb/packaging/ctdb.init [moved from ctdb/packaging/RHEL/setup/ctdb.init with 57% similarity]
ctdb/takeover/system.c
ctdb/tools/ctdb.sysconfig [moved from ctdb/packaging/RHEL/setup/ctdb.sysconfig with 100% similarity]
ctdb/tools/events.d/samba
ctdb/tools/functions
ctdb/tools/statd-callout

index 2210474c908556f46e54df85d29d985fe3591617..7b6febc392701b4df8b26bebbe1520b4d26953d0 100644 (file)
@@ -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
similarity index 78%
rename from ctdb/packaging/RHEL/ctdb.spec
rename to ctdb/packaging/RPM/ctdb.spec
index 3c60d61510e4c9cf65a1251c891c5bff4c7b1bc8..b592973d73c8f0d2008b69c410cc236e2d3c25bd 100644 (file)
@@ -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
 
similarity index 82%
rename from ctdb/packaging/RHEL/makerpms.sh
rename to ctdb/packaging/RPM/makerpms.sh
index e43d53683c763cd95676083ac467cd55d0bbaec7..df06b905c64a777219a02f0f80c580760351c061 100755 (executable)
@@ -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
similarity index 57%
rename from ctdb/packaging/RHEL/setup/ctdb.init
rename to ctdb/packaging/ctdb.init
index e34107e6b30f907f9c4202685573ba4e2053e23d..488cbd7618f7ef19198da8e1b4367c2b2654347b 100755 (executable)
@@ -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}"
index cff122f35b0cbbba774f5fc286a8aefa54fac541..95c790fc1a057dd70aa2030a7c2dda42847ce49b 100644 (file)
@@ -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);
 }
 
 /*
index 417b6c4b3a59a406f5e44d1681ba0d7d5b8e3e34..51a42cfad3d77bab34b400dd11000f073b9c5e7a 100644 (file)
@@ -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
        ;;
index df39c732b2fa326d3a058d1821a130257e7e9eb6..5342dff7bd1911cdaa2b5c7b56855caf84b50329 100644 (file)
@@ -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 || {
index 92fb1aa031d54ca7a43a8d023024346be562542d..fd9a6a3f31a89f60bfc1fa9332bdcba43a0d0fb4 100755 (executable)
@@ -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`