You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2008/06/20 17:33:38 UTC

svn commit: r669933 - in /directory/daemon/trunk/plugin/src/main: java/org/apache/directory/daemon/installers/ java/org/apache/directory/daemon/installers/macosxpkg/ java/org/apache/directory/daemon/installers/pkg/ java/org/apache/directory/daemon/inst...

Author: pamarcelot
Date: Fri Jun 20 08:33:38 2008
New Revision: 669933

URL: http://svn.apache.org/viewvc?rev=669933&view=rev
Log:
Added a target for Solaris PKG installers, Refactored the Mac OS X PKG installer package name.

Added:
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/
      - copied from r669425, directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgInstallerCommand.java
      - copied, changed from r669425, directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/PkgInstallerCommand.java
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgTarget.java
      - copied, changed from r669425, directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/PkgTarget.java
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgInstallerCommand.java
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgTarget.java
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/macosxpkg/
      - copied from r669425, directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/pkg/
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-default.conf
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-init
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds.conf
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/pkginfo
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/postinstall
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/preremove
Removed:
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/PkgInstallerCommand.java
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/PkgTarget.java
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/
    directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/pkg/
Modified:
    directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/ServiceInstallersMojo.java

Modified: directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/ServiceInstallersMojo.java
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/ServiceInstallersMojo.java?rev=669933&r1=669932&r2=669933&view=diff
==============================================================================
--- directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/ServiceInstallersMojo.java (original)
+++ directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/ServiceInstallersMojo.java Fri Jun 20 08:33:38 2008
@@ -36,12 +36,14 @@
 import org.apache.directory.daemon.installers.inno.InnoTarget;
 import org.apache.directory.daemon.installers.izpack.IzPackInstallerCommand;
 import org.apache.directory.daemon.installers.izpack.IzPackTarget;
+import org.apache.directory.daemon.installers.macosxpkg.MacOsXPkgInstallerCommand;
+import org.apache.directory.daemon.installers.macosxpkg.MacOsXPkgTarget;
 import org.apache.directory.daemon.installers.nsis.NsisInstallerCommand;
 import org.apache.directory.daemon.installers.nsis.NsisTarget;
-import org.apache.directory.daemon.installers.pkg.PkgInstallerCommand;
-import org.apache.directory.daemon.installers.pkg.PkgTarget;
 import org.apache.directory.daemon.installers.rpm.RpmInstallerCommand;
 import org.apache.directory.daemon.installers.rpm.RpmTarget;
+import org.apache.directory.daemon.installers.solarispkg.SolarisPkgInstallerCommand;
+import org.apache.directory.daemon.installers.solarispkg.SolarisPkgTarget;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Developer;
 import org.apache.maven.model.MailingList;
@@ -107,7 +109,12 @@
     /**
      * @parameter
      */
-    private PkgTarget[] pkgTargets;
+    private MacOsXPkgTarget[] macOsXPkgTargets;
+
+    /**
+     * @parameter
+     */
+    private SolarisPkgTarget[] solarisPkgTargets;
 
     /**
      * @parameter
@@ -123,7 +130,7 @@
      * @parameter
      */
     private DebTarget[] debTargets;
-    
+
     /**
      * @parameter
      */
@@ -260,21 +267,28 @@
                 rpmCmd = new RpmInstallerCommand( this, ( RpmTarget ) target );
                 rpmCmd.execute();
             }
-            
-            if ( target instanceof PkgTarget )
+
+            if ( target instanceof MacOsXPkgTarget )
+            {
+                MacOsXPkgInstallerCommand pkgCmd = null;
+                pkgCmd = new MacOsXPkgInstallerCommand( this, ( MacOsXPkgTarget ) target );
+                pkgCmd.execute();
+            }
+
+            if ( target instanceof SolarisPkgTarget )
             {
-                PkgInstallerCommand pkgCmd = null;
-                pkgCmd = new PkgInstallerCommand( this, ( PkgTarget ) target );
+                SolarisPkgInstallerCommand pkgCmd = null;
+                pkgCmd = new SolarisPkgInstallerCommand( this, ( SolarisPkgTarget ) target );
                 pkgCmd.execute();
             }
-            
+
             if ( target instanceof DebTarget )
             {
                 DebInstallerCommand debCmd = null;
                 debCmd = new DebInstallerCommand( this, ( DebTarget ) target );
                 debCmd.execute();
             }
-            
+
             if ( target instanceof BinTarget )
             {
                 BinInstallerCommand binCmd = null;
@@ -293,7 +307,8 @@
         addAll( allTargets, nsisTargets );
         addAll( allTargets, rpmTargets );
         addAll( allTargets, debTargets );
-        addAll( allTargets, pkgTargets );
+        addAll( allTargets, macOsXPkgTargets );
+        addAll( allTargets, solarisPkgTargets );
         addAll( allTargets, binTargets );
     }
 

Copied: directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgInstallerCommand.java (from r669425, directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/PkgInstallerCommand.java)
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgInstallerCommand.java?p2=directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgInstallerCommand.java&p1=directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/PkgInstallerCommand.java&r1=669425&r2=669933&rev=669933&view=diff
==============================================================================
--- directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/PkgInstallerCommand.java (original)
+++ directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgInstallerCommand.java Fri Jun 20 08:33:38 2008
@@ -17,7 +17,7 @@
  *  under the License. 
  *  
  */
-package org.apache.directory.daemon.installers.pkg;
+package org.apache.directory.daemon.installers.macosxpkg;
 
 
 import java.io.File;
@@ -39,11 +39,11 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev: 434414 $
  */
-public class PkgInstallerCommand extends MojoCommand
+public class MacOsXPkgInstallerCommand extends MojoCommand
 {
     private final Properties filterProperties = new Properties( System.getProperties() );
     /** The PKG target */
-    private final PkgTarget target;
+    private final MacOsXPkgTarget target;
     /** The Maven logger */
     private final Log log;
     /** The PackageMaker utility executable */
@@ -53,14 +53,14 @@
 
 
     /**
-     * Creates a new instance of PkgInstallerCommand.
+     * Creates a new instance of MacOsXPkgInstallerCommand.
      *
      * @param mymojo
      *      the Server Installers Mojo
      * @param target
      *      the PKG target
      */
-    public PkgInstallerCommand( ServiceInstallersMojo mymojo, PkgTarget target )
+    public MacOsXPkgInstallerCommand( ServiceInstallersMojo mymojo, MacOsXPkgTarget target )
     {
         super( mymojo );
         this.target = target;
@@ -82,7 +82,7 @@
         // Verifying the target is macosx
         if ( !target.getOsFamily().equals( "macosx" ) )
         {
-            log.warn( "PKG installer can only be targeted for Mac OS X platforms!" );
+            log.warn( "Mac OS X PKG installer can only be targeted for Mac OS X platform!" );
             log.warn( "The build will continue, but please check the the platform of this installer " );
             log.warn( "target" );
             return;

Copied: directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgTarget.java (from r669425, directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/PkgTarget.java)
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgTarget.java?p2=directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgTarget.java&p1=directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/PkgTarget.java&r1=669425&r2=669933&rev=669933&view=diff
==============================================================================
--- directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/pkg/PkgTarget.java (original)
+++ directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/macosxpkg/MacOsXPkgTarget.java Fri Jun 20 08:33:38 2008
@@ -17,7 +17,7 @@
  *  under the License. 
  *  
  */
-package org.apache.directory.daemon.installers.pkg;
+package org.apache.directory.daemon.installers.macosxpkg;
 
 
 import java.io.File;
@@ -38,7 +38,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$, $Date$
  */
-public class PkgTarget extends Target
+public class MacOsXPkgTarget extends Target
 {
     /** The wrapper executable path */
     private String wrapperExecutablePath = "src/main/installers/wrapper/bin/wrapper-windows-x86-32.exe";

Added: directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgInstallerCommand.java
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgInstallerCommand.java?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgInstallerCommand.java (added)
+++ directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgInstallerCommand.java Fri Jun 20 08:33:38 2008
@@ -0,0 +1,263 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.daemon.installers.solarispkg;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Properties;
+
+import org.apache.directory.daemon.installers.MojoCommand;
+import org.apache.directory.daemon.installers.MojoHelperUtils;
+import org.apache.directory.daemon.installers.ServiceInstallersMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.tools.ant.taskdefs.Execute;
+
+
+/**
+ * PKG Installer command for creating Solaris packages.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev: 434414 $
+ */
+public class SolarisPkgInstallerCommand extends MojoCommand
+{
+    private final Properties filterProperties = new Properties( System.getProperties() );
+    /** The PKG target */
+    private final SolarisPkgTarget target;
+    /** The Maven logger */
+    private final Log log;
+
+    private File pkgMaker;
+    private File pkgTranslator;
+
+
+    /**
+     * Creates a new instance of SolarisPkgInstallerCommand.
+     *
+     * @param mymojo
+     *      the Server Installers Mojo
+     * @param target
+     *      the PKG target
+     */
+    public SolarisPkgInstallerCommand( ServiceInstallersMojo mymojo, SolarisPkgTarget target )
+    {
+        super( mymojo );
+        this.target = target;
+        this.log = mymojo.getLog();
+        initializeFiltering();
+    }
+
+
+    /**
+     * Performs the following:
+     * <ol>
+     *   <li>Bail if target is not for solaris or the pkgmk or pkgtrans utilities coud not be found.</li>
+     *   <li>Creates the Solaris PKG Installer for Apache DS</li>
+     * </ol>
+     */
+    public void execute() throws MojoExecutionException, MojoFailureException
+    {
+        // Verifying the target is macosx
+        if ( !target.getOsFamily().equals( "solaris" ) )
+        {
+            log.warn( "Solaris PKG installer can only be targeted for Solaris platform!" );
+            log.warn( "The build will continue, but please check the the platform of this installer " );
+            log.warn( "target" );
+            return;
+        }
+
+        // Verifying the 'pkgmk' utility exists
+        if ( !target.getPkgMaker().exists() )
+        {
+            log.warn( "Cannot find 'pkgmk' utility at this location: " + target.getPkgMaker() );
+            log.warn( "The build will continue, but please check the location of your Package Maker " );
+            log.warn( "utility." );
+            return;
+        }
+        else
+        {
+            pkgMaker = target.getPkgMaker();
+        }
+
+        // Verifying the 'pkgtrans' utility exists
+        if ( !target.getPkgTranslator().exists() )
+        {
+            log.warn( "Cannot find 'pkgtrans' utility at this location: " + target.getPkgTranslator() );
+            log.warn( "The build will continue, but please check the location of your Package Maker " );
+            log.warn( "utility." );
+            return;
+        }
+        else
+        {
+            pkgTranslator = target.getPkgTranslator();
+        }
+
+        File baseDirectory = target.getLayout().getBaseDirectory();
+        File imagesDirectory = baseDirectory.getParentFile();
+
+        log.info( "Creating Solaris PKG Installer..." );
+
+        // Creating the package directory
+        File pkgDirectory = new File( imagesDirectory, target.getId() + "-pkg" );
+        pkgDirectory.mkdirs();
+
+        log.info( "Copying Solaris PKG installer files" );
+
+        // Creating the root directories hierarchy
+        File pkgRootDirectory = new File( pkgDirectory, "root" );
+        pkgRootDirectory.mkdirs();
+
+        // Copying the apacheds files in the '/opt/apacheds-$VERSION/' directory
+        File apacheDsHomeDirectory = new File( pkgRootDirectory, "opt/apacheds-" + target.getApplication().getVersion() );
+        try
+        {
+            // Copying the generated layout
+            MojoHelperUtils.copyFiles( baseDirectory, apacheDsHomeDirectory );
+
+            // Replacing the apacheds.conf file
+            MojoHelperUtils.copyAsciiFile( mymojo, filterProperties, getClass().getResourceAsStream( "apacheds.conf" ),
+                new File( apacheDsHomeDirectory, "conf/apacheds.conf" ), false );
+        }
+        catch ( IOException e )
+        {
+            log.error( e.getMessage() );
+            throw new MojoFailureException( "Failed to copy image (" + target.getLayout().getBaseDirectory()
+                + ") to the PKG directory (" + apacheDsHomeDirectory + ")" );
+        }
+
+        // Copying the instances in the '/var/lib/apacheds-$VERSION/default' directory
+        File debDefaultInstanceDirectory = new File( pkgRootDirectory, "var/lib/apacheds-"
+            + target.getApplication().getVersion() + "/default" );
+        debDefaultInstanceDirectory.mkdirs();
+        File debDefaultInstanceConfDirectory = new File( debDefaultInstanceDirectory, "conf" );
+        debDefaultInstanceConfDirectory.mkdirs();
+        new File( debDefaultInstanceDirectory, "ldif" ).mkdirs();
+        new File( debDefaultInstanceDirectory, "log" ).mkdirs();
+        new File( debDefaultInstanceDirectory, "partitions" ).mkdirs();
+        new File( debDefaultInstanceDirectory, "run" ).mkdirs();
+        File debEtcInitdDirectory = new File( pkgRootDirectory, "etc/init.d" );
+        debEtcInitdDirectory.mkdirs();
+        new File( pkgRootDirectory, "/var/run/apacheds-" + target.getApplication().getVersion() ).mkdirs();
+        try
+        {
+            // Copying the apacheds.conf file in the default instance conf directory
+            MojoHelperUtils.copyAsciiFile( mymojo, filterProperties, getClass().getResourceAsStream(
+                "apacheds-default.conf" ), new File( debDefaultInstanceConfDirectory, "apacheds.conf" ), false );
+
+            // Copying the log4j.properties file in the default instance conf directory
+            MojoHelperUtils.copyAsciiFile( mymojo, filterProperties, new File( apacheDsHomeDirectory,
+                "conf/log4j.properties" ), new File( debDefaultInstanceConfDirectory, "log4j.properties" ), false );
+
+            // Copying the server.xml file in the default instance conf directory
+            MojoHelperUtils.copyAsciiFile( mymojo, filterProperties,
+                new File( apacheDsHomeDirectory, "conf/server.xml" ), new File( debDefaultInstanceConfDirectory,
+                    "server.xml" ), false );
+
+            // Copying the init script in /etc/init.d/
+            MojoHelperUtils
+                .copyAsciiFile( mymojo, filterProperties, getClass().getResourceAsStream( "apacheds-init" ), new File(
+                    debEtcInitdDirectory, "apacheds-" + target.getApplication().getVersion() + "-default" ), true );
+        }
+        catch ( IOException e )
+        {
+            log.error( e.getMessage() );
+            throw new MojoFailureException( "Failed to copy resources files to the PKG directory ("
+                + debDefaultInstanceDirectory + ")" );
+        }
+
+        // Copying the 'pkg' files 
+        try
+        {
+            MojoHelperUtils.copyAsciiFile( mymojo, filterProperties, getClass().getResourceAsStream( "apacheds" ),
+                new File( pkgDirectory, "apacheds" ), true );
+            
+            MojoHelperUtils.copyAsciiFile( mymojo, filterProperties, getClass().getResourceAsStream( "apacheds" ),
+                new File( pkgDirectory, "apacheds" ), true );
+
+            MojoHelperUtils.copyAsciiFile( mymojo, filterProperties, getClass().getResourceAsStream( "postinstall" ),
+                new File( pkgDirectory, "postinstall" ), true );
+
+            MojoHelperUtils.copyAsciiFile( mymojo, filterProperties, getClass().getResourceAsStream( "prermove" ),
+                new File( pkgDirectory, "prermove" ), true );
+        }
+        catch ( IOException e )
+        {
+            log.error( e.getMessage() );
+            throw new MojoFailureException( "Failed to copy DEB 'control' file." );
+        }
+
+        // Generating the DMG
+        log.info( "Generating Solaris PKG Installer" );
+        String finalName = target.getFinalName();
+        if ( !finalName.endsWith( ".pkg" ) )
+        {
+            finalName = finalName + ".pkg";
+        }
+        try
+        {
+            // Generating the PKG
+            Execute executeTask = new Execute();
+            executeTask.setCommandline( new String[]
+                { pkgMaker.getAbsolutePath(), "-o", "-r", "root", "-d", "target", "apacheds" } );
+            executeTask.setSpawn( true );
+            executeTask.setWorkingDirectory( pkgDirectory );
+            executeTask.execute();
+
+            // Packaging it as a single file
+            executeTask.setCommandline( new String[]
+                { pkgTranslator.getAbsolutePath(), "-s", "target", "../" + finalName, "apacheds" } );
+            executeTask.execute();
+        }
+        catch ( IOException e )
+        {
+            log.error( e.getMessage() );
+            throw new MojoFailureException( "Failed while trying to generate the DMG: " + e.getMessage() );
+        }
+
+        log.info( "Solaris PKG generated at " + new File( imagesDirectory, finalName ) );
+    }
+
+
+    private void initializeFiltering()
+    {
+        filterProperties.putAll( mymojo.getProject().getProperties() );
+        filterProperties.put( "app.name", target.getApplication().getName() );
+        if ( target.getApplication().getVersion() != null )
+        {
+            filterProperties.put( "app.version", target.getApplication().getVersion() );
+        }
+        else
+        {
+            filterProperties.put( "app.version", "1.0" );
+        }
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.apache.directory.daemon.installers.MojoCommand#getFilterProperties()
+     */
+    public Properties getFilterProperties()
+    {
+        return filterProperties;
+    }
+}

Added: directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgTarget.java
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgTarget.java?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgTarget.java (added)
+++ directory/daemon/trunk/plugin/src/main/java/org/apache/directory/daemon/installers/solarispkg/SolarisPkgTarget.java Fri Jun 20 08:33:38 2008
@@ -0,0 +1,89 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.daemon.installers.solarispkg;
+
+
+import java.io.File;
+
+import org.apache.directory.daemon.installers.Target;
+
+
+/**
+ * A PKG installer for the Solaris platform.
+ * 
+ * To create a PKG installer we use the pkgmk and pkgtrans utilities that are 
+ * bundled in the Solaris OS.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class SolarisPkgTarget extends Target
+{
+    private File pkgMaker = new File( "/usr/bin/pkgmk" );
+    private File pkgTranslator = new File( "/usr/bin/pkgtrans" );
+
+
+    /**
+     * Gets the 'pkgmk' utility.
+     *
+     * @return
+     *      the 'pkgmk' utility.
+     */
+    public File getPkgMaker()
+    {
+        return pkgMaker;
+    }
+
+
+    /**
+     * Sets the 'pkgmk' utility.
+     *
+     * @param pkgMaker
+     *      the 'pkgmk' utility.
+     */
+    public void setPkgMaker( File pkgMaker )
+    {
+        this.pkgMaker = pkgMaker;
+    }
+
+
+    /**
+     * Gets the 'pkgtrans' utility.
+     *
+     * @return
+     *      the 'pkgtrans' utility.
+     */
+    public File getPkgTranslator()
+    {
+        return pkgTranslator;
+    }
+
+
+    /**
+     * Sets the 'pkgtrans' utility.
+     *
+     * @param pkgTranslator
+     *      the 'pkgtrans' utility.
+     */
+    public void setPkgTranslator( File pkgTranslator )
+    {
+        this.pkgTranslator = pkgTranslator;
+    }
+}
\ No newline at end of file

Added: directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds (added)
+++ directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds Fri Jun 20 08:33:38 2008
@@ -0,0 +1,80 @@
+i pkginfo
+d none /opt/apacheds-${version} 0755 root root
+d /opt/apacheds-${version}/bin
+f /opt/apacheds-${version}/bin/apacheds-tools.jar
+f /opt/apacheds-${version}/bin/apacheds
+d /opt/apacheds-${version}/conf
+f /opt/apacheds-${version}/conf/server.xml
+f /opt/apacheds-${version}/conf/apacheds.conf
+f /opt/apacheds-${version}/conf/log4j.properties
+f /opt/apacheds-${version}/feather.ico
+d /opt/apacheds-${version}/lib
+f /opt/apacheds-${version}/lib/xbean-spring-3.3.jar
+f /opt/apacheds-${version}/lib/antlr-2.7.7.jar
+f /opt/apacheds-${version}/lib/apacheds-bootstrap-extract-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-bootstrap-partition-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-btree-base-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-core-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-core-constants-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-core-entry-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-core-shared-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-jdbm-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-jdbm-store-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-kerberos-shared-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-noarch-installer-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-protocol-changepw-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-protocol-dhcp-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-protocol-dns-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-protocol-kerberos-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-protocol-ldap-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-protocol-ntp-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-protocol-shared-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-schema-bootstrap-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-schema-extras-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-schema-registries-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-server-jndi-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-server-xml-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-utils-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/apacheds-xbean-spring-1.5.3-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/bootstrapper.jar
+f /opt/apacheds-${version}/lib/commons-cli-1.1.jar
+f /opt/apacheds-${version}/lib/commons-collections-3.2.jar
+f /opt/apacheds-${version}/lib/commons-daemon-1.0.1.jar
+f /opt/apacheds-${version}/lib/commons-lang-2.3.jar
+d /opt/apacheds-${version}/lib/ext
+f /opt/apacheds-${version}/lib/jcl104-over-slf4j-1.4.3.jar
+f /opt/apacheds-${version}/lib/libwrapper.so
+f /opt/apacheds-${version}/lib/log4j-1.2.14.jar
+f /opt/apacheds-${version}/lib/mina-core-1.1.6.jar
+f /opt/apacheds-${version}/lib/mina-filter-ssl-1.1.6.jar
+f /opt/apacheds-${version}/lib/shared-asn1-0.9.11-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/shared-asn1-codec-0.9.11-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/shared-bouncycastle-reduced-0.9.11-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/shared-ldap-0.9.11-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/shared-ldap-constants-0.9.11-SNAPSHOT.jar
+f /opt/apacheds-${version}/lib/slf4j-api-1.4.3.jar
+f /opt/apacheds-${version}/lib/slf4j-log4j12-1.4.3.jar
+f /opt/apacheds-${version}/lib/spring-beans-2.0.6.jar
+f /opt/apacheds-${version}/lib/spring-context-2.0.6.jar
+f /opt/apacheds-${version}/lib/spring-core-2.0.6.jar
+f /opt/apacheds-${version}/lib/wrapper.jar
+f /opt/apacheds-${version}/LICENSE
+f /opt/apacheds-${version}/NOTICE
+f /opt/apacheds-${version}/README
+d /opt/apacheds-${version}/var
+d /opt/apacheds-${version}/var/log
+d /opt/apacheds-${version}/var/partitions
+d /opt/apacheds-${version}/var/run
+
+d /var/lib/apacheds-${version}
+d /var/lib/apacheds-${version}/default
+d /var/lib/apacheds-${version}/default/conf
+f /var/lib/apacheds-${version}/default/conf/apacheds.conf
+f /var/lib/apacheds-${version}/default/conf/log4j.properties
+f /var/lib/apacheds-${version}/default/conf/server.xml
+d /var/lib/apacheds-${version}/default/ldif
+d /var/lib/apacheds-${version}/default/log
+d /var/lib/apacheds-${version}/default/partitions
+d /var/lib/apacheds-${version}/default/run
+
+f /etc/init.d/apacheds-${version}-default

Added: directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-default.conf
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-default.conf?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-default.conf (added)
+++ directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-default.conf Fri Jun 20 08:33:38 2008
@@ -0,0 +1,41 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+#
+  
+#
+# In this file you can override parameters specified in the default
+# Apache Directory Server config file which is usually at
+# /opt/apacheds-x.x.x/conf/apacheds.conf
+#
+# See also http://wrapper.tanukisoftware.org/doc/english/properties.html
+# For a list of properties that can be set.
+#
+# Common overrides shown commented below
+
+
+# Override the JRE used
+# wrapper.java.command=%JAVA_HOME%/bin/java
+
+# Override the JVM memory settings
+# Initial Java Heap Size (in MB)
+# wrapper.java.initmemory=384
+
+# Maximum Java Heap Size (in MB)
+# wrapper.java.maxmemory=384
+
+# apacheds.instance.start=auto
\ No newline at end of file

Added: directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-init
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-init?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-init (added)
+++ directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds-init Fri Jun 20 08:33:38 2008
@@ -0,0 +1,606 @@
+#! /bin/sh
+#
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+#
+
+# Shell script to start/stop Apache Directory Server
+# If you want to change apacheds service settings please modify the apacheds.conf 
+# file for the instance you wish to change.
+# chkconfig: 2345 91 35
+# description: This script starts and stops Apache DS
+#
+
+# Variables
+INSTANCE_HOME=/var/lib/@app@-@app.version@
+APACHEDS_HOME=/opt/@app@-@app.version@
+INSTANCE=default
+
+# Application
+APP_NAME="@app@"
+export APACHEDS_HOME
+APP_LONG_NAME="Apache Directory Server - $INSTANCE"
+
+
+# Wrapper
+WRAPPER_CMD="$APACHEDS_HOME/bin/@app@"
+WRAPPER_CONF="$APACHEDS_HOME/conf/@app@.conf"
+
+# Priority at which to run the wrapper.  See "man nice" for valid priorities.
+# nice is only used if a priority is specified.
+PRIORITY=
+
+# Location of the pid file.
+PIDDIR="/var/run/@app@-@app.version@"
+
+# If uncommented, causes the Wrapper to be shutdown using an anchor file.
+#  When launched with the 'start' command, it will also ignore all INT and
+#  TERM signals.
+#IGNORE_SIGNALS=true
+
+# If specified, the Wrapper will be run as the specified user.
+# IMPORTANT - Make sure that the user has the required privileges to write
+#  the PID file and wrapper.log files.  Failure to be able to write the log
+#  file will cause the Wrapper to exit without any way to write out an error
+#  message.
+# NOTE - This will set the user which is used to run the Wrapper as well as
+#  the JVM and is not useful in situations where a privileged resource or
+#  port needs to be allocated prior to the user being changed.
+RUN_AS_USER=$APP_NAME
+
+# Do not modify anything beyond this point
+#-----------------------------------------------------------------------------
+
+# Get the fully qualified path to the script
+case $0 in
+    /*)
+        SCRIPT="$0"
+        ;;
+    *)
+        PWD=`pwd`
+        SCRIPT="$PWD/$0"
+        ;;
+esac
+
+# Resolve the true real path without any sym links.
+CHANGED=true
+while [ "X$CHANGED" != "X" ]
+do
+    # Change spaces to ":" so the tokens can be parsed.
+    SAFESCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
+    # Get the real path to this script, resolving any symbolic links
+    TOKENS=`echo $SAFESCRIPT | sed -e 's;/; ;g'`
+    REALPATH=
+    for C in $TOKENS; do
+        # Change any ":" in the token back to a space.
+        C=`echo $C | sed -e 's;:; ;g'`
+        REALPATH="$REALPATH/$C"
+        # If REALPATH is a sym link, resolve it.  Loop for nested links.
+        while [ -h "$REALPATH" ] ; do
+            LS="`ls -ld "$REALPATH"`"
+            LINK="`expr "$LS" : '.*-> \(.*\)$'`"
+            if expr "$LINK" : '/.*' > /dev/null; then
+                # LINK is absolute.
+                REALPATH="$LINK"
+            else
+                # LINK is relative.
+                REALPATH="`dirname "$REALPATH"`""/$LINK"
+            fi
+        done
+    done
+
+    if [ "$REALPATH" = "$SCRIPT" ]
+    then
+        CHANGED=""
+    else
+        SCRIPT="$REALPATH"
+    fi
+done
+
+# Change the current directory to the location of the script
+cd "`dirname "$REALPATH"`"
+REALDIR=`pwd`
+
+# If the PIDDIR is relative, set its value relative to the full REALPATH to avoid problems if
+#  the working directory is later changed.
+FIRST_CHAR=`echo $PIDDIR | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+    PIDDIR=$REALDIR/$PIDDIR
+fi
+# Same test for WRAPPER_CMD
+FIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+    WRAPPER_CMD=$REALDIR/$WRAPPER_CMD
+fi
+# Same test for WRAPPER_CONF
+FIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+    WRAPPER_CONF=$REALDIR/$WRAPPER_CONF
+fi
+
+# Process ID
+ANCHORFILE="$PIDDIR/@app@-@app.version@-$INSTANCE.anchor"
+PIDFILE="$PIDDIR/$INSTANCE.pid"
+LOCKDIR="/var/lock/subsys"
+LOCKFILE="$LOCKDIR/$INSTANCE"
+pid=""
+
+# Resolve the location of the 'ps' command
+PSEXE="/usr/bin/ps"
+if [ ! -x "$PSEXE" ]
+then
+    PSEXE="/bin/ps"
+    if [ ! -x "$PSEXE" ]
+    then
+        echo "Unable to locate 'ps'."
+        echo "Please report this message along with the location of the command on your system."
+        exit 1
+    fi
+fi
+
+# Resolve the os
+DIST_OS=`uname -s | tr [:upper:] [:lower:] | tr -d [:blank:]`
+case "$DIST_OS" in
+    'sunos')
+        DIST_OS="solaris"
+        ;;
+    'hp-ux' | 'hp-ux64')
+        DIST_OS="hpux"
+        ;;
+    'darwin')
+        DIST_OS="macosx"
+        ;;
+    'unix_sv')
+        DIST_OS="unixware"
+        ;;
+esac
+
+# Resolve the architecture
+DIST_ARCH=`uname -p | tr [:upper:] [:lower:] | tr -d [:blank:]`
+if [ "$DIST_ARCH" = "unknown" ]
+then
+    DIST_ARCH=`uname -m | tr [:upper:] [:lower:] | tr -d [:blank:]`
+fi
+case "$DIST_ARCH" in
+    'amd64' | 'athlon' | 'ia32' | 'ia64' | 'i386' | 'i486' | 'i586' | 'i686' | 'x86_64')
+        DIST_ARCH="x86"
+        ;;
+    'ip27')
+        DIST_ARCH="mips"
+        ;;
+    'power' | 'powerpc' | 'power_pc' | 'ppc64')
+        DIST_ARCH="ppc"
+        ;;
+    'pa_risc' | 'pa-risc')
+        DIST_ARCH="parisc"
+        ;;
+    'sun4u' | 'sparcv9')
+        DIST_ARCH="sparc"
+        ;;
+    '9000/800')
+        DIST_ARCH="parisc"
+        ;;
+esac
+
+outputFile() {
+    if [ -f "$1" ]
+    then
+        echo "  $1 (Found but not executable.)";
+    else
+        echo "  $1"
+    fi
+}
+
+# Decide on the wrapper binary to use.
+# If a 32-bit wrapper binary exists then it will work on 32 or 64 bit
+#  platforms, if the 64-bit binary exists then the distribution most
+#  likely wants to use long names.  Otherwise, look for the default.
+# For macosx, we also want to look for universal binaries.
+WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+if [ -x "$WRAPPER_TEST_CMD" ]
+then
+    WRAPPER_CMD="$WRAPPER_TEST_CMD"
+else
+    if [ "$DIST_OS" = "macosx" ]
+    then
+        WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-32"
+        if [ -x "$WRAPPER_TEST_CMD" ]
+        then
+            WRAPPER_CMD="$WRAPPER_TEST_CMD"
+        else
+            WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+            if [ -x "$WRAPPER_TEST_CMD" ]
+            then
+                WRAPPER_CMD="$WRAPPER_TEST_CMD"
+            else
+                WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-64"
+                if [ -x "$WRAPPER_TEST_CMD" ]
+                then
+                    WRAPPER_CMD="$WRAPPER_TEST_CMD"
+                else
+                    if [ ! -x "$WRAPPER_CMD" ]
+                    then
+                        echo "Unable to locate any of the following binaries:"
+                        outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+                        outputFile "$WRAPPER_CMD-$DIST_OS-universal-32"
+                        outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+                        outputFile "$WRAPPER_CMD-$DIST_OS-universal-64"
+                        outputFile "$WRAPPER_CMD"
+                        exit 1
+                    fi
+                fi
+            fi
+        fi
+    else
+        WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+        if [ -x "$WRAPPER_TEST_CMD" ]
+        then
+            WRAPPER_CMD="$WRAPPER_TEST_CMD"
+        else
+            if [ ! -x "$WRAPPER_CMD" ]
+            then
+                echo "Unable to locate any of the following binaries:"
+                outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+                outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+                outputFile "$WRAPPER_CMD"
+                exit 1
+            fi
+        fi
+    fi
+fi
+
+# Build the nice clause
+if [ "X$PRIORITY" = "X" ]
+then
+    CMDNICE=""
+else
+    CMDNICE="nice -$PRIORITY"
+fi
+
+# Build the anchor file clause.
+if [ "X$IGNORE_SIGNALS" = "X" ]
+then
+   ANCHORPROP=
+   IGNOREPROP=
+else
+   ANCHORPROP=wrapper.anchorfile=\"$ANCHORFILE\"
+   IGNOREPROP=wrapper.ignore_signals=TRUE
+fi
+
+# Build the lock file clause.  Only create a lock file if the lock directory exists on this platform.
+LOCKPROP=
+if [ -d $LOCKDIR ]
+then
+    if [ -w $LOCKDIR ]
+    then
+        LOCKPROP=wrapper.lockfile=\"$LOCKFILE\"
+    fi
+fi
+
+checkUser() {
+    # $1 touchLock flag
+    # $2 command
+    # $3 instance
+
+    # Check the configured user.  If necessary rerun this script as the desired user.
+    if [ "X$RUN_AS_USER" != "X" ]
+    then
+        # Resolve the location of the 'id' command
+        IDEXE="/usr/xpg4/bin/id"
+        if [ ! -x "$IDEXE" ]
+        then
+            IDEXE="/usr/bin/id"
+            if [ ! -x "$IDEXE" ]
+            then
+                echo "Unable to locate 'id'."
+                echo "Please report this message along with the location of the command on your system."
+                exit 1
+            fi
+        fi
+
+        if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ]
+        then
+            # Already running as the configured user.  Avoid password prompts by not calling su.
+            RUN_AS_USER=""
+        fi
+    fi
+    if [ "X$RUN_AS_USER" != "X" ]
+    then
+        # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be
+        # able to create the lock file.  The Wrapper will be able to update this file once it
+        # is created but will not be able to delete it on shutdown.  If $2 is defined then
+        # the lock file should be created for the current command
+        if [ "X$LOCKPROP" != "X" ]
+        then
+            if [ "X$1" != "X" ]
+            then
+                # Resolve the primary group 
+                RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1`
+                if [ "X$RUN_AS_GROUP" = "X" ]
+                then
+                    RUN_AS_GROUP=$RUN_AS_USER
+                fi
+                touch $LOCKFILE
+                chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE
+            fi
+        fi
+
+        # Still want to change users, recurse.  This means that the user will only be
+        #  prompted for a password once. Variables shifted by 1
+        su -m $RUN_AS_USER -c "\"$REALPATH\" $2 $3"
+
+        # Now that we are the original user again, we may need to clean up the lock file.
+        if [ "X$LOCKPROP" != "X" ]
+        then
+            getpid
+            if [ "X$pid" = "X" ]
+            then
+                # Wrapper is not running so make sure the lock file is deleted.
+                if [ -f "$LOCKFILE" ]
+                then
+                    rm "$LOCKFILE"
+                fi
+            fi
+        fi
+
+        exit 0
+    fi
+}
+
+getpid() {
+    if [ -f "$PIDFILE" ]
+    then
+        if [ -r "$PIDFILE" ]
+        then
+            pid=`cat "$PIDFILE"`
+            if [ "X$pid" != "X" ]
+            then
+                # It is possible that 'a' process with the pid exists but that it is not the
+                #  correct process.  This can happen in a number of cases, but the most
+                #  common is during system startup after an unclean shutdown.
+                # The ps statement below looks for the specific wrapper command running as
+                #  the pid.  If it is not found then the pid file is considered to be stale.
+                pidtest=`$PSEXE -p $pid -o args | grep "$WRAPPER_CMD" | tail -1`
+                if [ "X$pidtest" = "X" ]
+                then
+                    # This is a stale pid file.
+                    rm -f "$PIDFILE"
+                    echo "Removed stale pid file: $PIDFILE"
+                    pid=""
+                fi
+            fi
+        else
+            echo "Cannot read $PIDFILE."
+            exit 1
+        fi
+    fi
+}
+
+testpid() {
+    pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
+    if [ "X$pid" = "X" ]
+    then
+        # Process is gone so remove the pid file.
+        rm -f "$PIDFILE"
+        pid=""
+    fi
+}
+
+testpiddir()
+{
+	# Be sure that the PIDDIR exists
+    if [ ! -d $PIDDIR ]
+	then
+		# If it doesn't exist, we create it
+   		mkdir -p $PIDDIR
+   		chown apacheds:apacheds $PIDDIR
+	fi
+}
+
+usage() {
+    echo "Usage: $0 <command>"
+    echo "  Available Commands: "
+    echo "      console     - Run in interactive mode with log output to the console."
+    echo "                    Press CTRL-C to stop."
+    echo "      start       - Run the instance in the background"
+    echo "      stop        - Stop the running instance"
+    echo "      restart     - Restart the instance if it is already running,"
+    echo "                    or start if it wasn't already running"
+    echo "      status      - Display the status of the instance (running or stopped)"
+    echo "      dump        - Request a JVM dump of the running process"
+}
+
+console() {
+    echo "Running $APP_LONG_NAME..."
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        # The string passed to eval must handles spaces in paths correctly.
+        COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" set.INSTANCE_HOME=\"$INSTANCE_HOME\" set.INSTANCE=\"$INSTANCE\" wrapper.syslog.ident=$APP_NAME wrapper.pidfile=\"$PIDFILE\" $ANCHORPROP $LOCKPROP wrapper.debug=true"
+        eval $COMMAND_LINE
+    else
+        echo "$APP_LONG_NAME is already running."
+        exit 1
+    fi
+}
+ 
+start() {
+    echo "Starting $APP_LONG_NAME..."
+    getpid
+     if [ "X$pid" = "X" ]
+     then
+         # The string passed to eval must handles spaces in paths correctly.
+         COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" set.INSTANCE_HOME=$INSTANCE_HOME set.INSTANCE=$INSTANCE wrapper.syslog.ident=$APP_NAME wrapper.pidfile=\"$PIDFILE\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $LOCKPROP"
+         eval $COMMAND_LINE
+     else
+         echo "$APP_LONG_NAME is already running."
+         exit 1
+     fi
+
+
+}
+ 
+stopit() {
+    echo "Stopping $APP_LONG_NAME..."
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        echo "$APP_LONG_NAME was not running."
+    else
+        if [ "X$IGNORE_SIGNALS" = "X" ]
+        then
+            # Running so try to stop it.
+            kill $pid
+            if [ $? -ne 0 ]
+            then
+                # An explanation for the failure should have been given
+                echo "Unable to stop $APP_LONG_NAME."
+                exit 1
+            fi
+        else
+            rm -f "$ANCHORFILE"
+            if [ -f "$ANCHORFILE" ]
+            then
+                # An explanation for the failure should have been given
+                echo "Unable to stop $APP_LONG_NAME."
+                exit 1
+            fi
+        fi
+
+        # We can not predict how long it will take for the wrapper to
+        #  actually stop as it depends on settings in apacheds.conf.
+        #  Loop until it does.
+        savepid=$pid
+        CNT=0
+        TOTCNT=0
+        while [ "X$pid" != "X" ]
+        do
+            # Show a waiting message every 5 seconds.
+            if [ "$CNT" -lt "5" ]
+            then
+                CNT=`expr $CNT + 1`
+            else
+                echo "Waiting for $APP_LONG_NAME to exit..."
+                CNT=0
+            fi
+            TOTCNT=`expr $TOTCNT + 1`
+
+            sleep 1
+
+            testpid
+        done
+
+        pid=$savepid
+        testpid
+        if [ "X$pid" != "X" ]
+        then
+            echo "Failed to stop $APP_LONG_NAME."
+            exit 1
+        else
+            echo "Stopped $APP_LONG_NAME."
+        fi
+    fi
+}
+
+status() {
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        echo "$APP_LONG_NAME is not running."
+        exit 1
+    else
+        echo "$APP_LONG_NAME is running ($pid)."
+        exit 0
+    fi
+}
+
+dump() {
+    echo "Dumping $APP_LONG_NAME..."
+    getpid
+    if [ "X$pid" = "X" ]
+    then
+        echo "$APP_LONG_NAME was not running."
+
+    else
+        kill -3 $pid
+
+        if [ $? -ne 0 ]
+        then
+            echo "Failed to dump $APP_LONG_NAME."
+            exit 1
+        else
+            echo "Dumped $APP_LONG_NAME."
+        fi
+    fi
+}
+
+list() {
+  echo "Available instances..."
+  for instance in $INSTANCE_HOME/* ; do
+	echo "	" `basename $instance`;
+  done
+}
+
+case "$1" in
+
+    'console')
+    	testpiddir
+        checkUser touchlock $1 $INSTANCE
+        console
+        ;;
+
+    'start')
+    	testpiddir
+        checkUser touchlock $1 $INSTANCE
+        start
+        ;;
+
+    'stop')
+        checkUser "" $1 $INSTANCE
+        stopit
+        ;;
+
+    'restart')
+        checkUser touchlock $1 $INSTANCE
+        stopit
+        start
+        ;;
+
+    'status')
+        checkUser "" $1 $INSTANCE
+        status
+        ;;
+
+    'dump')
+        checkUser "" $1 $INSTANCE
+        dump
+        ;;
+    'list')
+        list
+        ;;
+
+    *)
+        echo "Usage: $0 { console | start | stop | restart | status | dump }"
+        exit 1
+        ;;
+esac
+
+exit 0

Added: directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds.conf
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds.conf?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds.conf (added)
+++ directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/apacheds.conf Fri Jun 20 08:33:38 2008
@@ -0,0 +1,124 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+#
+
+#include /etc/apacheds/%INSTANCE%.conf
+
+# If the default java executable is not on the path,
+# this will need to be set to a fully qualified path.
+# This can also be overridden in /var/lib/apacheds/<instance_name>/conf/apacheds.conf
+#
+#wrapper.java.command=/usr/local/java/jdk1.5.0_10/bin/java
+
+wrapper.java.mainclass=org.apache.directory.daemon.TanukiBootstrapper
+wrapper.max_failed_invocations=1
+
+wrapper.java.classpath.1=../lib/bootstrapper.jar
+wrapper.java.classpath.2=../lib/wrapper.jar
+wrapper.java.classpath.3=../lib/slf4j-api-1.4.3.jar
+wrapper.java.classpath.4=../lib/slf4j-log4j12-1.4.3.jar
+wrapper.java.classpath.5=../lib/log4j-1.2.14.jar
+
+# Java Library Path (location of Wrapper.DLL or libwrapper.so)
+wrapper.java.library.path.1=../lib
+
+# Java Additional Parameters
+wrapper.java.additional.1=-Dlog4j.configuration=file:///%INSTANCE_HOME%/%INSTANCE%/conf/log4j.properties
+wrapper.java.additional.2=-Dapacheds.var.dir=%INSTANCE_HOME%/%INSTANCE%
+wrapper.java.additional.3=-Dapacheds.log.dir=%INSTANCE_HOME%/%INSTANCE%/log
+wrapper.java.additional.4=-Dapacheds.run.dir=%INSTANCE_HOME%/%INSTANCE%/run
+wrapper.java.additional.5=-Dapacheds.instance=%INSTANCE%
+wrapper.java.additional.6=-Dbootstrap.start.class=org.apache.ldap.server.Service
+wrapper.java.additional.7=-Dbootstrap.stop.class=org.apache.ldap.server.Service
+
+# Initial Java Heap Size (in MB)
+wrapper.java.initmemory=384
+
+# Maximum Java Heap Size (in MB)
+wrapper.java.maxmemory=384
+
+# Application parameters.  Add parameters as needed starting from 1
+wrapper.app.parameter.1=%APACHEDS_HOME%
+wrapper.app.parameter.2=org.apache.directory.server.Service
+wrapper.app.parameter.3=%INSTANCE_HOME%/%INSTANCE%/conf/server.xml
+
+#********************************************************************
+# Wrapper Logging Properties
+#********************************************************************
+# Format of output for the console.  (See docs for formats)
+wrapper.console.format=PM
+
+# Log Level for console output.  (See docs for log levels)
+wrapper.console.loglevel=INFO
+
+# Log file to use for wrapper output logging.
+wrapper.logfile="%INSTANCE_HOME%/%INSTANCE%/log/wrapper.log"
+
+# Format of output for the log file.  (See docs for formats)
+wrapper.logfile.format=LPTM
+
+# Log Level for log file output.  (See docs for log levels)
+wrapper.logfile.loglevel=INFO
+
+# Maximum size that the log file will be allowed to grow to before
+#  the log is rolled. Size is specified in bytes.  The default value
+#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
+#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
+wrapper.logfile.maxsize=1m
+
+# Maximum number of rolled log files which will be allowed before old
+#  files are deleted.  The default value of 0 implies no limit.
+wrapper.logfile.maxfiles=5
+
+# Log Level for sys/event log output.  (See docs for log levels)
+wrapper.syslog.loglevel=NONE
+
+#********************************************************************
+# Wrapper Windows Properties
+#********************************************************************
+# Title to use when running as a console
+wrapper.console.title=apacheds-%INSTANCE%
+
+#********************************************************************
+# Wrapper Windows NT/2000/XP Service Properties
+#********************************************************************
+# WARNING - Do not modify any of these properties when an application
+#  using this configuration file has been installed as a service.
+#  Please uninstall the service before modifying this section.  The
+#  service can then be reinstalled.
+
+# Name of the service
+wrapper.ntservice.name=apacheds-%INSTANCE%
+
+# Display name of the service
+wrapper.ntservice.displayname=Apache Directory Server - %INSTANCE%
+
+# Description of the service
+wrapper.ntservice.description=Apache Directory Server - %INSTANCE%
+
+# Service dependencies.  Add dependencies as needed starting from 1
+#wrapper.ntservice.dependency.1=
+
+# Mode in which the service is installed.  AUTO_START or DEMAND_START
+wrapper.ntservice.starttype=AUTO_START
+
+# Allow the service to interact with the desktop.
+wrapper.ntservice.interactive=false
+
+# Anything after this line can't be overridden
+#include "%INSTANCE_HOME%/%INSTANCE%/conf/apacheds.conf"
\ No newline at end of file

Added: directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/pkginfo
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/pkginfo?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/pkginfo (added)
+++ directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/pkginfo Fri Jun 20 08:33:38 2008
@@ -0,0 +1,9 @@
+PKG="apacheds"
+NAME="Apache DS ${version}"
+VERSION="${version}"
+ARCH="x86"
+CLASSES="none"
+CATEGORY="utility"
+VENDOR="Apache Software Foundation"
+EMAIL="users@directory.apache.org"
+BASEDIR="/"

Added: directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/postinstall
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/postinstall?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/postinstall (added)
+++ directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/postinstall Fri Jun 20 08:33:38 2008
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -e
+
+# Setting executable permissions
+chmod +x /opt/apacheds-${app.version}/bin/apacheds
+chmod +x /etc/init.d/apacheds-${app.version}-default
+
+# Creating the apacheds user (only if needed)
+USER=`eval "id -u -n apacheds 2>/dev/null || :"`
+if [ ! "Xapacheds" = "X$USER" ]
+then
+	/usr/sbin/groupadd apacheds >/dev/null 2>&1 || :
+	/usr/sbin/useradd -g apacheds -d /opt/apacheds-${app.version} apacheds >/dev/null 2>&1 || :
+fi
+
+# Modifying owner
+chown -R apacheds:apacheds /opt/apacheds-${app.version}
+chown -R apacheds:apacheds /var/lib/apacheds-${app.version}
+chown apacheds:apacheds /var/run/apacheds-${app.version}
+chown root:root /etc/init.d/apacheds-${app.version}-default
+
+# Create symbolic links for runlevels for default instance
+update-rc.d apacheds-${app.version}-default defaults
+
+# Start the default instance 
+/etc/init.d/apacheds-${app.version}-default start
+

Added: directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/preremove
URL: http://svn.apache.org/viewvc/directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/preremove?rev=669933&view=auto
==============================================================================
--- directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/preremove (added)
+++ directory/daemon/trunk/plugin/src/main/resources/org/apache/directory/daemon/installers/solarispkg/preremove Fri Jun 20 08:33:38 2008
@@ -0,0 +1,26 @@
+#!/bin/sh
+set -e
+
+# Emptying some directories
+for instance_dir in `find /var/lib/apacheds-${app.version} -maxdepth 1 -mindepth 1 -type d`; do
+  # Get instance and use it to shutdown
+  instance=$(echo $instance_dir | sed -e 's/.*apacheds.*\///g')
+  echo Shutting down ApacheDS instance $instance
+  /etc/init.d/apacheds-${app.version}-$instance stop
+
+  # Remove init script links
+  update-rc.d -f apacheds-${app.version}-$instance remove
+
+  # Backup old instance folders before deleting them
+  timestamp=$(date '+%Y%m%d_%H%M%S')
+  parent_dir=/var/lib
+  tarball=$parent_dir/apacheds-${app.version}-$instance"_"$timestamp.tgz
+  echo Backing up old $instance instance data to $tarball
+  tar -zcf $tarball $instance_dir
+  rm -rf $instance_dir/partitions/*
+  rm -rf $instance_dir/log/*
+done
+ 
+rm -rf /opt/apacheds-${app.version}/bin/wrapper.log
+
+