[Fedora-directory-commits] ldapserver/wrappers initscript.in, 1.3, 1.4

Richard Allen Megginson (rmeggins) fedora-directory-commits at redhat.com
Fri Mar 16 20:29:59 UTC 2007


Author: rmeggins

Update of /cvs/dirsec/ldapserver/wrappers
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv27240

Modified Files:
	initscript.in 
Log Message:
Resolves: bug 232684
Description: need initscripts for Solaris
Reviewed by: nhosoi (Thanks!)
Fix Description: I was able to mostly use the linux initscript.  The biggest issue was that Solaris does not support bash for init scripts, so I had to convert all of the bash-isms to just use plain old Bourne shell syntax.  I removed the grep for the pids and just used kill -0, so I don't need the pids list or pidof anymore.  Solaris mounts /var/run in tmpfs (i.e. memory disk) which is removed upon reboot, so we have to create and set permission on /var/run if it doesn't exist.  Solaris also doesn't provide a library of useful shell functions, so I had to define success() and failure() if they don't exist.
Platforms tested: Solaris 9
Flag day: no
Doc: Yes - we will need to document the init scripts.



Index: initscript.in
===================================================================
RCS file: /cvs/dirsec/ldapserver/wrappers/initscript.in,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- initscript.in	12 Feb 2007 20:10:21 -0000	1.3
+++ initscript.in	16 Mar 2007 20:29:57 -0000	1.4
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # @package_name@    This starts and stops @package_name@
 #
@@ -11,24 +11,66 @@
 #
 
 # Source function library.
+if [ -f /etc/rc.d/init.d/functions ] ; then
 . /etc/rc.d/init.d/functions
+fi
 # Source networking configuration.
+if [ -f /etc/sysconfig/network ] ; then
 . /etc/sysconfig/network
+fi
 
 # Check that networking is up.
-if [ ${NETWORKING} = "no" ]
+if [ "${NETWORKING}" = "no" ]
 then
     echo "Networking is down"
     exit 0
 fi
 
+# failure and success are not defined on some platforms
+type failure > /dev/null 2>&1 || {
+failure()
+{
+    echo " FAILED\c"
+}
+}
+
+type success > /dev/null 2>&1 || {
+success()
+{
+    echo " SUCCESS\c"
+}
+}
 
-exec="@sbindir@/ns-slapd"
+# On Solaris /var/run is in tmpfs and gets wiped out upon reboot
+# we have to recreate the /var/run/@package_name@ directory
+# We also have to make sure that the directory is writable
+# by the directory server process
+# the argument to this function is the server instance directory,
+# which must have a dse.ldif file in it
+fix_pid_dir_ownership()
+{
+    if [ ! -d $piddir ] ; then
+	mkdir -p $piddir
+	owner=`grep \^nsslapd-localuser $1/dse.ldif | awk '{print $2}'`
+	if [ -n "$owner" ] ; then
+	    chown $owner $piddir
+	    chmod 700 $piddir
+	fi
+    fi
+}
+
+baseexec="ns-slapd"
+exec="@sbindir@/$baseexec"
 prog="@package_name@"
 # Lockfile
-lockfile="@localstatedir@/lock/subsys/@package_name@"
+if [ -d "@localstatedir@/lock/subsys" ] ; then
+    lockfile="@localstatedir@/lock/subsys/@package_name@"
+else
+    lockfile="@localstatedir@/lock/@package_name@/lock"
+fi
 # PID directory
 piddir="@localstatedir@/run/@package_name@"
+
 # Instance basedir
 instbase="@instconfigdir@"
 
@@ -38,13 +80,11 @@
 
 umask 077
 
-pids=$(pidof $exec)
-
 INSTANCES=""
 
 for FILE in `/bin/ls -d $instbase/slapd-* 2>/dev/null`; do
     if [ -d "$FILE" ] ; then
-        inst=$(echo "$FILE" | sed -e "s|$instbase/slapd-||")
+        inst=`echo "$FILE" | sed -e "s|$instbase/slapd-||"`
         INSTANCES="$INSTANCES $inst"
     fi
 done
@@ -56,7 +96,7 @@
       fi
    done
    if [ "$2" != "$INSTANCES" ]; then
-      echo -n "$2 is an invalid @package_name@ instance"
+      echo "$2 is an invalid @package_name@ instance\c"
       failure; echo
       exit 1
    fi
@@ -64,13 +104,14 @@
 
 start() {
     if [ -n "$INSTANCES" ]; then
-        export LD_LIBRARY_PATH=@libdir@/@package_name@:@nss_libdir@
+        LD_LIBRARY_PATH=@libdir@/@package_name@:@nss_libdir@
+        export LD_LIBRARY_PATH
         echo  "Starting $prog: "
         # Start every slapd instance that isn't already running
         errors=0
         successes=0
         for instance in $INSTANCES; do
-            echo -n "    $instance..."
+            echo "    $instance...\c"
             # the server creates pidfile and writes the pid to it when it is fully
             # started and available to serve clients
             pidfile=$piddir/slapd-$instance.pid
@@ -79,15 +120,15 @@
             # die a horrible death (e.g. shared lib problem, oom, etc.)
             startpidfile=$piddir/slapd-$instance.startpid
             server_running=0
-            if [ -e $pidfile ]; then
-                pid=$(cat $pidfile)
-                if [ $(echo "$pids" | grep -c $pid) -ge 1 ]; then
-                    echo -n " already running"
+            if [ -f $pidfile ]; then
+                pid=`cat $pidfile`
+                if kill -0 $pid > /dev/null 2>&1 ; then
+                    echo " already running\c"
                     success; echo
-                    let successes=successes+1
+                    successes=`expr $successes + 1`
                     server_running=1
                 else
-                    echo -n " not running, but pid file exists - attempt to start anyway..."
+                    echo " not running, but pid file exists - attempt to start anyway...\c"
                     rm -f $pidfile
                 fi
             fi
@@ -95,12 +136,13 @@
             if [ $server_running -eq 0 ] ; then
                 rm -f $pidfile
                 rm -f $startpidfile
+		fix_pid_dir_ownership $instbase/slapd-$instance
                 $exec -D $instbase/slapd-$instance -i $pidfile -w $startpidfile
                 if [ $? -eq 0 ]; then
                     server_started=1 # well, perhaps not running, but started ok
                 else
                     failure; echo
-                    let errors=errors+1
+                    errors=`expr $errors + 1`
                 fi
             fi
             # ok, if we started the server successfully, let's see if it is really
@@ -119,7 +161,7 @@
                 done
                 if test ! -f $startpidfile ; then
                     failure; echo
-                    let errors=errors+1
+                    errors=`expr $errors + 1`
                     server_started=0
                 fi
             fi
@@ -144,10 +186,10 @@
                 done
                 if kill -0 $pid > /dev/null 2>&1 && test -f $pidfile ; then
                     success; echo
-                    let successes=successes+1
+                    successes=`expr $successes + 1`
                 else
                     failure; echo
-                    let errors=errors+1
+                    errors=`expr $errors + 1`
                 fi
             fi
             rm -f $startpidfile
@@ -168,17 +210,17 @@
     errors=0
     for instance in $INSTANCES; do
         pidfile=$piddir/slapd-$instance.pid
-        if [ -e $pidfile ]; then
-            pid=$(cat $pidfile)
-            echo -n "    $instance..."
+        if [ -f $pidfile ]; then
+            pid=`cat $pidfile`
+            echo "    $instance...\c"
             server_stopped=0
-            if [ $(echo "$pids" | grep -c $pid) -ge 1 ]; then
+            if kill -0 $pid > /dev/null 2>&1 ; then
                 kill $pid
                 if [ $? -eq 0 ]; then
                     server_stopped=1
                 else
                     failure; echo
-                    let errors=errors+1
+                    errors=`expr $errors + 1`
                 fi
             fi
             if [ $server_stopped -eq 1 ] ; then
@@ -198,7 +240,7 @@
                 done
                 if test -f $pidfile ; then
                     failure; echo
-                    let errors=errors+1
+                    errors=`expr $errors + 1`
                 else
                     success; echo
                     rm -f $pidfile
@@ -207,7 +249,7 @@
         fi
     done
     if [ $errors -ge 1 ]; then
-        echo -n "*** Error: $errors instance(s) unsuccessfully stopped"
+        echo "*** Error: $errors instance(s) unsuccessfully stopped\c"
         failure; echo
     else
         rm -f $lockfile
@@ -222,9 +264,9 @@
 
 status() {
      for instance in $INSTANCES; do
-         if [ -e $piddir/slapd-$instance.pid ]; then
-             pid=$(cat $piddir/slapd-$instance.pid)
-             if [ $(echo "$pids" | grep -c $pid) -ge 1 ]; then
+         if [ -f $piddir/slapd-$instance.pid ]; then
+             pid=`cat $piddir/slapd-$instance.pid`
+             if kill -0 $pid > /dev/null 2>&1 ; then
                  echo "$prog $instance (pid $pid) is running..."
              else
                 echo "$prog $instance dead but pid file exists"
@@ -244,6 +286,7 @@
         [ ! -f $lockfile ] || restart
         ;;
     *)
-        echo $"Usage: $0 {start|stop|status|restart|condrestart} [instance-name]"
+	echo Unknown command $1
+        echo "Usage: $0 {start|stop|status|restart|condrestart} [instance-name]"
         exit 2
 esac




More information about the Fedora-directory-commits mailing list