From 5eea85798a7476a490262164c65fb5836d275165 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Wed, 03 Dec 2008 14:37:50 +0000
Subject: [PATCH] Provide suppport for SMF for the SVR4 packages. A SMF manifest is delivered in /usr/opends/resources/opends-manifest.xml The manifest is edited and copied under /var/svc/manifest/network/ldap by the configure command (will be committed later), and imported via svccfg. start-ds / stop-ds / control-panel can be used to start /stop the server. They temporarily enable/disable the opends service. Use svcadm enable opends to permanently enable OpenDS to start at boot time.

---
 opends/src/svr4/OpenDS/_svc-opends.sh                                      |   63 ++++++++++++
 opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java |    2 
 opends/resource/bin/stop-ds                                                |   17 +++
 opends/src/svr4/OpenDS/opends-manifest.xml                                 |   99 +++++++++++++++++++
 opends/src/messages/messages/tools.properties                              |    2 
 opends/src/svr4/OpenDS/layout.xml                                          |   48 +++++++--
 opends/resource/bin/start-ds                                               |   20 ++++
 opends/build-svr4.xml                                                      |    2 
 8 files changed, 237 insertions(+), 16 deletions(-)

diff --git a/opends/build-svr4.xml b/opends/build-svr4.xml
index f7c5b86..c6b9166 100644
--- a/opends/build-svr4.xml
+++ b/opends/build-svr4.xml
@@ -51,7 +51,7 @@
   <property name="pkg.arch"       value="all" />
   <property name="pkg.desc"       value="${product}" />
   <property name="pkg.vendor"     value="Sun Microsystems, Inc." />
-  <property name="pkg.basedir"    value="/opt" />
+  <property name="pkg.basedir"    value="/usr" />
 
   <!-- Some others general properties -->
   <property name="svr4.build.dir"        location="${build.dir}/package/svr4/build/${pkg.name}" />
diff --git a/opends/resource/bin/start-ds b/opends/resource/bin/start-ds
index ffbfe97..fe0386e 100755
--- a/opends/resource/bin/start-ds
+++ b/opends/resource/bin/start-ds
@@ -45,6 +45,26 @@
 SCRIPT_NAME="start-ds"
 export SCRIPT_NAME
 
+# check for presence of lib/_svc-opends.sh file
+# If present, we should be on Solaris/OpenSolaris and use SMF to start
+# OpenDS. 
+# Check --exec. If not present, start OpenDS from SMF
+
+if test -f "${INSTALL_ROOT}/lib/_svc-opends.sh"
+then
+    if [ "$1" == "--exec" ]
+    then
+        shift
+    elif [ -z "$1" -o "$1" == "-L" -o "$1" == "-Q" -o "$1" == "-N" -o \
+     "$1" == "--nodetach" -o "$1" == "-useLastKnownGoodConfig" \
+     -o "$1" == "--quiet" ]
+    then
+# these options are only used when trying to start the server
+# In this case, start it through the service.
+        exec /usr/sbin/svcadm enable -t svc:/network/ldap/server:opends
+    fi
+fi
+
 # Set environment variables
 SCRIPT_UTIL_CMD=set-full-environment-and-test-java
 export SCRIPT_UTIL_CMD
diff --git a/opends/resource/bin/stop-ds b/opends/resource/bin/stop-ds
index a316e5a..89b284e 100755
--- a/opends/resource/bin/stop-ds
+++ b/opends/resource/bin/stop-ds
@@ -59,6 +59,23 @@
 SCRIPT_NAME="stop-ds"
 export SCRIPT_NAME
 
+# check for presence of lib/_svc-opends.sh file
+# If present, we should be on Solaris/OpenSolaris and use SMF to start
+# OpenDS. 
+# Check --exec. If not present, start OpenDS from SMF
+if test -f "${INSTALL_ROOT}/lib/_svc-opends.sh"
+then
+    if [ "$1" == "--exec" ]
+    then
+        shift
+    elif [ "$1" != "-V" -a "$1" != "--version" -a "$1" != "-?" -a \
+        "$1" != "-H" -a "$1" != "--help" ]
+#These options are not stopping the server, but checking version and help
+    then
+        exec /usr/sbin/svcadm disable -t svc:/network/ldap/server:opends
+    fi
+fi
+
 # Set environment variables
 SCRIPT_UTIL_CMD=set-full-environment-and-test-java
 export SCRIPT_UTIL_CMD
diff --git a/opends/src/messages/messages/tools.properties b/opends/src/messages/messages/tools.properties
index 7bb70e0..92298ae 100644
--- a/opends/src/messages/messages/tools.properties
+++ b/opends/src/messages/messages/tools.properties
@@ -2424,6 +2424,6 @@
 
 
 SEVERE_ERR_CONFIGURE_USER_NOT_EXIST_1648=User [%s] does not exist
-SEVERE_ERR_CONFIGURE_OPENDSD_NOT_EXIST_1649=User/role [opendsd] does not exist. \
+SEVERE_ERR_CONFIGURE_LDAPUSER_NOT_EXIST_1649=User/role [%s] does not exist. \
 Create it or use --userName option to specify another user
 
diff --git a/opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java b/opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java
index 9fcfd0a..a932d4e 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java
@@ -209,7 +209,7 @@
         exit = proc.exitValue();
         if (exit != 0) {
           LOG.log(Level.SEVERE, "[" + cmd + "] returns " + exit);
-          System.err.println(ERR_CONFIGURE_OPENDSD_NOT_EXIST.get());
+          System.err.println(ERR_CONFIGURE_LDAPUSER_NOT_EXIST.get(user));
           System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
         }
       }
diff --git a/opends/src/svr4/OpenDS/_svc-opends.sh b/opends/src/svr4/OpenDS/_svc-opends.sh
new file mode 100644
index 0000000..eaa0c9f
--- /dev/null
+++ b/opends/src/svr4/OpenDS/_svc-opends.sh
@@ -0,0 +1,63 @@
+#! /bin/sh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License").  You may not use this file except in compliance
+# with the License.
+#
+# You can obtain a copy of the license at
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+# add the following below this CDDL HEADER, with the fields enclosed
+# by brackets "[]" replaced with your own identifying information:
+#      Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+#      Copyright 2008 Sun Microsystems, Inc.
+
+. /lib/svc/share/smf_include.sh
+
+STARTDS="/usr/opends/bin/start-ds --exec"
+STOPDS="/usr/opends/bin/stop-ds --exec"
+TEST="/usr/bin/test"
+
+case "$1" in
+'start')
+    OPENDS_JAVA_HOME="${OPENDS_JAVA_HOME}" \
+    OPENDS_JAVA_ARGS="${OPENDS_JAVA_ARGS}" ${STARTDS}
+    RES=$?
+    if ${TEST} ${RES} -ne 0
+    then
+        if ${TEST} ${RES} -eq 98
+        then
+# Already started
+            exit ${SMF_EXIT_OK}
+        else
+            exit ${SMF_EXIT_ERR_FATAL}
+        fi
+    fi
+    ;;
+
+'stop')
+    OPENDS_JAVA_HOME="${OPENDS_JAVA_HOME}" ${STOPDS}
+    if ${TEST} $? -ne 0
+    then
+        exit ${SMF_EXIT_ERR_FATAL}
+    fi
+    ;;
+*)
+    echo "Usage: $0 { start | stop }"
+    exit ${SMF_EXIT_ERR_FATAL}
+    ;;
+esac
+exit ${SMF_EXIT_OK}
diff --git a/opends/src/svr4/OpenDS/layout.xml b/opends/src/svr4/OpenDS/layout.xml
index 8813227..c08a16a 100644
--- a/opends/src/svr4/OpenDS/layout.xml
+++ b/opends/src/svr4/OpenDS/layout.xml
@@ -67,10 +67,13 @@
 
     <getsvnrevision property="REVISION_NUMBER" /> 
 
-    <property name="zip.dir"           location="${pkg.dir}/${product}-${pkg.version}" />
+    <property name="zip.dir"
+        location="${pkg.dir}/${product}-${pkg.version}" />
     
-	<echo message="Building layout for ${pkg.name} pkg based on ${zip.dir}" />
-	<!-- copy ZIP layout. Use exec instead of copy task to preserve file permissions -->
+	<echo 
+        message="Building layout for ${pkg.name} pkg based on ${zip.dir}" />
+	<!-- copy ZIP layout.
+        Use exec instead of copy task to preserve file permissions -->
 	<mkdir dir="${svr4.layout.dir}"/>
 	<exec executable="cp">
 	    <arg value="-R"/>
@@ -82,7 +85,8 @@
 	   <fileset dir="${svr4.layout.pkg.dir}" includes="**/*.exe"/>
 	   <fileset dir="${svr4.layout.pkg.dir}" includes="**/*.bat"/>
 	   <fileset dir="${svr4.layout.pkg.dir}" includes="**/bat/"/>
-	   <fileset dir="${svr4.layout.pkg.dir}" includes="**/README_WINDOWS.txt"/>
+	   <fileset dir="${svr4.layout.pkg.dir}"
+               includes="**/README_WINDOWS.txt"/>
 	</delete>
 	<!-- Remove MacOS specific files  -->
 	<delete includeemptydirs="true">
@@ -102,15 +106,30 @@
 	<delete file="${svr4.layout.pkg.dir}/install.txt" />
 	<delete file="${svr4.layout.pkg.dir}/install.html" />
 	<!-- Add SVR4 README / install files -->
-	<copy file="${svr4.src.dir}/README" tofile="${svr4.layout.pkg.dir}/README" />
-	<copy file="${svr4.src.dir}/install.txt" tofile="${svr4.layout.pkg.dir}/install.txt" />
-	<copy file="${svr4.src.dir}/install.html" tofile="${svr4.layout.pkg.dir}/install.html" />
+	<copy file="${svr4.src.dir}/README"
+        tofile="${svr4.layout.pkg.dir}/README" />
+	<copy file="${svr4.src.dir}/install.txt"
+        tofile="${svr4.layout.pkg.dir}/install.txt" />
+	<copy file="${svr4.src.dir}/install.html"
+        tofile="${svr4.layout.pkg.dir}/install.html" />
+        <!-- Add svc-opends.sh wrapper -->
+        <copy file="${svr4.src.dir}/_svc-opends.sh"
+            tofile="${svr4.layout.pkg.dir}/lib/_svc-opends.sh" />
+        <chmod file="${svr4.layout.pkg.dir}/lib/_svc-opends.sh" perm="755" />
+        <!-- Add the SMF Manifest for OpenDS in a resources directory -->
+        <mkdir dir="${svr4.layout.pkg.dir}/resources"/>
+        <copy file="${svr4.src.dir}/opends-manifest.xml"
+            tofile="${svr4.layout.pkg.dir}/resources/opends-manifest.xml" />
+        <chmod file="${svr4.layout.pkg.dir}/resources/opends-manifest.xml"
+            perm="644" />
 	<!-- Add configure script -->
-	<copy file="${resource.dir}/configure" tofile="${svr4.layout.pkg.dir}/configure" />
+	<copy file="${resource.dir}/configure"
+        tofile="${svr4.layout.pkg.dir}/configure" />
 	<chmod file="${svr4.layout.pkg.dir}/configure" perm="744" />
-	<!-- Replace zip upgrade script by svr4 upgrade script -->
+  	<!-- Replace zip upgrade script by svr4 upgrade script -->
 	<delete file="${svr4.layout.pkg.dir}/upgrade" />
-	<copy file="${resource.dir}/upgrade_svr4" tofile="${svr4.layout.pkg.dir}/upgrade" />
+	<copy file="${resource.dir}/upgrade_svr4"
+        tofile="${svr4.layout.pkg.dir}/upgrade" />
 	<chmod file="${svr4.layout.pkg.dir}/upgrade" perm="755" />
 	<!-- Move instance files in ${svr4.layout.pkg.dir}/tmpl_instance  -->
 	<mkdir dir="${svr4.layout.pkg.dir}/tmpl_instance"/>
@@ -118,7 +137,8 @@
         <mkdir dir="${svr4.layout.pkg.dir}/tmpl_instance/lib"/>
         <chmod dir="${svr4.layout.pkg.dir}/tmpl_instance/lib" perm="755"/>
         <mkdir dir="${svr4.layout.pkg.dir}/tmpl_instance/lib/extensions"/>
-        <chmod dir="${svr4.layout.pkg.dir}/tmpl_instance/lib/extensions" perm="755"/>
+        <chmod dir="${svr4.layout.pkg.dir}/tmpl_instance/lib/extensions"
+            perm="755"/>
 	<move todir="${svr4.layout.pkg.dir}/tmpl_instance/bak">
 	  <fileset dir="${svr4.layout.pkg.dir}/bak"/>
 	</move>
@@ -137,7 +157,8 @@
 	  <fileset dir="${svr4.layout.pkg.dir}/tmpl_instance/config/schema"/>
 	</move>
         <mkdir dir="${svr4.layout.pkg.dir}/tmpl_instance/config/schema"/>
-        <chmod dir="${svr4.layout.pkg.dir}/tmpl_instance/config/schema" perm="755"/>
+        <chmod dir="${svr4.layout.pkg.dir}/tmpl_instance/config/schema"
+            perm="755"/>
 	<move todir="${svr4.layout.pkg.dir}/tmpl_instance/db">
 	  <fileset dir="${svr4.layout.pkg.dir}/db"/>
 	</move>
@@ -154,7 +175,8 @@
 	  <fileset dir="${svr4.layout.pkg.dir}/logs"/>
 	</move>
         <!-- Create buildinfo file -->
-	<echo message="${pkg.version}.${REVISION_NUMBER}" file="${svr4.layout.pkg.dir}/tmpl_instance/config/buildinfo" />
+	<echo message="${pkg.version}.${REVISION_NUMBER}"
+        file="${svr4.layout.pkg.dir}/tmpl_instance/config/buildinfo" />
   </target>
 
 </project>
diff --git a/opends/src/svr4/OpenDS/opends-manifest.xml b/opends/src/svr4/OpenDS/opends-manifest.xml
new file mode 100644
index 0000000..a117b81
--- /dev/null
+++ b/opends/src/svr4/OpenDS/opends-manifest.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
+<!--
+
+ CDDL HEADER START
+
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License, Version 1.0 only
+ (the "License").  You may not use this file except in compliance
+ with the License.
+
+ You can obtain a copy of the license at
+ trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ See the License for the specific language governing permissions
+ and limitations under the License.
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the License file at
+ trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ add the following below this CDDL HEADER, with the fields enclosed
+ by brackets "[]" replaced with your own identifying information:
+      Portions Copyright [yyyy] [name of copyright owner]
+
+ CDDL HEADER END
+
+
+      Copyright 2008 Sun Microsystems, Inc.
+-->
+<service_bundle type='manifest' name='opends'>
+    <service name='network/ldap/server' type='service' version='1'>
+        <!--
+            Because we may have multiple instances of network/ldap/server
+            provided by different implementations, we keep dependencies
+            and methods within the instance.
+        -->
+        <instance name='opends' enabled='false'>
+      	<!--  
+     	Wait for network interfaces to be initialized. 
+     	-->
+            <dependency
+       	   name='network' 
+       	   grouping='require_all' 
+       	   restart_on='error' 
+       	   type='service'>
+                <service_fmri value='svc:/milestone/network:default' />
+            </dependency>
+     	<!-- 
+       	   Wait for all local filesystems to be mounted. 
+     	-->
+            <dependency
+       	   name='filesystem-local' 
+       	   grouping='require_all' 
+       	   restart_on='none' 
+       	   type='service'>
+                <service_fmri value='svc:/system/filesystem/local:default' />
+            </dependency>
+            <exec_method
+            type='method'
+            name='start'
+            exec='/usr/opends/lib/_svc-opends.sh start'
+            timeout_seconds='60'>
+                <method_context>
+                    <method_credential
+                   user='ldap' group='ldap'
+privileges='basic,net_privaddr,sys_resource,!proc_info,!file_link_any'
+limit_privileges='basic,net_privaddr,sys_resource,!proc_info,!file_link_any'
+               />
+                </method_context>
+            </exec_method>
+            <exec_method
+            type='method'
+            name='stop'
+            exec='/usr/opends/lib/_svc-opends.sh stop'
+            timeout_seconds='60'>
+                <method_context>
+                    <method_credential user='ldap' group='ldap' />
+                </method_context>
+            </exec_method>
+            <property_group name='startd' type='framework'>
+            <!-- core dumps shouldn't restart session -->
+                <propval name='ignore_error' type='astring'
+                value='core,signal' />
+            </property_group>
+            <template>
+                <common_name>
+                    <loctext xml:lang='C'>
+                        OpenDS LDAP directory server
+                    </loctext>
+                </common_name>
+                <documentation>
+                    <doc_link name='OpenDS Documentation Wiki'
+	                          uri='https://www.opends.org/wiki/' />
+                </documentation>
+            </template>
+        </instance>
+        <stability value='Evolving' />
+    </service>
+</service_bundle>

--
Gitblit v1.10.0