File hsqldb-1.8.0.10-suse-initscript.patch of Package hsqldb

Index: bin/hsqldb
===================================================================
--- bin/hsqldb.orig	2011-01-14 13:55:34.636488672 +0100
+++ bin/hsqldb	2011-01-14 14:05:37.464628070 +0100
@@ -50,7 +50,7 @@
 ### BEGIN INIT INFO
 # Provides:          HSQLDB-Server
 # Required-Start:    $syslog $remote_fs $network $named
-# Required-Stop:
+# Required-Stop:     $syslog $remote_fs $network $named
 # Default-Start:     3 5
 # Default-Stop:      0 1 2 6
 # Short-Description: HSQLDB-Server
@@ -89,19 +89,73 @@
 
 #  -- blaine.simpson@admc.com
 
+# Shell functions sourced from /etc/rc.status:
+#      rc_check         check and set local and overall rc status
+#      rc_status        check and set local and overall rc status
+#      rc_status -v     ditto but be verbose in local rc status
+#      rc_status -v -r  ditto and clear the local rc status
+#      rc_failed        set local and overall rc status to failed
+#      rc_failed <num>  set local and overall rc status to <num><num>
+#      rc_reset         clear local rc status (overall remains)
+#      rc_exit          exit appropriate to overall rc status
+. /etc/rc.status
+
+# First reset status of this service
+rc_reset
+
+# Return values acc. to LSB for all commands but status:
+# 0 - success
+# 1 - generic or unspecified error
+# 2 - invalid or excess argument(s)
+# 3 - unimplemented feature (e.g. "reload")
+# 4 - insufficient privilege
+# 5 - program is not installed
+# 6 - program is not configured
+# 7 - program is not running
+# 
+# Note that starting an already running service, stopping
+# or restarting a not-running service as well as the restart
+# with force-reload (in case signalling is not supported) are
+# considered a success.
+
 set +u
 
+# "chown" lives in /usr on some UNIXes.
+PATH="/bin:/sbin:/usr/sbin"
+
+
+NAME="$(/bin/basename $0)"
+unset ISBOOT
+if [ "${NAME:0:1}" = "S" -o "${NAME:0:1}" = "K" ]; then
+    NAME="${NAME:3}"
+    ISBOOT="1"
+fi
+
+# remove SUSE's rc name
+if [ "${NAME:0:2}" = "rc" ]; then
+    NAME="${NAME:2}"
+fi
+
+# For SELinux we need to use 'runuser' not 'su'
+if [ -x "/sbin/runuser" ]; then
+    SU="/sbin/runuser"
+else
+    SU="/bin/su"
+fi
+
 # This is only used for recursive invocations.
 # Will not necessarily be set correctly at system bootup invocations
 # (where it is sometimes invoked like "sh... /path/to/hsqldb start"),
 # but, in those cases there will be no recursion.
-INVOC_PATH=`dirname "$0"` || {
+INVOC_PATH=`/usr/bin/dirname "$0"` || {
     echo "'dirname' failed" 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 [ -n "$INVOC_PATH" ] && INVOC_PATH="${INVOC_PATH}/"
 
-SYNTAX_MSG="SYNTAX:  ${INVOC_PATH}hsqldb start|stop|stopcompact|restart|restartcmpacted|status"
+SYNTAX_MSG="Usage:  ${INVOC_PATH}/${NAME} start|stop|status|try-restart|restart|force-reload|reload|probe"
 
 # You can override any of these default values in your config file:
 
@@ -110,9 +164,12 @@
 SU_ECHO_SECS=1
 # File used as semaphore.  If file is removed, a running pid checker
 # process will exit.
-PIDCHECKER_FLAGFILE=`mktemp /tmp/hsqldb.XXXXXXXX`
+PIDCHECKER_FLAGFILE=`/bin/mktemp /tmp/hsqldb.XXXXXXXX`
 if [ x"$PIDCHECKER_FLAGFILE" = "x" ] ; then
-	echo "unable to create tmp file"; exit 1
+	echo "unable to create tmp file"
+        rc_failed 1
+        rc_status -v
+        rc_exit
 fi
 # The following settings get overridden by optional setting in the config file.
 # Time to allow for JVM to die after all HSQLDB instances stopped.
@@ -168,25 +225,31 @@
 done
 [ -n "$CFGFILE" ] || {
     echo "No global config file found in any of allowed locations" 1>&2
-    exit 11
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 
 # Sanity check
 [ -n "$LOGFILE" ] && [ -n "$PIDFILE" ] || {
     echo "Internal problem in init script" 1>&2
-    exit 11
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 
 [ $# -eq 1 ] || {
     echo "$SYNTAX_MSG" 1>&2
-    exit 4
+    exit 1
 }
 
 # It would be nice to permit some uses, like "status" by non-root users,
 # but for now our goal is a superuser init script.
 [ -w / ] || {   # Very portable, but perhaps not perfect, test for superuser.
     echo "Only 'root' may use this init script" 1>&2
-    exit 4
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 
 # Use bsd-style enable/disable if it's in place.
@@ -209,11 +272,15 @@
 
 [ -r "$CFGFILE" ] || {
     echo "Unable to read config file '$CFGFILE'" 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 [ -f "$CFGFILE" ] || {
     echo "'$CFGFILE' is not a regular file" 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 HSQLDB_OWNER=
 JAVA_EXECUTABLE=
@@ -221,6 +288,28 @@
 SERVER_HOME=
 SHUTDOWN_URLIDS=
 . "$CFGFILE"
+
+[ -z "$JAVA_EXECUTABLE" ] && {
+    # JPackage source Java config
+    . /etc/java/java.conf
+
+    if [ -n "$JAVA_HOME" ]; then
+        JAVA_EXECUTABLE=${JAVA_HOME}/bin/java
+    else
+        JAVA_EXECUTABLE=${JVM_ROOT}/java/bin/java
+    fi
+
+    if [ -z "$JAVA_HOME" ]; then
+        if [ -d "$JVM_ROOT/java" ]; then
+            JAVA_EXECUTABLE=$JVM_ROOT/java/bin/java
+        else
+            JAVA_EXECUTABLE=$JVM_ROOT/jre/bin/java
+        fi
+    else
+        JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+    fi
+}
+
 # Suffix delimiter to $SERVER_ADDL_CLASSPATH, if it is set.
 [ -n "$SERVER_ADDL_CLASSPATH" ] &&
 SERVER_ADDL_CLASSPATH="${SERVER_ADDL_CLASSPATH}:"
@@ -229,15 +318,21 @@
 [ -n "$SERVER_HOME" ] || {
     echo "Config file '$CFGFILE' does not set one or more of following variables
     JAVA_EXECUTABLE, HSQLDB_JAR_PATH, SERVER_HOME" 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 [ -d "$SERVER_HOME" ] || {
     echo "SERVER_HOME variable in '$CFGFILE' is set to a non-directory." 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 [ -f "$JAVA_EXECUTABLE" ] && [ -f "$HSQLDB_JAR_PATH" ] || {
     echo "JAVA_EXECUTABLE or HSQLDB_JAR_PATH in '$CFGFILE' is set to a non-file." 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 
 # PROPERTY_FILE is a derived value.
@@ -246,28 +341,36 @@
     WebServer) PROPERTY_FILE="$SERVER_HOME"/webserver.properties;;
     *)
         echo 'Unsupported value for $TARGET_CLASS:  '"$TARGET_CLASS" 1>&2
-        exit 2;;
+    rc_failed 2
+    rc_status -v
+    rc_exit
+    ;;
 esac
 [ -f "$PROPERTY_FILE" ] || {
     echo "'$PROPERTY_FILE' is missing" 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 [ -r "$PROPERTY_FILE" ] || {
     echo "'$PROPERTY_FILE' isn't readable" 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 [ -r "$HSQLDB_JAR_PATH" ] || {
     echo "'$HSQLDB_JAR_PATH' isn't readable" 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 [ -x "$JAVA_EXECUTABLE" ] || {
     echo "No Java executable found at '$JAVA_EXECUTABLE'" 1>&2
-    exit 2
+    rc_failed 1
+    rc_status -v
+    rc_exit
 }
 
-# "chown" lives here on some UNIXes.
-PATH="$PATH:/usr/sbin"
-
 # Make a good effort (but not bullet-proof) check on permissions of the
 # auth file.  Unfortunately, if auth-file is not specified, this depends
 # upon both (a) $HOME being set; and (b) SqlToolSprayer and SqlTool defaults.
@@ -279,15 +382,21 @@
     [ -n "${_AUTH_TEST_PATH}" ] || _AUTH_TEST_PATH="$HOME/sqltool.rc"
     [ -f "$_AUTH_TEST_PATH" ] || {
         echo "No auth file found at '$_AUTH_TEST_PATH'" 1>&2
-        exit 2
+        rc_failed 1
+        rc_status -v
+        rc_exit
     }
     [ -r "$_AUTH_TEST_PATH" ] || {
         echo "Auth file '$_AUTH_TEST_PATH' not readable" 1>&2
-        exit 2
+        rc_failed 1
+        rc_status -v
+        rc_exit
     }
     ls -ld "$_AUTH_TEST_PATH" | grep '^-..------' > /dev/null 2>&1 || {
         echo "Fix permissions on '$_AUTH_TEST_PATH' like 'chmod 600 $_AUTH_TEST_PATH'" 1>&2
-        exit 2
+        rc_failed 1
+        rc_status -v
+        rc_exit
     }
 fi
 
@@ -296,29 +405,37 @@
 [ -r "$PIDFILE" ]  && {
     [ -f "$PIDFILE" ] || {
         echo "'$PIDFILE' is not a regular file" 1>&2
-        exit 6
+        rc_failed 1
+        rc_status -v
+        rc_exit
     }
     [ -w "$PIDFILE" ] || {
         echo "'$PIDFILE' is not writable" 1>&2
-        exit 6
+        rc_failed 1
+        rc_status -v
+        rc_exit
     }
     HSQLDB_PID="`cat $PIDFILE`" || {
         echo "Failed to read pid file '$PIDFILE'" 1>&2
-        exit 6
+        rc_failed 1
+        rc_status -v
+        rc_exit
     }
     case "$HSQLDB_PID" in
         *[a-zA-Z/!@#$%*+=_~]*) HSQLDB_PID=;;
         *'^'*) HSQLDB_PID=;;
     esac
     [ -n "$HSQLDB_PID" ] || {
-        echo "Pid file '$PIDFILE' does not contain a valid process identifier" 1>&2
-        exit 6
+        rc_failed 7
+        rc_status -v
+        rc_exit
     }
     kill -0 "$HSQLDB_PID" > /dev/null 2>&1 || {
         echo 'Removing stale pid file'
         rm -f "$PIDFILE" || {
-            echo "Failed to remove pid file '$PIDFILE'" 1>&2
-            exit 6
+            rc_failed 1
+            rc_status -v
+            rc_exit
         }
         HSQLDB_PID=
     }
@@ -329,7 +446,9 @@
     status)
         [ -n "$HSQLDB_PID" ] || {
             echo "I don't know of any running hsqldb server."
-            exit 0
+            rc_failed 7
+            rc_status -v
+            rc_exit
         }
         echo "There is an hsqldb server loaded from $HSQLDB_JAR_PATH
 running with pid $HSQLDB_PID."
@@ -348,32 +467,42 @@
             "-Dsqltoolsprayer.propfile=$PROPERTY_FILE" \
             "-Dsqltoolsprayer.monfile=$PIDFILE" \
             org.hsqldb.util.SqlToolSprayer '--;'
+        rc_failed 0
+        rc_status -v
+        rc_exit
     ;;
     start)
         [ -n "$HSQLDB_PID" ] && {
         echo "There is already a hsqldb server running with pid $HSQLDB_PID." 1>&2
-            exit 1
+            rc_failed 0
+            rc_status -v
+            rc_exit
         }
         TLS_SWITCHES=
         [ -n "$TLS_KEYSTORE" ] &&
         TLS_SWITCHES="-Djavax.net.ssl.keyStore=$TLS_KEYSTORE -Djavax.net.ssl.keyStorePassword=$TLS_PASSWORD"
         if [ -n "$HSQLDB_OWNER" ]; then
             touch "$PIDFILE" || {
-                echo "Failed to create pid file" 1>&2
-                exit 1
+                rc_failed 1
+                rc_status -v
+                rc_exit
             }
             chown "$HSQLDB_OWNER" "$PIDFILE" || {
                 echo "Failed to chown pid file to '$HSQLDB_OWNER'" 1>&2
-                exit 1
+                rc_failed 1
+                rc_status -v
+                rc_exit
             }
             # Some OSes choke if there are newlines in this string.
             # N.b.!!!  The shell of the -c command is the target user's default
             # login shell, so keep this command shell-independent!
-            nohup su "$HSQLDB_OWNER" -c "cd '$SERVER_HOME' && echo "'$$'" > '$PIDFILE' && exec '$JAVA_EXECUTABLE' $SERVER_JVMARGS $TLS_SWITCHES -classpath '${SERVER_ADDL_CLASSPATH}${HSQLDB_JAR_PATH}' org.hsqldb.util.MainInvoker org.hsqldb.$TARGET_CLASS $INVOC_ADDL_ARGS" >> "$LOGFILE" 2>&1 &
+            /usr/bin/nohup $SU "$HSQLDB_OWNER" -s /bin/sh -c "cd '$SERVER_HOME' && echo "'$$'" > '$PIDFILE' && exec '$JAVA_EXECUTABLE' $SERVER_JVMARGS $TLS_SWITCHES -classpath '${SERVER_ADDL_CLASSPATH}${HSQLDB_JAR_PATH}' org.hsqldb.util.MainInvoker org.hsqldb.$TARGET_CLASS $INVOC_ADDL_ARGS" >> "$LOGFILE" 2>&1 &
         else
             cd "$SERVER_HOME" || {
                 echo "Failed to cd to '$SERVER_HOME'" 1>&2
-                exit 1
+                rc_failed 1
+                rc_status -v
+                rc_exit
             }
             export JAVA_EXECUTABLE
             export HSQLDB_JAR_PATH
@@ -382,10 +511,12 @@
             export SERVER_JVMARGS
             export TARGET_CLASS
             export INVOC_ADDL_ARGS
-            nohup sh -c '
+            /usr/bin/nohup sh -c '
                 echo $$ > "$PIDFILE" || {
                     echo "Failed to write pid to pid file" 1>&2
-                    exit 1
+                    rc_failed 1
+                    rc_status -v
+                    rc_exit
                 }
                 eval exec "$JAVA_EXECUTABLE" $SERVER_JVMARGS $TLS_SWITCHES -classpath "${SERVER_ADDL_CLASSPATH}${HSQLDB_JAR_PATH}"  org.hsqldb.util.MainInvoker org.hsqldb.$TARGET_CLASS $INVOC_ADDL_ARGS
             ' >> "$LOGFILE" 2>&1 &
@@ -404,7 +535,9 @@
         # but regardless of why, the pid file does not contain a valid pid.
         touch "$PIDCHECKER_FLAGFILE" || {
             echo "Failed to touch file '$PIDCHECKER_FLAGFILE'" 1>&2
-            exit 1
+            rc_failed 1
+            rc_status -v
+            rc_exit
         }
         export PIDCHECKER_FLAGFILE
         export PIDFILE
@@ -414,7 +547,9 @@
                 [ -f "$PIDCHECKER_FLAGFILE" ] || exit 0
                 kill -0 "`cat $PIDFILE`" > /dev/null 2>&1 || {
                     rm -f "$PIDFILE" "$PIDCHECKER_FLAGFILE"
-                    exit 1
+                    rc_failed 1
+                    rc_status -v
+                    rc_exit
                 }
                 sleep 1
             done
@@ -426,18 +561,24 @@
             org.hsqldb.util.SqlToolSprayer '--;' && {
             rm -f "$PIDCHECKER_FLAGFILE"
             echo "org.hsqldb.$TARGET_CLASS started with pid `cat $PIDFILE`"
-            exit 0
+            rc_failed 0
+            rc_status -v
+            rc_exit
         }
         rm -f "$PIDCHECKER_FLAGFILE"
         echo "Failed to start org.hsqldb.$TARGET_CLASS.
 See log file '$LOGFILE'." 1>&2
-        exit 1
+        rc_failed 1
+        rc_status -v
+        rc_exit
     ;;
     stop|stopcompact)
         [ "$COMMAND" = stopcompact ] && SHUTDOWN_OPTION='compact'
         [ -n "$HSQLDB_PID" ] || {
             echo "I don't know of any running hsqldb server." 1>&2
-            exit 1
+            rc_failed 7
+            rc_status -v
+            rc_exit
         }
         AUTH_FILE_SWITCH=
         # N.b., there will be a problem if there are special characters or
@@ -455,23 +596,64 @@
         sleep $MAX_TERMINATE_SECS  # Give the JVM a sec. or 2 to fully exit.
         kill -0 "$HSQLDB_PID" > /dev/null 2>&1 && {
             echo "WARNING:  hsqldb is still running!" 1>&2
-            exit 1
+            rc_failed 1
+            rc_status -v
+            rc_exit
         }
         rm -f "$PIDFILE" || {
             echo "Failed to remove pid file '$PIDFILE'" 1>&2
-            exit 1
+            rc_failed 1
+            rc_status -v
+            rc_exit
         }
         echo "Successful shutdown ${SHUTDOWN_OPTION} (for the $TARGET_CLASS process)!"
-        exit 0
+        rc_failed 0
+        rc_status -v
+        rc_exit
     ;;
     restart|restartcompacted)
         STOP_COMMAND=stop
         [ "$COMMAND" = restartcompacted ] && STOP_COMMAND=stopcompact
-        "${INVOC_PATH}"hsqldb $STOP_COMMAND || exit $?
+        "${INVOC_PATH}"hsqldb $STOP_COMMAND || { 
+            rc_failed $?
+            rc_status -s
+            rc_exit
+        }
         exec "${INVOC_PATH}"/hsqldb start
+        rc_failed $?
+        rc_status -s
+        rc_exit
     ;;
+    try-restart)
+	## Stop the service and if this succeeds (i.e. the 
+	## service was running before), start it again.
+        ## Note: try-restart is not (yet) part of LSB (as of 0.7.5)
+        $0 status >/dev/null &&  $0 restart
+	
+	# Remember status and be quiet
+	rc_status
+	;;
+    force-reload)
+	## Signal the daemon to reload its config. Most daemons
+	## do this on signal 1 (SIGHUP).
+	## If it does not support it, restart.
+
+	echo -n "Reload service hsqldb"
+	## if it supports it:
+	#killproc -HUP $TOMCAT_BIN
+	#touch /var/run/FOO.pid
+	#rc_status -v
+
+	## Otherwise:
+	$0 stop  &&  $0 start
+	rc_status
+	;;
+    reload|probe)
+	rc_failed 3
+	rc_status -v
+	;;
     *)
         echo "$SYNTAX_MSG" 1>&2
-        exit 5
+	exit 1
     ;;
 esac
openSUSE Build Service is sponsored by