From aedaf5652dd9b728942b9f30836458fe80a423c1 Mon Sep 17 00:00:00 2001
From: Violette Roche-Montane <violette.roche-montane@forgerock.com>
Date: Thu, 22 Aug 2013 09:38:01 +0000
Subject: [PATCH] OPENDJ-1114 Improve the debian package  - Original data are copied under build/deb/ folder as the process to build the deb package implies to modify the source.  - Opendj init script has been modified. Indeed, under debian OS (and others) the /var/run/ folder is deleted at reboot, deleting by the same way our pid  file, making the service wobbly.  - As linux distro use the same opendj file, a new folder was created under resource to store the shared file between them.  - At last, modified post/prem/specFile as well as the fact to create a symlink on an existing one throws an error. (same when you try to remove one from no-existing)

---
 opends/build.xml                        |   36 ++++----
 opends/resource/debian/control/prerm    |    6 +
 opends/resource/sysv/opendj             |  171 ++++++++++++++++++++++++++++++++++++++++++
 opends/resource/rpm/specFile            |    9 +
 opends/resource/debian/control/postinst |    4 +
 5 files changed, 206 insertions(+), 20 deletions(-)

diff --git a/opends/build.xml b/opends/build.xml
index 1c2b6ba..6f7f666 100644
--- a/opends/build.xml
+++ b/opends/build.xml
@@ -1462,7 +1462,7 @@
     <copy file="resource/rpm/excludedFiles" tofile="${build.dir}/rpm/SOURCES/excludedFiles" />
     <replace file="${build.dir}/rpm/SOURCES/excludedFiles" token="# [[ excludedListFiles ]]" value="${excludedRPMFiles}" />
   	
-    <copy file="resource/rpm/opendj" tofile="${build.dir}/rpm/SOURCES/opendj" />
+    <copy file="resource/sysv/opendj" tofile="${build.dir}/rpm/SOURCES/opendj" />
   
     <rpm specfile="specFile"
          topdir="${build.dir}/rpm"
@@ -1492,9 +1492,10 @@
 
     <getversionnumber property="VERSION_NUMBER_STRING" />
 
-    <property name="prefix"      value="/opt/opendj"/>
-    <property name="release"     value="1"/>
-    <property name="docprefix"   value="/usr/share/doc/opendj"/>
+    <property name="prefix"          value="/opt/opendj"/>
+    <property name="release"         value="1"/>
+    <property name="docprefix"       value="/usr/share/doc/opendj"/>
+    <property name="build.deb.dir"   value="${build.dir}/deb/${SHORT_NAME}-${VERSION_NUMBER_STRING}"/>
 
     <mkdir dir="${build.dir}/deb/control" />
 
@@ -1510,33 +1511,34 @@
         <filter token="description" value="${PRODUCT_NAME}"/>
       </filterset>
     </copy>
-
-    <!--        Debian files for preinst/postinstall/preuninstall/postuninstall -->
   	
-    <copy todir="${build.dir}/deb/control">
-        <fileset dir="resource/debian/control"/>
+    <copy todir="${build.deb.dir}">
+        <fileset dir="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}"/>
     </copy>
-    <copy file="resource/debian/copyright" tofile="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}/copyright" />
+    <copy file="resource/debian/copyright" tofile="${build.deb.dir}/copyright" />
+    <copy file="resource/sysv/opendj" tofile="${build.deb.dir}/opendj" />
 
     <replace dir="${build.dir}/deb/control/" token="@prefix@" value="${prefix}" />
 
     <deb destfile="${package.dir}/${PKG_NAME}_${pkg_version_string}-${release}${pkg_version_qualifier}_all.deb"
                   control="${build.dir}/deb/control" verbose="false">
-      <tarfileset dir="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}"
+      <tarfileset dir="${build.deb.dir}"
                   includes="**/*"
-                  excludes="**/bat/**, **/*.app/**, **/*.bat*, **/*.exe*, bin/*, template/**/*, lib/*.sh, setup, uninstall, upgrade, legal-notices/**, copyright"
+                  excludes="**/bat/**, **/*.app/**, **/*.bat*, **/*.exe*, bin/*, template/**/*, lib/*.sh, setup, uninstall, upgrade, legal-notices/**, copyright, README, bin/README_WINDOWS.txt, example-plugin.zip, opendj"
                   prefix="${prefix}" filemode="644" dirmode="755" />
-      <tarfileset dir="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}" includes="lib/*.sh"
+      <tarfileset dir="${build.deb.dir}" includes="lib/*.sh"
                   prefix="${prefix}" filemode="755" dirmode="755" />
-      <tarfileset dir="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}" includes="bin/*"
+      <tarfileset dir="${build.deb.dir}" includes="bin/*"
                   excludes="bin/README_WINDOWS.txt, **/bin/ControlPanel.app/"
                   prefix="${prefix}" filemode="755" dirmode="755" />
-      <tarfileset dir="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}" includes="setup,uninstall,upgrade"
+      <tarfileset dir="${build.deb.dir}" includes="setup,uninstall,upgrade"
                   prefix="${prefix}" filemode="755" dirmode="755" />
-      <tarfileset dir="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}" includes="template/**/*"
+      <tarfileset dir="${build.deb.dir}" includes="template/**/*"
                   prefix="${prefix}" filemode="444" dirmode="744" />      
-      <tarfileset dir="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}" includes="legal-notices/**, copyright"
-                  prefix="${docprefix}" filemode="755" dirmode="744" />    	
+      <tarfileset dir="${build.deb.dir}" includes="legal-notices/**, copyright, README, example-plugin.zip"
+                  prefix="${docprefix}" filemode="644" dirmode="755" />
+      <tarfileset dir="${build.deb.dir}" includes="opendj"
+    	          prefix="/etc/init.d" filemode="755" dirmode="755" />    	
     </deb>
   </target>
 
diff --git a/opends/resource/debian/control/postinst b/opends/resource/debian/control/postinst
index 9477b50..9bf9a36 100644
--- a/opends/resource/debian/control/postinst
+++ b/opends/resource/debian/control/postinst
@@ -4,6 +4,10 @@
 # Install is launched with an empty second arg.
 # If the package is already installed, 
 #  the second arg. is not empty.
+# Registers the service
+update-rc.d opendj defaults
+# Symlinks to process ID
+test -h "/var/run/opendj.pid" || ln -s /opt/opendj/logs/server.pid /var/run/opendj.pid 
 # In this case, we are in upgrade mode.
 if [ "$1" = "configure" ] && [ ! -z "$2" ]
 then
diff --git a/opends/resource/debian/control/prerm b/opends/resource/debian/control/prerm
index b3c16eb..7758969 100644
--- a/opends/resource/debian/control/prerm
+++ b/opends/resource/debian/control/prerm
@@ -1,6 +1,12 @@
 #!/bin/bash
 set -e
 # Pre rm script
+# Stops the service. 
+/etc/init.d/opendj stop >/dev/null 2>&1
+# Deletes the service.   
+update-rc.d -f opendj remove
+# Unlink the symlink to the process ID if it exists.
+test -h "/var/run/opendj.pid" && unlink /var/run/opendj.pid
 # Stops the server
 # Only if the instance has been configured
 if [ "$1" = "remove" ] && ( [ -f @prefix@/config/buildinfo ] && [ "$(ls -A @prefix@/config/archived-configs)" ] )
diff --git a/opends/resource/rpm/specFile b/opends/resource/rpm/specFile
index 8702a13..cd56725 100644
--- a/opends/resource/rpm/specFile
+++ b/opends/resource/rpm/specFile
@@ -129,8 +129,8 @@
 %post
 # Registers the service
 /sbin/chkconfig --add opendj
-# Symlink to process ID
-ln -s /opt/opendj/logs/server.pid /var/run/opendj.pid 
+# Symlinks to process ID
+test -h "/var/run/opendj.pid" || ln -s /opt/opendj/logs/server.pid /var/run/opendj.pid 
 if [ "$1" == "1" ] ; then
     echo "Post Install - initial install"
 else if [ "$1" == "2" ] ; then
@@ -177,7 +177,7 @@
     /etc/init.d/opendj stop >/dev/null 2>&1
     /sbin/chkconfig --del opendj
     # Unlink the symlink to the process ID.
-    unlink /var/run/opendj.pid 
+    test -h "/var/run/opendj.pid" && unlink /var/run/opendj.pid 
 # Only if the instance has been configured    
     if [ -e "%{_prefix}"/config/buildinfo ] && [ "$(ls -A "%{_prefix}"/config/archived-configs)" ]
     then
@@ -221,3 +221,6 @@
 - Added '%doc' section.
 - Added '%changelog' at the end of the file.
 - Added license to header's files.
+
+* Thu Aug 22 2013 ForgeRock
+- Modified init.d script.
diff --git a/opends/resource/sysv/opendj b/opends/resource/sysv/opendj
new file mode 100755
index 0000000..72e4dc9
--- /dev/null
+++ b/opends/resource/sysv/opendj
@@ -0,0 +1,171 @@
+#! /bin/sh
+#
+# OPENDJ SERVICE SCRIPT
+#
+
+#
+# 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/opendj3/legal-notices/CDDLv1_0.txt
+# or http://forgerock.org/license/CDDLv1.0.html.
+# 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/opendj3/legal-notices/CDDLv1_0.txt.  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 2013 ForgeRock AS
+#
+
+
+# chkconfig: 2345 80 05
+# description: Starts and stops opendj LDAPv3 service.
+#
+### BEGIN INIT INFO
+# Provides:          opendj
+# Required-Start:    
+# Required-Stop:     
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: This is the opendj daemon
+# Description:       OpenDJ is an LDAPv3 compliant directory service, developed for the Java
+#                    platform, providing a high performance, highly available and secure store
+#                    for the identities managed by enterprises. Its easy installation process,
+#                    combined with the power of the Java platform makes OpenDJ one of the
+#                    simplest and fastest directory servers to deploy and manage.
+### END INIT INFO
+
+# Set up source function library depending on the distribution
+if [ -f /etc/redhat-release ]
+then
+    # Redhat
+    . /etc/init.d/functions
+elif [ -f /etc/SuSE-release ]
+then
+    # SuSE
+    . /etc/rc.status
+elif [ -f /etc/lsb-release ]
+then
+    # Debian
+    . /lib/lsb/init-functions
+else
+    # Other dist.
+    if [ -f /etc/init.d/functions.sh ]
+    then
+        . /etc/init.d/functions.sh
+    fi
+fi
+
+
+# Sets the script vars
+INSTALL_ROOT="/opt/opendj/"
+export INSTALL_ROOT
+DAEMON=opendj
+# Original PID file
+ORIGINPIDFILE=/opt/opendj/logs/server.pid
+# Pid file is a symlink to /opt/opendj/log/server.pid
+PIDFILE=/var/run/opendj.pid
+RETVAL=0
+
+# If the daemon is not there, then exit / LSB return code.
+test -x "$INSTALL_ROOT/bin/start-ds" || exit 5
+
+# /var/run is deleted after reboot (eg. debian)
+# recreates the symlink if needed.
+test -h "$PIDFILE" || ln -s $ORIGINPIDFILE $PIDFILE
+
+#Starts the server and creates pid file.
+start() {
+    echo -n $"Starting $DAEMON: "
+    # Server is running
+    if [ -e $PIDFILE ]
+    then    
+        echo "> Already running."
+        return 0
+    else 
+        "$INSTALL_ROOT"/bin/start-ds --quiet
+        RETVAL=$?
+        if [ $RETVAL = 0 ]
+        then
+            echo "> SUCCESS."
+        else
+            echo "> FAILURE."
+        fi
+        echo ""
+        return $RETVAL
+    fi
+}
+
+#Stops the server and removes pid file.
+stop() {
+    echo -n $"Stopping $DAEMON: "
+    # Server is running
+    if [ -e $PIDFILE ]
+    then
+        "$INSTALL_ROOT"/bin/stop-ds --quiet
+        RETVAL=$?
+        if [ $RETVAL = 0 ]
+        then
+            echo "> SUCCESS."
+        else
+            echo "> FAILURE."
+        fi
+        echo ""
+        return $RETVAL
+    else         
+        echo "> Already stopped."
+        echo ""
+        return 3
+    fi    
+}
+
+# Displays the service status
+status() {
+    echo -n $"$DAEMON status: "
+    if [ -e $PIDFILE ]
+    then
+        echo "> Running."
+        return 0
+    else             
+        echo "> Stopped."
+        return 3
+    fi
+}
+
+case "$1" in
+    start)
+        start
+    ;;
+    stop)
+        stop
+    ;;
+    restart)
+        stop
+        sleep 5
+        start
+    ;;
+    force-reload)
+        # Not implemented.
+    ;;
+    status)
+        status
+    ;;
+    *)
+        echo $"Usage: /etc/init.d/$DAEMON {start|restart|stop|force-reload|status}"
+        exit 1
+    ;;
+esac
+
+exit $RETVAL

--
Gitblit v1.10.0