From 43ba6d721185f9a810761720fcb05103b31d17b7 Mon Sep 17 00:00:00 2001
From: chebrard <chebrard@localhost>
Date: Wed, 29 Oct 2008 10:39:44 +0000
Subject: [PATCH] Fix 3534: Provide native Solaris packages (fix also 3533: upgrade fails starting server adding entry ds-cfg-key-id)
---
opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderSvr4.java | 138 ++
opends/src/server/org/opends/server/admin/ClassLoaderProvider.java | 18
opends/resource/bin/_mixed-script.sh | 10
opends/resource/upgrade_svr4 | 92 +
opends/build-svr4.xml | 166 +++
opends/src/svr4/OpenDS/copyright | 17
opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java | 3
opends/src/server/org/opends/server/core/SchemaConfigManager.java | 101 +
opends/src/svr4/OpenDS/layout.xml | 167 +++
opends/src/svr4/OpenDS/pkg.properties | 7
opends/resource/bin/stop-ds | 9
opends/src/messages/messages/backend.properties | 2
opends/resource/bin/_script-util.sh | 105 +
opends/src/quicksetup/org/opends/quicksetup/Installation.java | 164 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java | 14
opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java | 9
opends/resource/configure | 66 +
opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java | 76 -
opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java | 19
opends/resource/upgrade | 9
opends/src/quicksetup/org/opends/quicksetup/configurator/package-info.java | 31
opends/resource/bin/start-ds | 25
opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java | 48
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java | 2
opends/resource/bin/_client-script.sh | 9
opends/resource/uninstall | 9
opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java | 8
opends/src/messages/messages/config.properties | 2
opends/src/quicksetup/org/opends/quicksetup/configurator/CheckInstance.java | 238 ++++
opends/resource/bin/make-ldif | 18
opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java | 10
opends/src/server/org/opends/server/backends/SchemaBackend.java | 353 ++++--
opends/src/svr4/OpenDS/README | 11
opends/resource/bin/_server-script.sh | 9
opends/src/messages/messages/tools.properties | 34
opends/src/svr4/OpenDS/install.html | 68 +
opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java | 8
opends/src/guitools/org/opends/guitools/controlpanel/task/SchemaTask.java | 4
opends/src/server/org/opends/server/types/Schema.java | 25
opends/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java | 2
opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java | 429 ++++++++
opends/build.xml | 2
opends/src/svr4/OpenDS/install.txt | 25
opends/src/quicksetup/org/opends/quicksetup/util/Utils.java | 17
opends/src/messages/messages/task.properties | 4
opends/resource/setup | 9
opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeSvr4Launcher.java | 196 +++
opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java | 57 -
opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java | 233 ++-
49 files changed, 2,597 insertions(+), 481 deletions(-)
diff --git a/opends/build-svr4.xml b/opends/build-svr4.xml
new file mode 100644
index 0000000..5514d3e
--- /dev/null
+++ b/opends/build-svr4.xml
@@ -0,0 +1,166 @@
+<!--
+ ! 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 2006-2008 Sun Microsystems, Inc.
+ ! -->
+
+<project name="SVR4 Packaging" basedir="." default="package-svr4">
+ <description>
+ This is a build script that extends the OpenDS build script by adding
+ SVR4 packaging functions.
+ </description>
+
+
+ <!-- By default will build OpenDS package -->
+ <property name="product" value="${SHORT_NAME}" />
+
+
+ <!-- General properties -->
+ <property name="svr4.src.dir" location="src/svr4/${product}" />
+ <property name="build.dir" location="build" />
+ <property name="pkg.dir" location="${build.dir}/package" />
+ <property name="svr4.dir" location="${build.dir}/package/svr4" />
+
+ <!-- Product specific properties: pkg.name / pkg.fullname / pkg.arch / pkg.desc / pkg.vendor / pkg.basedir -->
+ <property file="${svr4.src.dir}/pkg.properties" />
+
+ <!-- Default values for product specific properties -->
+ <property name="pkg.name" value="${product}" />
+ <property name="pkg.fullname" value="${pkg.name}" />
+ <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" />
+
+ <!-- Some others general properties -->
+ <property name="svr4.build.dir" location="${build.dir}/package/svr4/build/${pkg.name}" />
+ <property name="svr4.meta.dir" location="${svr4.build.dir}/meta" />
+ <property name="svr4.layout.dir" location="${svr4.build.dir}/layout" />
+ <property name="svr4.layout.pkg.dir" location="${svr4.build.dir}/layout/${pkg.name}" />
+
+ <!-- Must define layout/pkgversion target -->
+ <import file="${svr4.src.dir}/layout.xml" />
+
+ <!-- Check if OS is Solaris -->
+ <target name="checkos">
+ <condition property="isSunOS">
+ <os name="SunOS"/>
+ </condition>
+ </target>
+
+ <target name="wrongos" unless="isSunOS">
+ <echo message="OS is ${os.name}. SVR4 package can only be built on a SunOS machine" />
+ </target>
+
+
+ <!-- Construct SVR4 package -->
+ <target name="svr4" depends="checkos,wrongos,cleansvr4,pkgversion,layout,metadata,pkgmk" if="isSunOS"
+ description="Construct ${pkg.name} package for product ${product}.">
+ <echo message="Package ${pkg.name} for product ${product} built in ${svr4.dir}" />
+ </target>
+
+ <!-- Cleanup target -->
+ <target name="cleansvr4" if="isSunOS"
+ description="Cleanup SVR4 files.">
+ <delete dir="${svr4.build.dir}" />
+ <delete dir="${svr4.dir}/${pkg.name}" />
+ </target>
+
+ <!-- Construct metadata data -->
+ <target name="metadata" depends="pkginfo,prototype,copyright" if="isSunOS"
+ description="Construct metadata for ${pkg.name}.">
+ </target>
+
+ <!-- Construct pkginfo file -->
+ <target name="pkginfo" if="isSunOS" depends="pkgversion"
+ description="Create pkginfo file based on ${svr4.src.dir}/info.properties" >
+ <echo message="Building pkginfo for ${pkg.name}" />
+ <tstamp>
+ <format property="rev" pattern="yyyy.MM.dd"/>
+ </tstamp>
+ <mkdir dir="${svr4.meta.dir}"/>
+ <echo file="${svr4.meta.dir}/pkginfo">
+PKG=${pkg.name}
+NAME=${pkg.fullname}
+ARCH=${pkg.arch}
+VERSION=${pkg.version},REV=${rev}
+SUNW_PRODNAME=${pkg.desc}
+SUNW_PRODVERS=${pkg.version}
+SUNW_PKGVERS=1.0
+MAXINST=1000
+CATEGORY=application
+DESC=${pkg.desc}
+VENDOR=${pkg.vendor}
+BASEDIR=${pkg.basedir}
+CLASSES=none
+HOTLINE=Please contact your local service provider
+EMAIL=
+ </echo>
+ </target>
+
+ <!-- Construct prototype file -->
+ <target name="prototype" depends="layout" if="isSunOS"
+ description="Create prototype file based on ${svr4.layout.dir}" >
+ <echo message="Building prototype for ${pkg.name} pkg" />
+ <exec executable="pkgproto" dir="${svr4.layout.dir}" output="${svr4.meta.dir}/prototype">
+ <arg value="."/>
+ </exec>
+ <exec executable="groups" dir="${svr4.layout.dir}" outputproperty="user.group" />
+ <echo file="${svr4.meta.dir}/prototype" append="true">i pkginfo
+i copyright</echo>
+ <replaceregexp file="${svr4.meta.dir}/prototype"
+ match="${user.name}"
+ replace="root"
+ byline="true"/>
+ <replaceregexp file="${svr4.meta.dir}/prototype"
+ match="${user.group}"
+ replace="sys"
+ byline="true"/>
+
+ </target>
+
+ <!-- Construct copyright file -->
+ <target name="copyright" if="isSunOS"
+ description="Create copyright file based on ${svr4.src.dir}/copyright" >
+ <echo message="Building copyright for ${pkg.name} pkg" />
+ <copy file="${svr4.src.dir}/copyright" todir="${svr4.meta.dir}"/>
+ </target>
+
+ <!-- Make package -->
+ <target name="pkgmk" if="isSunOS"
+ description="Build ${pkg.name} package" >
+ <echo message="Building ${pkg.name} pkg" />
+ <echo message="Executing pkgmk -o -d ${svr4.dir} -r ${svr4.layout.dir} -f ${svr4.meta.dir}/prototype in ${svr4.layout.dir}" />
+ <exec executable="pkgmk" dir="${svr4.layout.dir}">
+ <arg value="-o"/>
+ <arg value="-d"/>
+ <arg value="${svr4.dir}"/>
+ <arg value="-r"/>
+ <arg value="${svr4.layout.dir}"/>
+ <arg value="-f"/>
+ <arg value="${svr4.meta.dir}/prototype"/>
+ </exec>
+ </target>
+
+</project>
diff --git a/opends/build.xml b/opends/build.xml
index e95966c..d975784 100644
--- a/opends/build.xml
+++ b/opends/build.xml
@@ -2421,4 +2421,6 @@
</javac>
</target>
+ <import file="build-svr4.xml"/>
+
</project>
diff --git a/opends/resource/bin/_client-script.sh b/opends/resource/bin/_client-script.sh
index 6c519d2..b1e4374 100755
--- a/opends/resource/bin/_client-script.sh
+++ b/opends/resource/bin/_client-script.sh
@@ -47,15 +47,6 @@
INSTALL_ROOT=`pwd`
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
cd "${WORKING_DIR}"
diff --git a/opends/resource/bin/_mixed-script.sh b/opends/resource/bin/_mixed-script.sh
index 302ee0f..6f92453 100644
--- a/opends/resource/bin/_mixed-script.sh
+++ b/opends/resource/bin/_mixed-script.sh
@@ -48,16 +48,6 @@
INSTALL_ROOT=`pwd`
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
-
cd "${WORKING_DIR}"
OLD_SCRIPT_NAME=${SCRIPT_NAME}
diff --git a/opends/resource/bin/_script-util.sh b/opends/resource/bin/_script-util.sh
index 9830484..c77e45c 100644
--- a/opends/resource/bin/_script-util.sh
+++ b/opends/resource/bin/_script-util.sh
@@ -170,17 +170,61 @@
cd "`dirname "${0}"`"
cd ..
INSTALL_ROOT=`pwd`
- if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
- then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
- else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
- fi
cd "${WORKING_DIR}"
fi
+if test "${INSTANCE_ROOT}" = ""
+then
+ for opt in `echo $*`
+ do
+ if [ $opt = "-V" ] || [ $opt = "--version" ] ||
+ [ $opt = "-H" ] || [ $opt = "--help" ]
+ then
+ INSTANCE_ROOT="not_needed"
+ fi
+ done
+fi
+
+if test "${INSTANCE_ROOT}" = ""
+then
+ if [ -f ${INSTALL_ROOT}/configure ]
+ then
+ if [ -f /etc/opt/opends/instance.loc ]
+ then
+ if [ "${SCRIPT_NAME}" = "configure" ]
+ then
+ echo "${INSTALL_ROOT}/configure has already be run. Exiting."
+ exit 0
+ fi
+ INSTANCE_ROOT=`cat /etc/opt/opends/instance.loc`
+ else
+ if [ "${SCRIPT_NAME}" != "configure" ]
+ then
+ echo "No instance found. Run ${INSTALL_ROOT}/configure to create it."
+ exit 1
+ fi
+ fi
+ else
+ if [ -f ${INSTALL_ROOT}/instance.loc ]
+ then
+ if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
+ then
+ INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
+ else
+ INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
+ fi
+ else
+ INSTANCE_ROOT=${INSTALL_ROOT}
+ fi
+ fi
+ if [ -d "${INSTANCE_ROOT}" ]
+ then
+ cd ${INSTANCE_ROOT}
+ INSTANCE_ROOT=`pwd`
+ export INSTANCE_ROOT
+ fi
+fi
+
if test "${SCRIPT_UTIL_CMD}" = "set-full-environment-and-test-java"
then
set_java_home_and_args
@@ -205,3 +249,48 @@
then
test_java
fi
+
+current_user()
+{
+USER=`id`
+CURRENT_IFS=${IFS}
+IFS="()"
+set -- ${USER}
+echo $2
+IFS=${CURRENT_IFS}
+}
+
+if [ "${SCRIPT_NAME}" != "configure" ]
+then
+ NO_CHECK=0
+ for opt in `echo $*`
+ do
+ # No check for --version or --help option
+ if [ $opt = "-V" ] || [ $opt = "--version" ] ||
+ [ $opt = "-H" ] || [ $opt = "--help" ] ||
+ [ $opt = "-F" ] || [ $opt = "--fullversion" ]
+ then
+ NO_CHECK=1
+ fi
+ done
+ if [ ${NO_CHECK} -eq 0 ]
+ then
+ set_classpath
+ # Check instance
+ CURRENT_USER="`current_user`"
+ if [ "${CHECK_VERSION}" = "yes" ]
+ then
+ OPT_CHECK_VERSION="--checkVersion"
+ else
+ OPT_CHECK_VERSION=""
+ fi
+ # Launch the CheckInstance process.
+ "${OPENDS_JAVA_BIN}" ${OPENDS_JAVA_ARGS} ${SCRIPT_NAME_ARG} -DINSTALL_ROOT=${INSTALL_ROOT} -DINSTANCE_ROOT=${INSTANCE_ROOT} org.opends.quicksetup.configurator.CheckInstance --currentUser ${CURRENT_USER} ${OPT_CHECK_VERSION}
+ # return part
+ RETURN_CODE=$?
+ if [ ${RETURN_CODE} -ne 0 ]
+ then
+ exit ${RETURN_CODE}
+ fi
+ fi
+fi
diff --git a/opends/resource/bin/_server-script.sh b/opends/resource/bin/_server-script.sh
index 6adb9fa..d5ae72c 100755
--- a/opends/resource/bin/_server-script.sh
+++ b/opends/resource/bin/_server-script.sh
@@ -47,15 +47,6 @@
INSTALL_ROOT=`pwd`
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
cd "${WORKING_DIR}"
# Set environment variables
diff --git a/opends/resource/bin/make-ldif b/opends/resource/bin/make-ldif
index cca6e47..38a2c0e 100755
--- a/opends/resource/bin/make-ldif
+++ b/opends/resource/bin/make-ldif
@@ -42,17 +42,15 @@
INSTALL_ROOT=`pwd`
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
cd "${WORKING_DIR}"
-SCRIPT_DIR=`dirname "${0}"`
+# Set environment variables
+. "${INSTALL_ROOT}/lib/_script-util.sh"
+RETURN_CODE=$?
+if test ${RETURN_CODE} -ne 0
+then
+ exit ${RETURN_CODE}
+fi
+
"${SCRIPT_DIR}/../lib/_server-script.sh" \
--resourcePath "${INSTANCE_ROOT}/config/MakeLDIF" "${@}"
diff --git a/opends/resource/bin/start-ds b/opends/resource/bin/start-ds
index 075dcca..ffbfe97 100755
--- a/opends/resource/bin/start-ds
+++ b/opends/resource/bin/start-ds
@@ -38,24 +38,8 @@
INSTALL_ROOT=`pwd`
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
cd "${WORKING_DIR}"
-# Specify the locations of important files that may be used when the server
-# is starting.
-CONFIG_FILE=${INSTANCE_ROOT}/config/config.ldif
-PID_FILE=${INSTANCE_ROOT}/logs/server.pid
-LOG_FILE=${INSTANCE_ROOT}/logs/server.out
-STARTING_FILE=${INSTANCE_ROOT}/logs/server.starting
-
# Specify the script name so that it may be provided in command-line usage.
SCRIPT_NAME="start-ds"
@@ -64,6 +48,8 @@
# Set environment variables
SCRIPT_UTIL_CMD=set-full-environment-and-test-java
export SCRIPT_UTIL_CMD
+CHECK_VERSION=yes
+export CHECK_VERSION
. "${INSTALL_ROOT}/lib/_script-util.sh"
RETURN_CODE=$?
if test ${RETURN_CODE} -ne 0
@@ -71,6 +57,13 @@
exit ${RETURN_CODE}
fi
+# Specify the locations of important files that may be used when the server
+# is starting.
+CONFIG_FILE=${INSTANCE_ROOT}/config/config.ldif
+PID_FILE=${INSTANCE_ROOT}/logs/server.pid
+LOG_FILE=${INSTANCE_ROOT}/logs/server.out
+STARTING_FILE=${INSTANCE_ROOT}/logs/server.starting
+
# See if the provided set of arguments were sufficient for us to be able to
# start the server or perform the requested operation. An exit code of 99
diff --git a/opends/resource/bin/stop-ds b/opends/resource/bin/stop-ds
index 71e46a2..a316e5a 100755
--- a/opends/resource/bin/stop-ds
+++ b/opends/resource/bin/stop-ds
@@ -47,15 +47,6 @@
INSTALL_ROOT=`pwd`
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
cd "${WORKING_DIR}"
# We keep this values to reset the environment before calling start-ds.
diff --git a/opends/resource/configure b/opends/resource/configure
new file mode 100755
index 0000000..c70b134
--- /dev/null
+++ b/opends/resource/configure
@@ -0,0 +1,66 @@
+#!/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 2006-2008 Sun Microsystems, Inc.
+
+
+# Capture the current working directory so that we can change to it later.
+# Then capture the location of this script and the Directory Server instance
+# root so that we can use them to create appropriate paths.
+WORKING_DIR=`pwd`
+
+cd "`dirname "${0}"`"
+SCRIPT_DIR=`pwd`
+
+INSTALL_ROOT=${SCRIPT_DIR}
+export INSTALL_ROOT
+
+SCRIPT_NAME=configure
+export SCRIPT_NAME
+
+cd "${WORKING_DIR}"
+
+# Set environment variables
+SCRIPT_UTIL_CMD=set-full-environment-and-test-java
+export SCRIPT_UTIL_CMD
+. "${INSTALL_ROOT}/lib/_script-util.sh"
+RETURN_CODE=$?
+if test ${RETURN_CODE} -ne 0
+then
+ exit ${RETURN_CODE}
+fi
+
+# Launch the configure process.
+"${OPENDS_JAVA_BIN}" ${OPENDS_JAVA_ARGS} ${SCRIPT_NAME_ARG} -DINSTALL_ROOT=${INSTALL_ROOT} org.opends.quicksetup.configurator.Configurator "${@}"
+
+# return part
+RETURN_CODE=$?
+if test ${RETURN_CODE} -eq 50
+then
+ # Version info was on requested
+ exit 0
+else
+ exit ${RETURN_CODE}
+fi
diff --git a/opends/resource/setup b/opends/resource/setup
index f9ceae1..731baf4 100755
--- a/opends/resource/setup
+++ b/opends/resource/setup
@@ -37,15 +37,6 @@
INSTALL_ROOT=${SCRIPT_DIR}
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
SCRIPT_NAME=setup
export SCRIPT_NAME
diff --git a/opends/resource/uninstall b/opends/resource/uninstall
index f1e6ad5..ccab3d3 100644
--- a/opends/resource/uninstall
+++ b/opends/resource/uninstall
@@ -42,15 +42,6 @@
INSTALL_ROOT=${SCRIPT_DIR}
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
cd "${WORKING_DIR}"
# Set environment variables
diff --git a/opends/resource/upgrade b/opends/resource/upgrade
index 291439a..8bd3d9b 100644
--- a/opends/resource/upgrade
+++ b/opends/resource/upgrade
@@ -36,15 +36,6 @@
INSTALL_ROOT=${SCRIPT_DIR}
export INSTALL_ROOT
-if cat ${INSTALL_ROOT}/instance.loc | grep '^/' > /dev/null
-then
- INSTANCE_ROOT=`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-else
- INSTANCE_ROOT=${INSTALL_ROOT}/`cat ${INSTALL_ROOT}/instance.loc`
- export INSTANCE_ROOT
-fi
-
SCRIPT_NAME=upgrade
export SCRIPT_NAME
diff --git a/opends/resource/upgrade_svr4 b/opends/resource/upgrade_svr4
new file mode 100755
index 0000000..eba37ea
--- /dev/null
+++ b/opends/resource/upgrade_svr4
@@ -0,0 +1,92 @@
+#!/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 2006-2008 Sun Microsystems, Inc.
+
+# Capture the current working directory so that we can change to it later.
+# Then capture the location of this script and the Directory Server instance
+# root so that we can use them to create appropriate paths.
+WORKING_DIR=`pwd`
+
+cd "`dirname "${0}"`"
+SCRIPT_DIR=`pwd`
+
+INSTALL_ROOT=${SCRIPT_DIR}
+export INSTALL_ROOT
+
+SCRIPT_NAME=upgrade
+export SCRIPT_NAME
+
+cd "${WORKING_DIR}"
+
+# Set java home
+SCRIPT_UTIL_CMD=set-java-home-and-args
+export SCRIPT_UTIL_CMD
+. "${INSTALL_ROOT}/lib/_script-util.sh"
+RETURN_CODE=$?
+if test ${RETURN_CODE} -ne 0
+then
+ exit ${RETURN_CODE}
+fi
+
+# Set environment variables
+SCRIPT_UTIL_CMD=set-environment-vars
+export SCRIPT_UTIL_CMD
+. "${INSTALL_ROOT}/lib/_script-util.sh"
+RETURN_CODE=$?
+if test ${RETURN_CODE} -ne 0
+then
+ exit ${RETURN_CODE}
+fi
+
+# Configure the appropriate CLASSPATH to test.
+#for JAR in ${INSTANCE_ROOT}/tmp/upgrade/lib/*.jar
+#do
+# CLASSPATH=${CLASSPATH}:${JAR}
+#done
+CLASSPATH=${CLASSPATH}:${INSTANCE_ROOT}/classes
+for JAR in ${INSTALL_ROOT}/lib/*.jar
+do
+ CLASSPATH=${CLASSPATH}:${JAR}
+done
+export CLASSPATH
+
+# Test the java installation
+SCRIPT_UTIL_CMD=test-java
+export SCRIPT_UTIL_CMD
+. "${INSTALL_ROOT}/lib/_script-util.sh"
+RETURN_CODE=$?
+if test ${RETURN_CODE} -ne 0
+then
+ exit ${RETURN_CODE}
+fi
+
+if [ -r "${INSTANCE_ROOT}/tmp/upgrade" ]
+then
+ rm -fr "${INSTANCE_ROOT}/tmp/upgrade"
+fi
+
+# Launch the upgrade process.
+"${OPENDS_JAVA_BIN}" ${OPENDS_JAVA_ARGS} -DINSTALL_ROOT=${INSTALL_ROOT} org.opends.quicksetup.upgrader.UpgradeSvr4Launcher "${@}"
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
index 9cbeabe..90d147a 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
@@ -371,8 +371,14 @@
if (!f.isAbsolute())
{
f = new File(
- DirectoryServer.getEnvironmentConfig().getSchemaDirectory(),
+ DirectoryServer.getEnvironmentConfig().getSchemaDirectory(false),
schemaFile);
+ if (f == null || ! f.exists() || f.isDirectory())
+ {
+ f = new File(
+ DirectoryServer.getEnvironmentConfig().getSchemaDirectory(true),
+ schemaFile);
+ }
}
schemaFile = f.getAbsolutePath();
return schemaFile;
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/task/SchemaTask.java b/opends/src/guitools/org/opends/guitools/controlpanel/task/SchemaTask.java
index f7be01a..db299c8 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/task/SchemaTask.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/task/SchemaTask.java
@@ -77,15 +77,17 @@
backendSet = new HashSet<String>();
CommonSchemaElements element = getSchemaElement();
schemaFile = element.getSchemaFile();
+ boolean userSchema = false ;
if (schemaFile == null)
{
schemaFile = ConfigConstants.FILE_USER_SCHEMA_ELEMENTS;
+ userSchema = true;
}
File f = new File(schemaFile);
if (!f.isAbsolute())
{
f = new File(
- DirectoryServer.getEnvironmentConfig().getSchemaDirectory(),
+ DirectoryServer.getEnvironmentConfig().getSchemaDirectory(userSchema),
schemaFile);
}
schemaFile = f.getAbsolutePath();
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
index dc1f376..e84b802 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
@@ -761,11 +761,11 @@
*/
private String getPropertiesFile()
{
- String configDir = Utils.getPath(
- getInfo().getServerDescriptor().getInstallPath().getAbsolutePath(),
- Installation.CONFIG_PATH_RELATIVE);
- String propertiesFile = Utils.getPath(
- configDir, Installation.DEFAULT_JAVA_PROPERTIES_FILE);
+ String installPath = getInfo().getServerDescriptor().
+ getInstallPath().getAbsolutePath();
+ String propertiesFile = Utils.getPath(
+ Utilities.getInstanceRootDirectory(installPath).getAbsolutePath(),
+ Installation.RELATIVE_JAVA_PROPERTIES_FILE);
return propertiesFile;
}
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java
index 7f9dd88..5d64d5e 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java
@@ -60,10 +60,10 @@
schema = DirectoryServer.getSchema().duplicate();
}
- private static String getSchemaDirectoryPath()
+ private static String getSchemaDirectoryPath(boolean userSchema)
{
File schemaDir =
- DirectoryServer.getEnvironmentConfig().getSchemaDirectory();
+ DirectoryServer.getEnvironmentConfig().getSchemaDirectory(userSchema);
if (schemaDir != null) {
return schemaDir.getAbsolutePath();
} else {
@@ -79,8 +79,6 @@
*/
public void readSchema() throws ConfigException, InitializationException
{
- String schemaDirPath= getSchemaDirectoryPath();
- File schemaDir = new File(schemaDirPath);
String[] attrsToKeep = {
ConfigConstants.ATTR_ATTRIBUTE_TYPES_LC,
ConfigConstants.ATTR_OBJECTCLASSES_LC,
@@ -126,6 +124,14 @@
String[] fileNames = null;
try
{
+ String installPath =
+ new File(DirectoryServer.getServerRoot()).getCanonicalPath();
+ String instancePath =
+ new File(DirectoryServer.getInstanceRoot()).getCanonicalPath();
+
+ // Load install directory schema
+ String schemaDirPath= getSchemaDirectoryPath(false);
+ File schemaDir = new File(schemaDirPath);
if (schemaDirPath == null || ! schemaDir.exists())
{
Message message = ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaDirPath);
@@ -137,10 +143,27 @@
ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaDirPath);
throw new InitializationException(message);
}
+ File[] schemaInstallDirFiles = schemaDir.listFiles();
+ File[] schemaInstanceDirFiles = null ;
+ int size = schemaInstallDirFiles.length;
- File[] schemaDirFiles = schemaDir.listFiles();
- ArrayList<String> fileList = new ArrayList<String>(schemaDirFiles.length);
- for (File f : schemaDirFiles)
+ if (! installPath.equals(instancePath))
+ {
+ schemaDirPath= getSchemaDirectoryPath(true);
+ schemaDir = new File(schemaDirPath);
+ if (schemaDirPath != null
+ &&
+ schemaDir.exists()
+ &&
+ schemaDir.isDirectory())
+ {
+ schemaInstanceDirFiles = schemaDir.listFiles();
+ size += schemaInstanceDirFiles.length;
+ }
+ }
+
+ ArrayList<String> fileList = new ArrayList<String>(size);
+ for (File f : schemaInstallDirFiles)
{
if (f.isFile())
{
@@ -148,6 +171,17 @@
}
}
+ if (schemaInstanceDirFiles != null)
+ {
+ for (File f : schemaInstanceDirFiles)
+ {
+ if (f.isFile())
+ {
+ fileList.add(f.getName());
+ }
+ }
+ }
+
fileNames = new String[fileList.size()];
fileList.toArray(fileNames);
Arrays.sort(fileNames);
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
index fd58eb5..320b5e3 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
@@ -38,9 +38,7 @@
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import java.io.BufferedReader;
import java.io.File;
-import java.io.FileReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.CharacterIterator;
@@ -1536,59 +1534,8 @@
{
if (instanceRootDirectory == null)
{
- String instancePathFileName = installPath + File.separator +
- "instance.loc";
-
- File f = new File(instancePathFileName);
- // look for <installPath>/instance.loc
- if (! f.exists())
- {
- instanceRootDirectory = new File(installPath);
- return instanceRootDirectory;
- }
-
- BufferedReader reader;
- try
- {
- reader = new BufferedReader(new FileReader(instancePathFileName));
- }
- catch (Exception e)
- {
- instanceRootDirectory = new File(installPath);
- return instanceRootDirectory;
- }
-
-
- // Read the first line and close the file.
- String line;
- try
- {
- line = reader.readLine();
- File instanceLoc = new File (line);
- if (instanceLoc.isAbsolute())
- {
- instanceRootDirectory = instanceLoc ;
- return instanceRootDirectory;
- }
- else
- {
- instanceRootDirectory =
- new File(installPath + File.separator + instanceLoc.getPath());
- return instanceRootDirectory;
- }
- }
- catch (Exception e)
- {
- instanceRootDirectory = new File(installPath);
- return instanceRootDirectory;
- }
- finally
- {
- try
- {
- reader.close();
- } catch (Exception e) {}
- }
+ instanceRootDirectory = new File(
+ Utils.getInstancePathFromClasspath(installPath));
}
return instanceRootDirectory;
}
diff --git a/opends/src/messages/messages/backend.properties b/opends/src/messages/messages/backend.properties
index 826d89e..81335de 100644
--- a/opends/src/messages/messages/backend.properties
+++ b/opends/src/messages/messages/backend.properties
@@ -257,7 +257,7 @@
schema files that were in place before the start of the restore process have \
been preserved and are contained in the %s directory
SEVERE_ERR_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY_79=Unable to restore \
- schema backup %s because an error occurred while attempting to create a new \
+ schema backup %s or % s because an error occurred while attempting to create a new \
empty directory %s into which the files should be restored: %s
SEVERE_ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED_80=An error occurred that \
prevented the schema backup from being properly restored. The original \
diff --git a/opends/src/messages/messages/config.properties b/opends/src/messages/messages/config.properties
index 38acbca..55631a4 100644
--- a/opends/src/messages/messages/config.properties
+++ b/opends/src/messages/messages/config.properties
@@ -655,7 +655,7 @@
Server schema definitions because the schema directory %s exists but is not a \
directory
SEVERE_ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES_190=Unable to read the Directory \
- Server schema definitions from directory %s because an unexpected error \
+ Server schema definitions from directory %s or %s because an unexpected error \
occurred while trying to list the files in that directory: %s
SEVERE_WARN_CONFIG_SCHEMA_CANNOT_OPEN_FILE_191=Schema configuration file %s \
in directory %s cannot be parsed because an unexpected error occurred while \
diff --git a/opends/src/messages/messages/task.properties b/opends/src/messages/messages/task.properties
index ce3b4d6..41e73e7 100644
--- a/opends/src/messages/messages/task.properties
+++ b/opends/src/messages/messages/task.properties
@@ -60,10 +60,10 @@
%s of task entry %s
SEVERE_ERR_TASK_ADDSCHEMAFILE_NO_SUCH_FILE_6=Unable to add one or more files \
to the server schema because the specified schema file %s does not exist in \
- schema directory %s
+ schema directories %s or %s
SEVERE_ERR_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE_7=Unable to add one or \
more files to the server schema because an error occurred while attempting to \
- determine whether file %s exists in schema directory %s: %s
+ determine whether file %s exists in schema directory %s or %s: %s
SEVERE_ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE_8=An error occurred \
while attempting to load the contents of schema file %s into the server \
schema: %s
diff --git a/opends/src/messages/messages/tools.properties b/opends/src/messages/messages/tools.properties
index fa1950a..f86317e 100644
--- a/opends/src/messages/messages/tools.properties
+++ b/opends/src/messages/messages/tools.properties
@@ -2393,3 +2393,37 @@
the Directory Server at %s on port %s. Check this port is an administration port
SEVERE_ERR_PWPSTATE_CANNOT_CONNECT_SSL_1629=ERROR: Cannot establish a connection to \
the Directory Server at %s on port %s. Check this port is an administration port
+
+INFO_IPATH_PLACEHOLDER_1630={instancePath}
+INFO_CURRENT_USER_PLACEHOLDER_1631={currentUser}
+
+INFO_CONFIGURE_DESCRIPTION_IPATH_1632=Path where the instance will be located
+INFO_CONFIGURE_DESCRIPTION_USERNAME_1633=User name of the owner of the instance
+INFO_CONFIGURE_DESCRIPTION_GROUPNAME_1634=Group name of the owner of the instance
+INFO_CONFIGURE_USAGE_DESCRIPTION_1635=This utility sets the instance location
+SEVERE_ERR_CONFIGURE_NOT_DIRECTORY_1636=[%s] is not a directory. Only directories can \
+be used as {instancePath}
+SEVERE_ERR_CONFIGURE_DIRECTORY_NOT_EMPTY_1637=[%s] is not empty. Only empty directories can \
+be used as {instancePath}
+SEVERE_ERR_CONFIGURE_DIRECTORY_NOT_WRITABLE_1638=[%s] is not writable. Cannot create \
+Directory Server instance
+SEVERE_ERR_CONFIGURE_BAD_USER_NAME_1639=[%s] does not start with a letter. \
+Cannot be specified as {userName}
+SEVERE_ERR_CONFIGURE_GET_GROUP_ERROR_1640=Unable to retrieve group for [%s]. \
+Check that [%s] exists
+SEVERE_ERR_CONFIGURE_CHMOD_ERROR_1641=Unable to use [%s]/[%s] as {userName}/{groupName}. \
+Check that %s exists and belongs to %s
+SEVERE_ERR_CONFIGURE_CURRENT_USER_ERROR_1642=Unauthorized user. \
+Only user that can write [%s] can use this command
+
+INFO_CHECK_DESCRIPTION_1643=This utility checks version and owner of the instance
+INFO_CHECK_DESCRIPTION_CURRENT_USER_1644=Current user
+INFO_CHECK_DESCRIPTION_CHECK_VERSION_1645=Specifies that check on version should be done
+SEVERE_ERR_CHECK_USER_ERROR_1646=Current user is not owner of the instance. Only [%s] can run this command
+SEVERE_ERR_CHECK_VERSION_NOT_MATCH_1647=Data version does not match binaries. Run upgrade script to solve this
+
+
+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. \
+Create it or use --userName option to specify another user
+
diff --git a/opends/src/quicksetup/org/opends/quicksetup/Installation.java b/opends/src/quicksetup/org/opends/quicksetup/Installation.java
index e032348..0deca50 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/Installation.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/Installation.java
@@ -77,6 +77,11 @@
SetupUtils.LIBRARIES_PATH_RELATIVE;
/**
+ * The relative path where customer classes are.
+ */
+ public static final String CLASSES_PATH_RELATIVE = "classes";
+
+ /**
* The relative path where the database files are.
*/
public static final String DATABASES_PATH_RELATIVE = "db";
@@ -143,10 +148,32 @@
CONFIG_PATH_RELATIVE+File.separator+"tools.properties";
/**
+ * The path to the default instance.
+ */
+ public static final String DEFAULT_INSTANCE_PATH = "/var/opt/opends";
+
+ /**
* The relative path to the instance.loc file.
*/
public static final String INSTANCE_LOCATION_PATH_RELATIVE =
"instance.loc";
+
+ /**
+ * The path to the instance.loc file.
+ */
+ public static final String INSTANCE_LOCATION_PATH = "/etc/opt/opends/" +
+ INSTANCE_LOCATION_PATH_RELATIVE;
+
+ /**
+ * The relative path to tmpl_instance.
+ */
+ public static final String TMPL_INSTANCE_RELATIVE_PATH = "tmpl_instance";
+
+ /**
+ * The relative path to buildinfo file.
+ */
+ public static final String BUILDINFO_RELATIVE_PATH = "buildinfo";
+
/**
* The UNIX setup script file name.
*/
@@ -178,6 +205,11 @@
public static final String WINDOWS_UPGRADE_FILE_NAME = "upgrade.bat";
/**
+ * The UNIX configure script file name.
+ */
+ public static final String UNIX_CONFIGURE_FILE_NAME = "configure";
+
+ /**
* Newly upgraded Windows upgrade batch file name. When the upgrade
* batch file requires upgrade it is not done during execution of the
* upgrade utility itself since replacing a running script on Windows
@@ -402,6 +434,8 @@
private BuildInformation buildInformation;
+ private BuildInformation instanceInformation;
+
/**
* Indicates if the install and instance are in the same directory.
* @return true if the install and instance are in the same directory.
@@ -469,6 +503,21 @@
}
/**
+ * Gets the directory of the OpenDS template instance.
+ *
+ * @return File object representing the top level directory of
+ * and OpenDS installation
+ */
+ public File getTmplInstanceDirectory() {
+ File f = new File(getRootDirectory().getAbsolutePath() +
+ File.separator + TMPL_INSTANCE_RELATIVE_PATH );
+ if (f.exists())
+ return f;
+ else
+ return getInstanceDirectory();
+ }
+
+ /**
* Sets the root directory of this installation.
*
* @param rootDirectory File of this installation
@@ -605,7 +654,7 @@
* @return the path to the tools properties file.
*/
public File getToolsPropertiesFile() {
- return new File(getRootDirectory(), TOOLS_PROPERTIES);
+ return new File(getTmplInstanceDirectory(), TOOLS_PROPERTIES);
}
/**
@@ -614,7 +663,8 @@
* @return the path to the set-java-home file.
*/
public File getSetJavaHomeFile() {
- return new File(getLibrariesDirectory(),
+ return new File(getInstanceDirectory().getAbsolutePath() + File.separator +
+ LIBRARIES_PATH_RELATIVE,
Utils.isWindows()?SET_JAVA_PROPERTIES_FILE_WINDOWS :
SET_JAVA_PROPERTIES_FILE_UNIX);
}
@@ -642,10 +692,42 @@
*/
public File getBaseSchemaFile() throws ApplicationException {
return new File(getConfigurationUpgradeDirectory(),
+ "schema.ldif." + getInstanceSvnRev().toString());
+ }
+
+ /**
+ * Creates a File object representing
+ * tmpl_instance/config/upgrade/schema.ldif.current.
+ *
+ * @return File object representing
+ * tmpl_instance/config/upgrade/schema.ldif.current
+ * @throws ApplicationException if there was a problem determining the
+ * svn revision number
+ */
+ public File getTemplSchemaFile() throws ApplicationException {
+ return new File(getTmplInstanceDirectory().getAbsolutePath() +
+ File.separator + CONFIG_PATH_RELATIVE +
+ File.separator + UPGRADE_PATH,
"schema.ldif." + getSvnRev().toString());
}
/**
+ * Creates a File object representing
+ * tmpl_instance/config/upgrade/config.ldif.current.
+ *
+ * @return File object representing
+ * tmpl_instance/config/upgrade/config.ldif.current
+ * @throws ApplicationException if there was a problem determining the
+ * svn revision number
+ */
+ public File getTemplConfigFile() throws ApplicationException {
+ return new File(getTmplInstanceDirectory().getAbsolutePath() +
+ File.separator + CONFIG_PATH_RELATIVE +
+ File.separator + UPGRADE_PATH,
+ BASE_CONFIG_FILE_PREFIX + getSvnRev().toString());
+ }
+
+ /**
* Creates a File object representing config/upgrade/schema.ldif.current
* which the server creates the first time it starts if there are schema
* customizations.
@@ -656,7 +738,7 @@
*/
public File getBaseConfigurationFile() throws ApplicationException {
return new File(getConfigurationUpgradeDirectory(),
- BASE_CONFIG_FILE_PREFIX + getSvnRev().toString());
+ BASE_CONFIG_FILE_PREFIX + getInstanceSvnRev().toString());
}
/**
@@ -672,6 +754,18 @@
}
/**
+ * Gets the SVN revision number of the instance.
+ *
+ * @return Integer representing the svn number
+ * @throws ApplicationException if for some reason the number could not
+ * be determined
+ */
+ public Integer getInstanceSvnRev() throws ApplicationException {
+ BuildInformation bi = getInstanceBuildInformation();
+ return bi.getRevisionNumber();
+ }
+
+ /**
* Returns the path to the configuration file of the directory server. Note
* that this method assumes that this code is being run locally.
*
@@ -688,7 +782,7 @@
* @return the path of the ADS file of the directory server.
*/
public File getADSBackendFile() {
- return new File(getRootDirectory(), ADSContext.getAdminLDIFFile());
+ return new File(getTmplInstanceDirectory(), ADSContext.getAdminLDIFFile());
}
/**
@@ -737,6 +831,15 @@
}
/**
+ * Returns the path to the config files under the instance path.
+ *
+ * @return the path to the config files under the instance path.
+ */
+ public File getInstallConfigurationDirectory() {
+ return new File(getRootDirectory(), CONFIG_PATH_RELATIVE);
+ }
+
+ /**
* Returns the path to the log files under the install path.
*
* @return the path to the log files under the install path.
@@ -986,11 +1089,54 @@
}
/**
- * {@inheritDoc}
+ * Gets information about the build that was used to produce the
+ * instance.
+ * @return BuildInformation object describing this instance
*/
- @Override
- public String toString() {
- return Utils.getPath(rootDirectory);
+ public BuildInformation getInstanceBuildInformation() {
+ return getInstanceBuildInformation(true);
}
-}
+ /**
+ * Gets information about the build that was used to produce the
+ * instance.
+ * @param useCachedVersion where true indicates that a potentially cached
+ * version of the build information is acceptable for use; false indicates
+ * the build information will be created from scratch which is potentially
+ * time consuming
+ * @return BuildInformation object describing this instance
+ */
+ public BuildInformation
+ getInstanceBuildInformation(boolean useCachedVersion) {
+ if (instanceInformation == null || !useCachedVersion) {
+ try {
+ File bif = new File(getConfigurationDirectory(),
+ BUILDINFO_RELATIVE_PATH);
+
+ if (bif.exists()) {
+ BufferedReader reader = new BufferedReader(new FileReader(bif));
+
+ // Read the first line and close the file.
+ String line;
+ try {
+ line = reader.readLine();
+ instanceInformation = BuildInformation.fromBuildString(line);
+ } finally {
+ try {
+ reader.close();
+ } catch (Exception e) {
+ }
+ }
+ } else {
+ return getBuildInformation();
+ }
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, "error getting build information for " +
+ "current instance", e);
+ }
+ }
+ return instanceInformation;
+
+ }
+
+ }
diff --git a/opends/src/quicksetup/org/opends/quicksetup/configurator/CheckInstance.java b/opends/src/quicksetup/org/opends/quicksetup/configurator/CheckInstance.java
new file mode 100644
index 0000000..250ccd7
--- /dev/null
+++ b/opends/src/quicksetup/org/opends/quicksetup/configurator/CheckInstance.java
@@ -0,0 +1,238 @@
+/*
+ * 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 2006-2008 Sun Microsystems, Inc.
+ */
+package org.opends.quicksetup.configurator;
+
+import java.io.File;
+import java.io.IOException;
+import org.opends.quicksetup.ReturnCode;
+import org.opends.server.util.args.ArgumentException;
+import org.opends.server.util.args.ArgumentParser;
+import org.opends.server.util.args.StringArgument;
+import java.io.InputStreamReader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.opends.messages.Message;
+import org.opends.quicksetup.ApplicationException;
+import org.opends.quicksetup.Installation;
+import org.opends.server.util.args.BooleanArgument;
+import java.util.StringTokenizer;
+import org.opends.quicksetup.BuildInformation;
+import org.opends.quicksetup.QuickSetupLog;
+
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.server.tools.ToolConstants.*;
+import static org.opends.messages.QuickSetupMessages.*;
+
+/**
+ * This class is called by the configure command line to move the default
+ * Directory Server instance.
+ */
+public class CheckInstance {
+
+ static private final Logger LOG = Logger.getLogger(
+ CheckInstance.class.getName());
+
+ /** Prefix for log files. */
+ static public final String LOG_FILE_PREFIX = "opends-checkinstance-";
+
+ private static String installRootFromSystem;
+ private static String instanceRootFromSystem;
+ /**
+ * The user that launches this application.
+ */
+ public static final String CURRENT_USER_OPTION_LONG = "currentUser";
+ /**
+ * The value for the short option 'currentUser'.
+ */
+ public static final Character CURRENT_USER_OPTION_SHORT = null;
+ /**
+ * Should version be verified.
+ */
+ public static final String CHECK_VERSION_OPTION_LONG = "checkVersion";
+ /**
+ * The value for the short option 'checkVersion'.
+ */
+ public static final Character CHECK_VERSION_OPTION_SHORT = null;
+ private static StringArgument currentUserArg;
+ private static BooleanArgument checkVersionArg;
+ private static String currentUser;
+ private static String instanceOwner;
+ private static int SUCCESS = 0;
+ private static int ARGS_ERROR = 1;
+ private static int USER_ERROR = 2;
+ private static int VERSION_ERROR = 3;
+
+ /**
+ * The main method which is called by the configure command lines.
+ *
+ * @param args the arguments passed by the command line.
+ */
+ public static void main(String[] args) {
+
+ try {
+ QuickSetupLog.initLogFileHandler(
+ File.createTempFile(LOG_FILE_PREFIX,
+ QuickSetupLog.LOG_FILE_SUFFIX));
+ } catch (Throwable t) {
+ System.err.println(INFO_ERROR_INITIALIZING_LOG.get());
+ t.printStackTrace();
+ }
+
+ // Create the command-line argument parser for use with this program.
+ Message toolDescription = INFO_CHECK_DESCRIPTION.get();
+ ArgumentParser argParser =
+ new ArgumentParser(CheckInstance.class.getName(),
+ toolDescription, false);
+
+
+ installRootFromSystem = System.getProperty("INSTALL_ROOT");
+ if (installRootFromSystem == null) {
+ System.err.println("INSTALL_ROOT property not specified");
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ instanceRootFromSystem = System.getProperty("INSTANCE_ROOT");
+ if (instanceRootFromSystem == null) {
+ System.err.println("INSTANCE_ROOT property not specified");
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+ // Initialize all the command-line argument types and register them with the
+ // parser.
+ try {
+ currentUserArg = new StringArgument(CURRENT_USER_OPTION_LONG,
+ CURRENT_USER_OPTION_SHORT,
+ CURRENT_USER_OPTION_LONG,
+ true, true,
+ INFO_CURRENT_USER_PLACEHOLDER.get(),
+ INFO_CHECK_DESCRIPTION_CURRENT_USER.get());
+ argParser.addArgument(currentUserArg);
+ checkVersionArg = new BooleanArgument(CHECK_VERSION_OPTION_LONG,
+ CHECK_VERSION_OPTION_SHORT,
+ CHECK_VERSION_OPTION_LONG,
+ INFO_CHECK_DESCRIPTION_CHECK_VERSION.get());
+ argParser.addArgument(checkVersionArg);
+ } catch (ArgumentException ae) {
+ System.err.println(ae.getMessageObject());
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+
+ // Parse the command-line arguments provided to this program.
+ try {
+ argParser.parseArguments(args);
+ } catch (ArgumentException ae) {
+ System.err.println(ae.getMessageObject());
+ System.exit(ARGS_ERROR);
+ }
+
+ // Check user
+ Installation installation = new Installation(installRootFromSystem,
+ instanceRootFromSystem);
+ File conf = installation.getCurrentConfigurationFile();
+ String cmd = null;
+ Process proc = null;
+ int exit = 0;
+
+ InputStreamReader reader = null;
+ int c;
+ StringBuffer sb = new StringBuffer();
+ cmd = "ls -l " + conf.getAbsolutePath();
+ try {
+ proc = Runtime.getRuntime().exec(cmd);
+ proc.waitFor();
+ reader = new InputStreamReader(proc.getInputStream());
+ while (((c = reader.read()) != -1)) {
+ sb.append((char) c);
+ }
+ exit = proc.exitValue();
+ if (exit != 0) {
+ LOG.log(Level.FINEST, cmd + " error= " + exit);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ } catch (InterruptedException ex) {
+ LOG.log(Level.SEVERE, "InterruptedException" + ex.getMessage());
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, "IOException" + ex.getMessage() );
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+ LOG.log(Level.FINEST, cmd + " returns [" + sb.toString() + "]");
+ StringTokenizer tok = new StringTokenizer(sb.toString());
+ if (tok.hasMoreTokens()) {
+ // access rights
+ tok.nextToken();
+ if (tok.hasMoreTokens()) {
+ // inode
+ tok.nextToken();
+ if (tok.hasMoreTokens()) {
+ instanceOwner = tok.nextToken();
+ LOG.log(Level.FINEST, "instanceOwner=[" + instanceOwner + "]");
+ } else {
+ LOG.log(Level.SEVERE, "no instanceOwner");
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ } else {
+ LOG.log(Level.SEVERE, "no inode");
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ } else {
+ LOG.log(Level.SEVERE, "no access rights");
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+
+ currentUser = currentUserArg.getValue();
+ LOG.log(Level.FINEST, "currentUser=[" + currentUser + "]");
+
+ if ((currentUser != null) && !(currentUser.equals(instanceOwner))) {
+ System.err.println(ERR_CHECK_USER_ERROR.get(instanceOwner));
+ System.exit(USER_ERROR);
+ }
+
+
+ // Check version
+ if (checkVersionArg.isPresent()) {
+ try {
+ BuildInformation installBi = installation.getBuildInformation();
+ BuildInformation instanceBi = installation.
+ getInstanceBuildInformation();
+ if (!installBi.equals(instanceBi)) {
+ System.err.println(ERR_CHECK_VERSION_NOT_MATCH.get());
+ System.exit(VERSION_ERROR);
+ }
+ } catch (ApplicationException ae) {
+ System.err.println(ae.getMessageObject());
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ } else {
+ LOG.log(Level.FINEST, "checkVersion not specified");
+ }
+ System.exit(SUCCESS);
+
+ }
+}
diff --git a/opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java b/opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java
new file mode 100644
index 0000000..a20ebcc
--- /dev/null
+++ b/opends/src/quicksetup/org/opends/quicksetup/configurator/Configurator.java
@@ -0,0 +1,429 @@
+/*
+ * 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 2006-2008 Sun Microsystems, Inc.
+ */
+package org.opends.quicksetup.configurator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import org.opends.quicksetup.ReturnCode;
+import org.opends.server.util.args.ArgumentException;
+import org.opends.server.util.args.ArgumentParser;
+import org.opends.server.util.args.StringArgument;
+import java.io.InputStreamReader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.opends.messages.Message;
+import org.opends.quicksetup.ApplicationException;
+import org.opends.quicksetup.CliApplication;
+import org.opends.quicksetup.Installation;
+import org.opends.quicksetup.Launcher;
+import org.opends.quicksetup.util.Utils;
+import org.opends.server.util.ServerConstants;
+import org.opends.server.util.args.BooleanArgument;
+import org.opends.quicksetup.QuickSetupLog;
+
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.server.tools.ToolConstants.*;
+import static org.opends.messages.QuickSetupMessages.*;
+
+/**
+ * This class is called by the configure command line to move the default
+ * Directory Server instance.
+ */
+public class Configurator extends Launcher {
+
+ static private final Logger LOG = Logger.getLogger(
+ Configurator.class.getName());
+
+ /** Prefix for log files. */
+ static public final String LOG_FILE_PREFIX = "opends-configure-";
+
+ private String installRootFromSystem;
+
+ /**
+ * The path where to create the instance.
+ */
+ public static final String IPATH_OPTION_LONG = "instancePath";
+ /**
+ * The value for the short option 'instancePath'.
+ */
+ public static final Character IPATH_OPTION_SHORT = null;
+ /**
+ * The name of the owner of the instance.
+ */
+ public static final String USERNAME_OPTION_LONG = "userName";
+ /**
+ * The value for the short option 'userName'.
+ */
+ public static final Character USERNAME_OPTION_SHORT = null;
+ /**
+ * The group of the owner of the instance.
+ */
+ public static final String GROUPNAME_OPTION_LONG = "groupName";
+ /**
+ * The value for the short option 'groupName'.
+ */
+ public static final Character GROUPNAME_OPTION_SHORT = null;
+ private ArgumentParser argParser;
+ private StringArgument iPath;
+ private StringArgument username;
+ private StringArgument groupname;
+ private BooleanArgument showUsage;
+ private String user;
+ private String group;
+ private String ipath;
+
+ /**
+ * The main method which is called by the configure command lines.
+ *
+ * @param args the arguments passed by the command line.
+ */
+ public static void main(String[] args) {
+
+ try {
+ QuickSetupLog.initLogFileHandler(
+ File.createTempFile(LOG_FILE_PREFIX,
+ QuickSetupLog.LOG_FILE_SUFFIX));
+ } catch (Throwable t) {
+ System.err.println(INFO_ERROR_INITIALIZING_LOG.get());
+ t.printStackTrace();
+ }
+
+ try {
+ Configurator configurator;
+
+ configurator = new Configurator(args);
+ configurator.parseArgs(args);
+ configurator.configure();
+
+ } catch (ApplicationException ae) {
+ LOG.log(Level.SEVERE, "Error during config: " + ae.getMessageObject());
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ }
+
+ private void parseArgs(String[] args) {
+
+ String cmd = null;
+ Process proc = null;
+ int exit = 0;
+
+ try {
+ argParser.parseArguments(args);
+
+ if (argParser.usageOrVersionDisplayed()) {
+ System.exit(ReturnCode.PRINT_USAGE.getReturnCode());
+ }
+
+ /* Check instancePath */
+ if (iPath.hasValue()) {
+ ipath = iPath.getValue();
+ } else {
+ ipath = Installation.DEFAULT_INSTANCE_PATH;
+ }
+ File f = new File(ipath);
+ if (f.exists()) {
+ if (!f.isDirectory()) {
+ System.err.println(
+ ERR_CONFIGURE_NOT_DIRECTORY.get(ipath));
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ File[] l = f.listFiles();
+ if (l.length != 0) {
+ System.err.println(
+ ERR_CONFIGURE_DIRECTORY_NOT_EMPTY.get(ipath));
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ if (!f.canWrite()) {
+ System.err.println(
+ ERR_CONFIGURE_DIRECTORY_NOT_WRITABLE.get(ipath));
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+ } else {
+ File parent = f;
+
+ while ((parent != null) && !parent.exists()) {
+ parent = parent.getParentFile();
+ }
+ if (parent != null) {
+ /* Checks f is writable */
+ if (!parent.canWrite()) {
+ System.err.println(
+ ERR_CONFIGURE_DIRECTORY_NOT_WRITABLE.get(parent.getName()));
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ }
+ /* Create subdirs */
+ f.mkdirs();
+ }
+
+ /* Check userName/groupName by creating a temporary file and try to
+ * set the owner
+ */
+ File temp = File.createTempFile(Configurator.class.getName(), null);
+ if (username.hasValue()) {
+ user = username.getValue();
+ if (! Character.isLetter(user.charAt(0))) {
+ System.err.println(ERR_CONFIGURE_BAD_USER_NAME.get(user));
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ cmd = "id " + user;
+ proc = Runtime.getRuntime().exec(cmd);
+ proc.waitFor();
+ exit = proc.exitValue();
+ if (exit != 0) {
+ LOG.log(Level.SEVERE, "[" + cmd + "] returns " + exit);
+ System.err.println(ERR_CONFIGURE_USER_NOT_EXIST.get(user));
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ } else {
+ user = "opendsd";
+ cmd = "id " + user;
+ proc = Runtime.getRuntime().exec(cmd);
+ proc.waitFor();
+ exit = proc.exitValue();
+ if (exit != 0) {
+ LOG.log(Level.SEVERE, "[" + cmd + "] returns " + exit);
+ System.err.println(ERR_CONFIGURE_OPENDSD_NOT_EXIST.get());
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ }
+
+ if (!groupname.hasValue()) {
+ InputStreamReader reader = null;
+ int c;
+ StringBuffer sb = new StringBuffer();
+ cmd = "groups " + user;
+ proc = Runtime.getRuntime().exec(cmd);
+ proc.waitFor();
+ reader = new InputStreamReader(proc.getInputStream());
+ while (((c = reader.read()) != -1) && (c != ' ')) {
+ sb.append((char) c);
+ }
+ exit = proc.exitValue();
+ if (exit != 0) {
+ LOG.log(Level.SEVERE, "[" + cmd + "] returns " + exit);
+ System.err.println(ERR_CONFIGURE_GET_GROUP_ERROR.get(user, user));
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ group = sb.toString();
+ } else {
+ group = groupname.getValue();
+ }
+
+ cmd = "chown " + user + ":" + group + " " + temp.getPath();
+ proc = Runtime.getRuntime().exec(cmd);
+ proc.waitFor();
+ exit = proc.exitValue();
+ if (exit != 0) {
+ LOG.log(Level.SEVERE, "[" + cmd + "] returns " + exit);
+ System.err.println(ERR_CONFIGURE_CHMOD_ERROR.get(user, group,
+ user, group));
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ temp.delete();
+
+ } catch (InterruptedException ex) {
+ System.err.println(ex.getLocalizedMessage());
+ printUsage(false);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ } catch (IOException ex) {
+ System.err.println(ex.getLocalizedMessage());
+ printUsage(false);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ } catch (ArgumentException ae) {
+ System.err.println(ae.getMessageObject());
+ printUsage(false);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+ }
+
+ private void configure() throws ApplicationException {
+ File templ_dir = new File(installRootFromSystem + "/" +
+ Installation.TMPL_INSTANCE_RELATIVE_PATH);
+
+ String cmd = null;
+ Process proc = null;
+ int exit = 0;
+ try {
+ /* Copy template instance */
+ File[] l = templ_dir.listFiles();
+ for (int i = 0; i < l.length; i++) {
+ File subf = l[i];
+
+ if (subf.isDirectory()) {
+ cmd = "cp -R " + l[i].getAbsolutePath() + " " + ipath;
+ } else {
+ cmd = "cp " + l[i].getAbsolutePath() + " " + ipath;
+ }
+ proc = Runtime.getRuntime().exec(cmd);
+ proc.waitFor();
+ exit = proc.exitValue();
+ if (exit != 0) {
+ LOG.log(Level.SEVERE, "[" + cmd + "] returns " + exit);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ }
+
+ /* Change owner */
+ cmd = "chown -R " + user + ":" + group + " " + ipath;
+ proc = Runtime.getRuntime().exec(cmd);
+ proc.waitFor();
+ exit = proc.exitValue();
+ if (exit != 0) {
+ LOG.log(Level.SEVERE, "[" + cmd + "] returns " + exit);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+ /* Create instance.loc */
+ File iloc = new File(Installation.INSTANCE_LOCATION_PATH);
+ iloc.getParentFile().mkdirs();
+ iloc.createNewFile();
+ FileWriter instanceLoc = new FileWriter(iloc);
+ instanceLoc.write(ipath);
+ instanceLoc.close();
+
+ } catch (IOException ex) {
+ System.err.println(ex.getLocalizedMessage());
+ printUsage(false);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ } catch (InterruptedException ex) {
+ System.err.println(ex.getLocalizedMessage());
+ printUsage(false);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+ }
+
+ private Configurator(String[] args) {
+ super(args);
+
+ String scriptName = "configure";
+
+ if (Utils.isWindows()) {
+ System.err.println("Not supported platform: Windows");
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ } else {
+ scriptName = Installation.UNIX_CONFIGURE_FILE_NAME;
+ }
+ if (System.getProperty(ServerConstants.PROPERTY_SCRIPT_NAME) == null) {
+ System.setProperty(ServerConstants.PROPERTY_SCRIPT_NAME, scriptName);
+ }
+
+ installRootFromSystem = System.getProperty("INSTALL_ROOT");
+
+ if (installRootFromSystem == null) {
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+
+ argParser = new ArgumentParser(getClass().getName(),
+ INFO_CONFIGURE_USAGE_DESCRIPTION.get(), false);
+
+
+ try {
+ iPath = new StringArgument(
+ IPATH_OPTION_LONG,
+ IPATH_OPTION_SHORT,
+ IPATH_OPTION_LONG,
+ false, true,
+ INFO_IPATH_PLACEHOLDER.get(),
+ INFO_CONFIGURE_DESCRIPTION_IPATH.get());
+ argParser.addArgument(iPath);
+
+ username =
+ new StringArgument(
+ USERNAME_OPTION_LONG,
+ USERNAME_OPTION_SHORT,
+ USERNAME_OPTION_LONG,
+ false, true,
+ INFO_USER_NAME_PLACEHOLDER.get(),
+ INFO_CONFIGURE_DESCRIPTION_USERNAME.get());
+ argParser.addArgument(username);
+
+ groupname =
+ new StringArgument(
+ GROUPNAME_OPTION_LONG,
+ GROUPNAME_OPTION_SHORT,
+ GROUPNAME_OPTION_LONG,
+ false, true,
+ INFO_GROUPNAME_PLACEHOLDER.get(),
+ INFO_CONFIGURE_DESCRIPTION_GROUPNAME.get());
+ argParser.addArgument(groupname);
+
+ showUsage = new BooleanArgument(
+ "showusage",
+ OPTION_SHORT_HELP,
+ OPTION_LONG_HELP,
+ INFO_DESCRIPTION_USAGE.get());
+ argParser.addArgument(showUsage);
+ argParser.setUsageArgument(showUsage);
+
+ } catch (ArgumentException ae) {
+ System.err.println(ae.getMessageObject());
+ printUsage(false);
+ System.exit(ReturnCode.APPLICATION_ERROR.getReturnCode());
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected void willLaunchGui() {
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected void guiLaunchFailed(String logFilePath) {
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected CliApplication createCliApplication() {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Message getFrameTitle() {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ArgumentParser getArgumentParser() {
+ return argParser;
+ }
+}
+
diff --git a/opends/src/quicksetup/org/opends/quicksetup/configurator/package-info.java b/opends/src/quicksetup/org/opends/quicksetup/configurator/package-info.java
new file mode 100644
index 0000000..9483889
--- /dev/null
+++ b/opends/src/quicksetup/org/opends/quicksetup/configurator/package-info.java
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+
+/**
+ * Defines the specific classes that are used by the configurator.
+ */
+package org.opends.quicksetup.configurator;
diff --git a/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java b/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
index a055d8a..ec3a9a6 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
@@ -806,7 +806,8 @@
writer.close();
}
String destinationFile;
- String libDir = Utils.getPath(installPath,
+ String libDir = Utils.getPath(Utils.
+ getInstancePathFromClasspath(installPath),
Installation.LIBRARIES_PATH_RELATIVE);
if (Utils.isWindows())
{
diff --git a/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeSvr4Launcher.java b/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeSvr4Launcher.java
new file mode 100644
index 0000000..2eb2c5b
--- /dev/null
+++ b/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeSvr4Launcher.java
@@ -0,0 +1,196 @@
+/*
+ * 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 2007-2008 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup.upgrader;
+
+import static org.opends.messages.QuickSetupMessages.*;
+
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.server.tools.ToolConstants.*;
+
+import org.opends.quicksetup.CliApplication;
+import org.opends.quicksetup.Installation;
+import org.opends.quicksetup.QuickSetupLog;
+import org.opends.quicksetup.ReturnCode;
+
+import org.opends.quicksetup.util.Utils;
+import org.opends.server.util.ServerConstants;
+import org.opends.server.util.args.ArgumentParser;
+import org.opends.server.util.args.BooleanArgument;
+import org.opends.server.util.args.ArgumentException;
+import org.opends.server.util.args.StringArgument;
+
+import java.util.logging.Logger;
+import java.io.File;
+
+/**
+ * This class is called by the upgrade and upgrade.bat
+ * command line utilities to launch an upgrade process.
+ */
+public class UpgradeSvr4Launcher extends UpgradeLauncher {
+
+ static private final Logger LOG =
+ Logger.getLogger(UpgradeSvr4Launcher.class.getName());
+
+ /**
+ * The main method which is called by the setup command lines.
+ *
+ * @param args the arguments passed by the command lines.
+ */
+ public static void main(String[] args) {
+ try {
+ QuickSetupLog.initLogFileHandler(
+ File.createTempFile(LOG_FILE_PREFIX,
+ QuickSetupLog.LOG_FILE_SUFFIX));
+ } catch (Throwable t) {
+ System.err.println(INFO_ERROR_INITIALIZING_LOG.get());
+ t.printStackTrace();
+ }
+ new UpgradeSvr4Launcher(args).launch();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected CliApplication createCliApplication() {
+ return new UpgraderSvr4();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void willLaunchGui() {
+ System.out.println(INFO_UPGRADE_LAUNCHER_LAUNCHING_GUI.get());
+ System.setProperty("org.opends.quicksetup.Application.class",
+ "org.opends.quicksetup.upgrader.UpgraderSvr4");
+ }
+
+ private ArgumentParser argParser;
+
+ private BooleanArgument showUsage;
+ private BooleanArgument quiet;
+ private BooleanArgument noPrompt;
+ private BooleanArgument verbose;
+ private BooleanArgument revertMostRecent;
+ private StringArgument reversionArchive;
+
+
+ /**
+ * Creates an instance.
+ *
+ * @param args specified on command line
+ */
+ protected UpgradeSvr4Launcher(String[] args) {
+ super(args);
+
+ String scriptName;
+ if (Utils.isWindows()) {
+ scriptName = Installation.WINDOWS_UPGRADE_FILE_NAME;
+ } else {
+ scriptName = Installation.UNIX_UPGRADE_FILE_NAME;
+ }
+ if (System.getProperty(ServerConstants.PROPERTY_SCRIPT_NAME) == null)
+ {
+ System.setProperty(ServerConstants.PROPERTY_SCRIPT_NAME, scriptName);
+ }
+
+ argParser = new ArgumentParser(getClass().getName(),
+ INFO_UPGRADE_LAUNCHER_USAGE_DESCRIPTION.get(), false);
+ try
+ {
+ revertMostRecent = new BooleanArgument(
+ REVERT_MOST_RECENT_OPTION_LONG,
+ REVERT_MOST_RECENT_OPTION_SHORT,
+ REVERT_MOST_RECENT_OPTION_LONG,
+ INFO_REVERT_DESCRIPTION_RECENT.get());
+ argParser.addArgument(revertMostRecent);
+
+ reversionArchive = new StringArgument(
+ REVERT_ARCHIVE_OPTION_LONG,
+ REVERT_ARCHIVE_OPTION_SHORT,
+ REVERT_ARCHIVE_OPTION_LONG,
+ false, false, true,
+ INFO_DIRECTORY_PLACEHOLDER.get(),
+ null, null, INFO_REVERT_DESCRIPTION_DIRECTORY.get());
+ argParser.addArgument(reversionArchive);
+
+ noPrompt = new BooleanArgument(
+ OPTION_LONG_NO_PROMPT,
+ OPTION_SHORT_NO_PROMPT,
+ OPTION_LONG_NO_PROMPT,
+ INFO_UPGRADE_DESCRIPTION_NO_PROMPT.get());
+ argParser.addArgument(noPrompt);
+
+ quiet = new BooleanArgument(
+ OPTION_LONG_QUIET,
+ OPTION_SHORT_QUIET,
+ OPTION_LONG_QUIET,
+ INFO_UPGRADE_DESCRIPTION_SILENT.get());
+ argParser.addArgument(quiet);
+
+ verbose = new BooleanArgument(OPTION_LONG_VERBOSE, OPTION_SHORT_VERBOSE,
+ OPTION_LONG_VERBOSE, INFO_DESCRIPTION_VERBOSE.get());
+ argParser.addArgument(verbose);
+
+ showUsage = new BooleanArgument(
+ "showusage",
+ OPTION_SHORT_HELP,
+ OPTION_LONG_HELP,
+ INFO_DESCRIPTION_USAGE.get());
+ argParser.addArgument(showUsage);
+ argParser.setUsageArgument(showUsage);
+
+ try {
+ argParser.parseArguments(args);
+
+ // Set fields indicating reversion or upgrade. This may change
+ // later if interaction is required to make the determination.
+ isReversion =
+ reversionArchive.isPresent() || revertMostRecent.isPresent();
+ isUpgrade = !isReversion;
+
+ if (argParser.usageOrVersionDisplayed()) {
+ System.exit(ReturnCode.PRINT_USAGE.getReturnCode());
+ }
+ } catch (ArgumentException ae) {
+ System.err.println(ae.getMessageObject());
+ printUsage(false);
+ System.exit(ReturnCode.
+ APPLICATION_ERROR.getReturnCode());
+ }
+ }
+ catch (Throwable t)
+ {
+ System.out.println("ERROR: "+t);
+ t.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java b/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
index f3c4bbd..1a45d5b 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
@@ -72,11 +72,9 @@
import org.opends.server.tools.JavaPropertiesTool;
import java.awt.event.WindowEvent;
-import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
-import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
@@ -154,6 +152,7 @@
"bin",
"lib",
"bat",
+ "config" + File.separator + "schema",
"setup",
"setup.bat",
"uninstall",
@@ -203,7 +202,12 @@
/**
* Information on the current build.
*/
- private BuildInformation currentVersion = null;
+ protected BuildInformation currentVersion = null;
+
+ /**
+ * Information on the current instance.
+ */
+ protected BuildInformation currentInstanceVersion = null;
/**
* Information on the staged build.
@@ -211,6 +215,11 @@
private BuildInformation stagedVersion = null;
/**
+ * Information on the staged instance.
+ */
+ private BuildInformation stagedInstanceVersion = null;
+
+ /**
* New OpenDS bits.
*/
private Installation stagedInstallation = null;
@@ -390,50 +399,7 @@
return null;
}
- String instancePathFileName = installPath + File.separator + "instance.loc";
-
- // look for <installPath>/instance.loc
- File f = new File(instancePathFileName);
- if (!f.exists())
- {
- return installPath;
- }
-
- BufferedReader reader;
- try
- {
- reader = new BufferedReader(new FileReader(instancePathFileName));
- } catch (Exception e)
- {
- return installPath;
- }
-
- // Read the first line and close the file.
- String line;
- try
- {
- line = reader.readLine();
- File instanceLoc = new File(line);
- if (instanceLoc.isAbsolute())
- {
- return instanceLoc.getAbsolutePath();
- } else
- {
- return new File(installPath + File.separator
- + line).getAbsolutePath();
- }
- } catch (Exception e)
- {
- return installPath;
- } finally
- {
- try
- {
- reader.close();
- } catch (Exception e)
- {
- }
- }
+ return Utils.getInstancePathFromClasspath(installPath);
}
/**
@@ -898,6 +864,7 @@
UpgradeProgressStep.UPGRADING_COMPONENTS);
upgradeComponents();
updateConfigDirectory();
+ updateExtensionsDirectory();
notifyListeners(getFormattedDoneWithLineBreak());
LOG.log(Level.INFO, "component upgrade finished");
} catch (ApplicationException e) {
@@ -1515,14 +1482,25 @@
}
- private Stage getStage() throws IOException, ApplicationException {
+ /**
+ * Returns the directory used to stage files for upgrade or reversion.
+ * @return the directory used to stage files for upgrade or reversion
+ * @throws IOException if errors occurs while accessing stage files
+ * @throws org.opends.quicksetup.ApplicationException
+ * if retrieval of stage files path fails
+ */
+ protected Stage getStage() throws IOException, ApplicationException {
if (this.stage == null) {
this.stage = new Stage(getStageDirectory());
}
return this.stage;
}
- private void upgradeComponents() throws ApplicationException {
+ /**
+ * Upgrade components.
+ * @throws ApplicationException if upgrade fails
+ */
+ protected void upgradeComponents() throws ApplicationException {
try {
Stage stage = getStage();
Installation installation = getInstallation();
@@ -1530,19 +1508,19 @@
if (instanceAndInstallInSameDir())
{
- stage.move(root, new UpgradeFileFilter(getStageDirectory()));
+ stage.move(root, new UpgradeFileFilter(getStageDirectory()));
}
else
{
- stage.move(root, new UpgradeFileFilter(getStageDirectory(),true));
-
+ stage.move(root, new UpgradeFileFilter(getStageDirectory(),true));
root = installation.getInstanceDirectory();
stage.move(root, new UpgradeFileFilter(getStageDirectory(),false));
}
// Check if instance.loc exits
File instanceFile = new File
- (installation.getRootDirectory(), "instance.loc");
+ (installation.getRootDirectory(),
+ Installation.INSTANCE_LOCATION_PATH_RELATIVE);
if (! instanceFile.exists())
{
BufferedWriter instanceLoc =
@@ -1569,28 +1547,77 @@
{
// The config directory may contain files that are needed
// by the new installation (e.g. SSL config files and tasks)
- File oldConfigDir =
+ File oldInstallConfigDir =
+ new File(getFilesInstallBackupDirectory(),
+ Installation.CONFIG_PATH_RELATIVE);
+ File oldInstanceConfigDir =
new File(getFilesInstanceBackupDirectory(),
Installation.CONFIG_PATH_RELATIVE);
- File newConfigDir =
- getInstallation().getConfigurationDirectory();
+ File newInstallConfigDir =
+ getInstallation().getInstallConfigurationDirectory();
+ File newInstanceConfigDir =
+ getInstallation().getConfigurationDirectory();
FileManager fm = new FileManager();
// Define a filter for files that we don't want to copy over
// from the old config directory.
- final File oldConfigUpgradeDir = new File(oldConfigDir, "upgrade");
- final File oldConfigSchemaDir = new File(oldConfigDir, "schema");
- FileFilter filter = new FileFilter() {
- public boolean accept(File f) {
- return !Utils.isDescendant(f, oldConfigUpgradeDir) &&
- !Utils.isDescendant(f, oldConfigSchemaDir);
- }
- };
+ {
+ final File oldConfigUpgradeDir = new File(oldInstallConfigDir, "upgrade");
+ final File oldConfigSchemaDir = new File(oldInstallConfigDir, "schema");
+ FileFilter filter = new FileFilter()
+ {
+ public boolean accept(File f)
+ {
+ return !Utils.isDescendant(f, oldConfigUpgradeDir)
+ && !Utils.isDescendant(f, oldConfigSchemaDir);
+ }
+ };
- fm.synchronize(oldConfigDir, newConfigDir, filter);
+ fm.synchronize(oldInstallConfigDir, newInstallConfigDir, filter);
+ }
+
+ {
+ final File oldConfigUpgradeDir =
+ new File(oldInstanceConfigDir, "upgrade");
+ FileFilter filter = new FileFilter()
+ {
+ public boolean accept(File f)
+ {
+ return !Utils.isDescendant(f, oldConfigUpgradeDir);
+ }
+ };
+
+ fm.synchronize(oldInstanceConfigDir, newInstanceConfigDir, filter);
+ }
}
- private void backupFilesystem() throws ApplicationException {
+ private void updateExtensionsDirectory()
+ throws IOException,ApplicationException
+ {
+ // Get extensions back
+ File savedDir =
+ new File(getFilesInstanceBackupDirectory(),
+ Installation.LIBRARIES_PATH_RELATIVE);
+ File destDir = getInstallation().getInstanceDirectory();
+
+ FileManager fm = new FileManager();
+ fm.copyRecursively(savedDir, destDir);
+
+ // Get classes back
+ savedDir =
+ new File(getFilesInstanceBackupDirectory(),
+ Installation.CLASSES_PATH_RELATIVE);
+ destDir = getInstallation().getInstanceDirectory();
+
+ fm.copyRecursively(savedDir, destDir);
+
+ }
+
+ /**
+ * Backup files to be able to revert if upgrdae fails.
+ * @throws ApplicationException if backup fails
+ */
+ protected void backupFilesystem() throws ApplicationException {
try {
// Backup first install (potentially everything if install and instance
// are in the same dir
@@ -1693,7 +1720,12 @@
}
}
- private void cleanup() throws ApplicationException {
+ /**
+ * Cleanup to done executed once upgrade is done.
+ * @throws org.opends.quicksetup.ApplicationException
+ * if cleanup fails
+ */
+ protected void cleanup() throws ApplicationException {
deleteStagingDirectory();
}
@@ -1719,15 +1751,19 @@
}
}
- private void initialize() throws ApplicationException {
+ /**
+ * Implements the initialization phase of the upgrade.
+ * @throws ApplicationException if upgrade is not possible
+ */
+ protected void initialize() throws ApplicationException {
try {
- BuildInformation fromVersion = getCurrentBuildInformation();
+ BuildInformation fromVersion = getCurrentInstanceBuildInformation();
BuildInformation toVersion = getStagedBuildInformation();
if (fromVersion.equals(toVersion))
{
throw new ApplicationException(ReturnCode.APPLICATION_ERROR,
INFO_UPGRADE_ORACLE_SAME_VERSION.get(
- fromVersion.toString()), null);
+ toVersion.toString()), null);
}
if (getInstallation().getStatus().isServerRunning()) {
new ServerController(getInstallation()).stopServer(true);
@@ -1755,16 +1791,8 @@
* cannot be insured.
*/
private void insureUpgradability() throws ApplicationException {
- BuildInformation currentVersion;
BuildInformation newVersion;
- try {
- currentVersion = getInstallation().getBuildInformation();
- } catch (ApplicationException e) {
- LOG.log(Level.INFO, "error getting build information for " +
- "current installation", e);
- throw ApplicationException.createFileSystemException(
- INFO_ERROR_DETERMINING_CURRENT_BUILD.get(), e);
- }
+ currentVersion = getCurrentInstanceBuildInformation();
try {
newVersion = getStagedInstallation().getBuildInformation();
@@ -1789,7 +1817,15 @@
}
}
- private Installation getStagedInstallation()
+ /**
+ * Returns the path of the new OpenDS bits.
+ * @return the path of the new OpenDS bits.
+ * @throws java.io.IOException if an error occurs while accessing the
+ * new bits
+ * @throws org.opends.quicksetup.ApplicationException if upgradability
+ * cannot be insured.
+ */
+ protected Installation getStagedInstallation()
throws IOException, ApplicationException {
if (stagedInstallation == null) {
File stageDir = getStageDirectory();
@@ -1913,7 +1949,14 @@
return txt;
}
- private File getStageDirectory()
+ /**
+ * Returns the path of the new OpenDS bits.
+ * @return the path of the new OpenDS bits.
+ * @throws org.opends.quicksetup.ApplicationException
+ * if retrieval of stage files path fails
+ * @throws java.io.IOException if errors occurs while accessing stage files
+ */
+ protected File getStageDirectory()
throws ApplicationException, IOException {
return getInstallation().getTemporaryUpgradeDirectory();
}
@@ -1930,7 +1973,12 @@
return installDir.getAbsolutePath().equals(instanceDir.getAbsolutePath());
}
- private File getFilesInstanceBackupDirectory() throws IOException
+ /**
+ * Returns the path where to backup instance files.
+ * @return the path where to backup instance files.
+ * @throws java.io.IOException if retrieval of backup files fails
+ */
+ protected File getFilesInstanceBackupDirectory() throws IOException
{
if (instanceAndInstallInSameDir())
{
@@ -1995,6 +2043,10 @@
return backupDirectory;
}
+ /**
+ * Returns the BuildInformation of the current OpenDS bits.
+ * @return the BuildInformation of the current OpenDS bits.
+ */
private BuildInformation getCurrentBuildInformation() {
if (this.currentVersion == null) {
try {
@@ -2006,10 +2058,23 @@
return currentVersion;
}
+ /**
+ * Returns the BuildInformation of the OpenDS instance.
+ * @return the BuildInformation of the OpenDS instance.
+ */
+ private BuildInformation getCurrentInstanceBuildInformation() {
+ if (this.currentInstanceVersion == null) {
+ currentInstanceVersion = getInstallation().getInstanceBuildInformation();
+ }
+
+ return currentInstanceVersion;
+ }
+
+
private BuildInformation getStagedBuildInformation() {
if (stagedVersion == null) {
try {
- stagedVersion = getStagedInstallation().getBuildInformation();
+ stagedVersion = getStagedInstallation().getBuildInformation();
} catch (Exception e) {
LOG.log(Level.INFO, "error getting build info for staged installation",
e);
@@ -2018,4 +2083,4 @@
return stagedVersion;
}
-}
+ }
diff --git a/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderSvr4.java b/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderSvr4.java
new file mode 100644
index 0000000..8679632
--- /dev/null
+++ b/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderSvr4.java
@@ -0,0 +1,138 @@
+/*
+ * 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 2007-2008 Sun Microsystems, Inc.
+ */
+package org.opends.quicksetup.upgrader;
+
+import static org.opends.messages.QuickSetupMessages.*;
+
+
+import org.opends.quicksetup.ApplicationException;
+
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.opends.quicksetup.Installation;
+import org.opends.quicksetup.Launcher;
+import org.opends.quicksetup.UserData;
+import org.opends.quicksetup.UserDataException;
+import org.opends.quicksetup.util.FileManager;
+import java.io.FileFilter;
+import org.opends.quicksetup.ReturnCode;
+
+/**
+ * QuickSetup application of upgrading the bits of an SVR4 based installation
+ * of OpenDS.
+ */
+public class UpgraderSvr4 extends Upgrader {
+
+ static private final Logger LOG = Logger.getLogger(
+ UpgraderSvr4.class.getName());
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public UserData createUserData(Launcher launcher)
+ throws UserDataException {
+ return new UpgraderCliHelper((UpgradeSvr4Launcher) launcher).
+ createUserData(launcher.getArguments());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected File getStageDirectory()
+ throws ApplicationException, IOException {
+ return getInstallation().getTmplInstanceDirectory();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected Installation getStagedInstallation()
+ throws IOException, ApplicationException {
+ /* New bits have replaced old */
+ return getInstallation();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void cleanup() throws ApplicationException {
+ return;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void backupFilesystem() throws ApplicationException {
+ try {
+ FileManager fm = new FileManager();
+ File filesBackupDirectory = getFilesInstanceBackupDirectory();
+ File root = getInstallation().getInstanceDirectory();
+ FileFilter filter = new UpgradeFileFilter(root, false);
+ for (String fileName : root.list()) {
+ File f = new File(root, fileName);
+ fm.move(f, filesBackupDirectory, filter);
+ }
+ } catch (ApplicationException ae) {
+ throw ae;
+ } catch (Exception e) {
+ throw new ApplicationException(
+ ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
+ INFO_ERROR_BACKUP_FILESYSTEM.get(),
+ e);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void upgradeComponents() throws ApplicationException {
+ try {
+ /* Only instance data have to be upgraded */
+ Stage stage = getStage();
+ Installation installation = getInstallation();
+ File root = installation.getInstanceDirectory();
+ stage.move(root, new UpgradeFileFilter(getStageDirectory(), false));
+
+ LOG.log(Level.INFO, "upgraded bits to " +
+ installation.getBuildInformation(false));
+
+ } catch (IOException e) {
+ throw ApplicationException.createFileSystemException(
+ INFO_ERROR_UPGRADING_COMPONENTS.get(), e);
+ }
+ }
+}
diff --git a/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java b/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
index 8f007fc..dfea9b8 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
@@ -1174,13 +1174,20 @@
*/
public static String getInstancePathFromClasspath(String installPath)
{
- String instancePathFileName = installPath + File.separator + "instance.loc";
+ String instancePathFileName = Installation.INSTANCE_LOCATION_PATH;
+ File configureScriptPath = new File(installPath + File.separator +
+ Installation.UNIX_CONFIGURE_FILE_NAME);
- // look for <installPath>/instance.loc
+ // look for /etc/opt/opends/instance.loc
File f = new File(instancePathFileName);
- if (! f.exists())
- {
- return installPath;
+ if (!configureScriptPath.exists() || !f.exists()) {
+ // look for <installPath>/instance.loc
+ instancePathFileName = installPath + File.separator +
+ Installation.INSTANCE_LOCATION_PATH_RELATIVE;
+ f = new File(instancePathFileName);
+ if (!f.exists()) {
+ return installPath;
+ }
}
BufferedReader reader;
diff --git a/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java b/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java
index dd640cf..99cb790 100644
--- a/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java
+++ b/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java
@@ -315,7 +315,18 @@
// Put extensions jars into the class loader and load all
// configuration definition classes in that they contain.
- initializeAllExtensions();
+ // First load the extension from the install directory, then
+ // from the instance directory.
+ File libDir ;
+ File extensionsPath ;
+
+ libDir = new File(DirectoryServer.getServerRoot(),LIB_DIR);
+ extensionsPath = new File(libDir, EXTENSIONS_DIR);
+ initializeAllExtensions(extensionsPath);
+
+ libDir = new File(DirectoryServer.getInstanceRoot(),LIB_DIR);
+ extensionsPath = new File(libDir, EXTENSIONS_DIR);
+ initializeAllExtensions(extensionsPath);
}
@@ -508,6 +519,7 @@
/**
* Put extensions jars into the class loader and load all
* configuration definition classes in that they contain.
+ * @param extensionsPath Indicates where extensions are located.
*
* @throws InitializationException
* If the extensions folder could not be accessed or if a
@@ -515,10 +527,8 @@
* the configuration definition classes could not be
* initialized.
*/
- private void initializeAllExtensions()
+ private void initializeAllExtensions(File extensionsPath)
throws InitializationException {
- File libPath = new File(DirectoryServer.getInstanceRoot(), LIB_DIR);
- File extensionsPath = new File(libPath, EXTENSIONS_DIR);
try {
if (!extensionsPath.exists()) {
diff --git a/opends/src/server/org/opends/server/backends/SchemaBackend.java b/opends/src/server/org/opends/server/backends/SchemaBackend.java
index c3613fd..f52d42f 100644
--- a/opends/src/server/org/opends/server/backends/SchemaBackend.java
+++ b/opends/src/server/org/opends/server/backends/SchemaBackend.java
@@ -3612,13 +3612,23 @@
ArrayList<File> tempFileList = new ArrayList<File>();
ArrayList<File> origFileList = new ArrayList<File>();
- File schemaDir = new File(SchemaConfigManager.getSchemaDirectoryPath());
+ File schemaInstallDir =
+ new File(SchemaConfigManager.getSchemaDirectoryPath(false));
+ File schemaInstanceDir =
+ new File(SchemaConfigManager.getSchemaDirectoryPath(true));
for (String name : tempSchemaFiles.keySet())
{
- installedFileList.add(new File(schemaDir, name));
+ File installFile = new File(schemaInstallDir, name);
+ if (installFile.exists())
+ {
+ installedFileList.add(installFile);
+ } else
+ {
+ installedFileList.add(new File(schemaInstanceDir, name));
+ }
tempFileList.add(tempSchemaFiles.get(name));
- origFileList.add(new File(schemaDir, name + ".orig"));
+ origFileList.add(new File(schemaInstanceDir, name + ".orig"));
}
@@ -4643,12 +4653,15 @@
// Get the path to the directory in which the schema files reside and
// then get a list of all the files in that directory.
- String schemaDirPath = SchemaConfigManager.getSchemaDirectoryPath();
- File[] schemaFiles;
+ String schemaInstallDirPath =
+ SchemaConfigManager.getSchemaDirectoryPath(false);
+ String schemaInstanceDirPath =
+ SchemaConfigManager.getSchemaDirectoryPath(true);
+ File[][] schemaFiles = new File[2][];
try
{
- File schemaDir = new File(schemaDirPath);
- schemaFiles = schemaDir.listFiles();
+ File schemaDir = new File(schemaInstallDirPath);
+ schemaFiles[0] = schemaDir.listFiles();
}
catch (Exception e)
{
@@ -4658,100 +4671,114 @@
}
message = ERR_SCHEMA_BACKUP_CANNOT_LIST_SCHEMA_FILES.get(
- schemaDirPath, getExceptionMessage(e));
+ schemaInstallDirPath, getExceptionMessage(e));
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
message, e);
}
+ try
+ {
+ File schemaDir = new File(schemaInstanceDirPath);
+ schemaFiles[1] = schemaDir.listFiles();
+ }
+ catch (Exception e)
+ {
+ schemaFiles[1] = new File[0] ;
+ }
// Iterate through the schema files and write them to the zip stream. If
// we're using a hash or MAC, then calculate that as well.
byte[] buffer = new byte[8192];
- for (File schemaFile : schemaFiles)
+ String parent = ".install";
+ for (int i=0 ; i < 2 ; i++)
{
- if (backupConfig.isCancelled())
+ for (File schemaFile : schemaFiles[i])
{
- break;
- }
-
- if (! schemaFile.isFile())
- {
- // If there are any non-file items in the directory (e.g., one or more
- // subdirectories), then we'll skip them.
- continue;
- }
-
- String baseName = schemaFile.getName();
-
-
- // We'll put the name in the hash, too.
- if (hash)
- {
- if (signHash)
+ if (backupConfig.isCancelled())
{
- mac.update(getBytes(baseName));
+ break;
}
- else
+
+ if (!schemaFile.isFile())
{
- digest.update(getBytes(baseName));
+ // If there are any non-file items in the directory (e.g., one or more
+ // subdirectories), then we'll skip them.
+ continue;
}
- }
- InputStream inputStream = null;
- try
- {
- ZipEntry zipEntry = new ZipEntry(baseName);
- zipStream.putNextEntry(zipEntry);
+ String baseName = schemaFile.getName();
- inputStream = new FileInputStream(schemaFile);
- while (true)
+ // We'll put the name in the hash, too.
+ if (hash)
{
- int bytesRead = inputStream.read(buffer);
- if (bytesRead < 0 || backupConfig.isCancelled())
+ if (signHash)
{
- break;
- }
-
- if (hash)
+ mac.update(getBytes(baseName));
+ } else
{
- if (signHash)
- {
- mac.update(buffer, 0, bytesRead);
- }
- else
- {
- digest.update(buffer, 0, bytesRead);
- }
+ digest.update(getBytes(baseName));
}
-
- zipStream.write(buffer, 0, bytesRead);
}
- zipStream.closeEntry();
- inputStream.close();
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
+ InputStream inputStream = null;
try
{
+ ZipEntry zipEntry = new ZipEntry(baseName + parent);
+ zipStream.putNextEntry(zipEntry);
+
+ inputStream = new FileInputStream(schemaFile);
+ while (true)
+ {
+ int bytesRead = inputStream.read(buffer);
+ if (bytesRead < 0 || backupConfig.isCancelled())
+ {
+ break;
+ }
+
+ if (hash)
+ {
+ if (signHash)
+ {
+ mac.update(buffer, 0, bytesRead);
+ } else
+ {
+ digest.update(buffer, 0, bytesRead);
+ }
+ }
+
+ zipStream.write(buffer, 0, bytesRead);
+ }
+
+ zipStream.closeEntry();
inputStream.close();
- } catch (Exception e2) {}
-
- try
+ } catch (Exception e)
{
- zipStream.close();
- } catch (Exception e2) {}
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
- message = ERR_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE.get(
- baseName, stackTraceToSingleLineString(e));
- throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
- message, e);
+ try
+ {
+ inputStream.close();
+ } catch (Exception e2)
+ {
+ }
+
+ try
+ {
+ zipStream.close();
+ } catch (Exception e2)
+ {
+ }
+
+ message = ERR_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE.get(baseName,
+ stackTraceToSingleLineString(e));
+ throw new DirectoryException(DirectoryServer
+ .getServerErrorResultCode(), message, e);
+ }
}
+ parent = ".instance";
}
@@ -5005,29 +5032,38 @@
// try to verify the archive. If we are not going to verify only, then
// move the current schema directory out of the way so we can keep it around
// to restore if a problem occurs.
- String schemaDirPath = SchemaConfigManager.getSchemaDirectoryPath();
- File schemaDir = new File(schemaDirPath);
- String backupDirPath = null;
- File schemaBackupDir = null;
+ String schemaInstallDirPath =
+ SchemaConfigManager.getSchemaDirectoryPath(false);
+ String schemaInstanceDirPath =
+ SchemaConfigManager.getSchemaDirectoryPath(true);
+
+ File schemaInstallDir = new File(schemaInstallDirPath);
+ File schemaInstanceDir = new File(schemaInstanceDirPath);
+
+ String backupInstallDirPath = null;
+ File schemaBackupInstallDir = null;
+
+ String backupInstanceDirPath = null;
+ File schemaBackupInstanceDir = null;
boolean verifyOnly = restoreConfig.verifyOnly();
if (! verifyOnly)
{
// Rename the current schema directory if it exists.
try
{
- if (schemaDir.exists())
+ if (schemaInstallDir.exists())
{
- String schemaBackupDirPath = schemaDirPath + ".save";
- backupDirPath = schemaBackupDirPath;
- schemaBackupDir = new File(backupDirPath);
- if (schemaBackupDir.exists())
+ String schemaBackupInstallDirPath = schemaInstallDirPath + ".save";
+ backupInstallDirPath = schemaBackupInstallDirPath;
+ schemaBackupInstallDir = new File(backupInstallDirPath);
+ if (schemaBackupInstallDir.exists())
{
int i=2;
while (true)
{
- backupDirPath = schemaBackupDirPath + i;
- schemaBackupDir = new File(backupDirPath);
- if (schemaBackupDir.exists())
+ backupInstallDirPath = schemaBackupInstallDirPath + i;
+ schemaBackupInstallDir = new File(backupInstallDirPath);
+ if (schemaBackupInstallDir.exists())
{
i++;
}
@@ -5038,13 +5074,51 @@
}
}
- schemaDir.renameTo(schemaBackupDir);
+ schemaInstallDir.renameTo(schemaBackupInstallDir);
}
}
catch (Exception e)
{
Message message = ERR_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY.
- get(backupID, schemaDirPath, String.valueOf(backupDirPath),
+ get(backupID, schemaInstallDirPath,
+ String.valueOf(backupInstallDirPath),
+ stackTraceToSingleLineString(e));
+ throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
+ message, e);
+ }
+ try
+ {
+ if (schemaInstanceDir.exists())
+ {
+ String schemaBackupInstanceDirPath = schemaInstanceDirPath + ".save";
+ backupInstanceDirPath = schemaBackupInstanceDirPath;
+ schemaBackupInstanceDir = new File(backupInstanceDirPath);
+ if (schemaBackupInstanceDir.exists())
+ {
+ int i=2;
+ while (true)
+ {
+ backupInstanceDirPath = schemaBackupInstanceDirPath + i;
+ schemaBackupInstanceDir = new File(backupInstanceDirPath);
+ if (schemaBackupInstanceDir.exists())
+ {
+ i++;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+
+ schemaInstanceDir.renameTo(schemaBackupInstanceDir);
+ }
+ }
+ catch (Exception e)
+ {
+ Message message = ERR_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY.
+ get(backupID, schemaInstanceDirPath,
+ String.valueOf(backupInstanceDirPath),
stackTraceToSingleLineString(e));
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
message, e);
@@ -5054,32 +5128,52 @@
// Create a new directory to hold the restored schema files.
try
{
- schemaDir.mkdirs();
+ schemaInstallDir.mkdirs();
+ schemaInstanceDir.mkdirs();
}
catch (Exception e)
{
// Try to restore the previous schema directory if possible. This will
// probably fail in this case, but try anyway.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
try
{
- schemaBackupDir.renameTo(schemaDir);
+ schemaBackupInstallDir.renameTo(schemaInstallDir);
Message message =
- NOTE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA.get(schemaDirPath);
+ NOTE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA.get(
+ schemaInstallDirPath);
logError(message);
}
catch (Exception e2)
{
Message message = ERR_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ try
+ {
+ schemaBackupInstanceDir.renameTo(schemaInstanceDir);
+ Message message =
+ NOTE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA.get(
+ schemaInstanceDirPath);
+ logError(message);
+ }
+ catch (Exception e2)
+ {
+ Message message = ERR_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
}
Message message = ERR_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY.get(
- backupID, schemaDirPath, stackTraceToSingleLineString(e));
+ backupID, schemaInstallDirPath,schemaInstanceDirPath,
+ stackTraceToSingleLineString(e));
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
message, e);
}
@@ -5100,10 +5194,16 @@
catch (Exception e)
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5131,13 +5231,25 @@
mac.update(getBytes(fileName));
}
+ String baseDirPath ;
+ if (fileName.endsWith(".install"))
+ {
+ fileName = fileName.substring(fileName.lastIndexOf(".install"));
+ baseDirPath = schemaInstallDirPath;
+ }
+ else
+ {
+ fileName = fileName.substring(fileName.lastIndexOf(".instance"));
+ baseDirPath = schemaInstanceDirPath;
+ }
+
// If we're doing the restore, then create the output stream to write the
// file.
OutputStream outputStream = null;
if (! verifyOnly)
{
- String filePath = schemaDirPath + File.separator + fileName;
+ String filePath = baseDirPath + File.separator + fileName;
try
{
outputStream = new FileOutputStream(filePath);
@@ -5145,10 +5257,16 @@
catch (Exception e)
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5206,10 +5324,16 @@
catch (Exception e)
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5249,10 +5373,17 @@
else
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ // Tell the user where the previous schema was archived.
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5274,10 +5405,16 @@
else
{
// Tell the user where the previous schema was archived.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
- schemaBackupDir.getPath());
+ schemaBackupInstallDir.getPath());
+ logError(message);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+ schemaBackupInstanceDir.getPath());
logError(message);
}
@@ -5301,9 +5438,13 @@
// If we've gotten here, then the archive was restored successfully. Get
// rid of the temporary copy we made of the previous schema directory and
// exit.
- if (schemaBackupDir != null)
+ if (schemaBackupInstallDir != null)
{
- recursiveDelete(schemaBackupDir);
+ recursiveDelete(schemaBackupInstallDir);
+ }
+ if (schemaBackupInstanceDir != null)
+ {
+ recursiveDelete(schemaBackupInstanceDir);
}
Message message = NOTE_SCHEMA_RESTORE_SUCCESSFUL.get(backupID, backupPath);
diff --git a/opends/src/server/org/opends/server/core/SchemaConfigManager.java b/opends/src/server/org/opends/server/core/SchemaConfigManager.java
index a8f71b3..ed00b5e 100644
--- a/opends/src/server/org/opends/server/core/SchemaConfigManager.java
+++ b/opends/src/server/org/opends/server/core/SchemaConfigManager.java
@@ -105,12 +105,16 @@
/**
* Retrieves the path to the directory containing the server schema files.
*
+ * @param userSchema indicates if we need to retrieve user schema or
+ * "unmodified" schema.
+ *
* @return The path to the directory containing the server schema files.
*/
- public static String getSchemaDirectoryPath()
+ public static String getSchemaDirectoryPath(boolean userSchema)
{
File schemaDir =
- DirectoryServer.getEnvironmentConfig().getSchemaDirectory();
+ DirectoryServer.getEnvironmentConfig().
+ getSchemaDirectory(userSchema);
if (schemaDir != null) {
return schemaDir.getAbsolutePath();
} else {
@@ -202,29 +206,62 @@
// Construct the path to the directory that should contain the schema files
// and make sure that it exists and is a directory. Get a list of the files
// in that directory sorted in alphabetic order.
- String schemaDirPath = getSchemaDirectoryPath();
- File schemaDir = new File(schemaDirPath);
+ String schemaInstallDirPath = getSchemaDirectoryPath(false);
+ String schemaInstanceDirPath = getSchemaDirectoryPath(true);
+ File schemaInstallDir = new File(schemaInstallDirPath);
+ File schemaInstanceDir = null;
+
+ try
+ {
+ if (schemaInstanceDirPath != null)
+ {
+ schemaInstanceDir = new File(schemaInstanceDirPath);
+ if (schemaInstallDir.getCanonicalPath().equals(
+ schemaInstanceDir.getCanonicalPath()))
+ {
+ schemaInstanceDir = null;
+ }
+ }
+ } catch (Exception e)
+ {
+ schemaInstanceDir = null;
+ }
long oldestModificationTime = -1L;
long youngestModificationTime = -1L;
String[] fileNames;
try
{
- if (schemaDirPath == null || ! schemaDir.exists())
- {
- Message message = ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaDirPath);
- throw new InitializationException(message);
- }
- else if (! schemaDir.isDirectory())
+ if (schemaInstallDir == null || ! schemaInstallDir.exists())
{
Message message =
- ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaDirPath);
+ ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaInstallDirPath);
+ throw new InitializationException(message);
+ }
+ if (! schemaInstallDir.isDirectory())
+ {
+ Message message =
+ ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaInstallDirPath);
throw new InitializationException(message);
}
- File[] schemaDirFiles = schemaDir.listFiles();
- ArrayList<String> fileList = new ArrayList<String>(schemaDirFiles.length);
- for (File f : schemaDirFiles)
+ if ((schemaInstanceDir == null) || (!schemaInstanceDir.exists())
+ || (! schemaInstanceDir.isDirectory()))
+ {
+ schemaInstanceDir = null;
+ }
+
+ File[] schemaInstallDirFiles = schemaInstallDir.listFiles() ;
+ int fileNumber = schemaInstallDirFiles.length;
+ File[] schemaInstanceDirFiles = null ;
+ if (schemaInstanceDir != null)
+ {
+ schemaInstanceDirFiles = schemaInstanceDir.listFiles();
+ fileNumber =+ schemaInstanceDirFiles.length ;
+ }
+
+ ArrayList<String> fileList = new ArrayList<String>(fileNumber);
+ for (File f : schemaInstallDirFiles)
{
if (f.isFile())
{
@@ -244,6 +281,29 @@
youngestModificationTime = modificationTime;
}
}
+ if (schemaInstanceDirFiles != null)
+ {
+ for (File f : schemaInstanceDirFiles)
+ {
+ if (f.isFile())
+ {
+ fileList.add(f.getName());
+ }
+
+ long modificationTime = f.lastModified();
+ if ((oldestModificationTime <= 0L)
+ || (modificationTime < oldestModificationTime))
+ {
+ oldestModificationTime = modificationTime;
+ }
+
+ if ((youngestModificationTime <= 0)
+ || (modificationTime > youngestModificationTime))
+ {
+ youngestModificationTime = modificationTime;
+ }
+ }
+ }
fileNames = new String[fileList.size()];
fileList.toArray(fileNames);
@@ -266,7 +326,7 @@
}
Message message = ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES.get(
- schemaDirPath, getExceptionMessage(e));
+ schemaInstallDirPath, schemaInstanceDirPath, getExceptionMessage(e));
throw new InitializationException(message, e);
}
@@ -356,11 +416,18 @@
throws ConfigException, InitializationException
{
// Create an LDIF reader to use when reading the files.
- String schemaDirPath = getSchemaDirectoryPath();
+ String schemaDirPath = null;
+
+ schemaDirPath = getSchemaDirectoryPath(true);
+ File f = new File(schemaDirPath, schemaFile);
+ if (!f.exists())
+ {
+ schemaDirPath = getSchemaDirectoryPath(false);
+ f = new File(schemaDirPath, schemaFile);
+ }
LDIFReader reader;
try
{
- File f = new File(schemaDirPath, schemaFile);
reader = new LDIFReader(new LDIFImportConfig(f.getAbsolutePath()));
}
catch (Exception e)
diff --git a/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java b/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
index cd60148..6c82691 100644
--- a/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
+++ b/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
@@ -127,7 +127,10 @@
// Get the name(s) of the schema files to add and make sure they exist in
// the schema directory.
- String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath();
+ String schemaInstallDirectory =
+ SchemaConfigManager.getSchemaDirectoryPath(false);
+ String schemaInstanceDirectory =
+ SchemaConfigManager.getSchemaDirectoryPath(true);
filesToAdd = new TreeSet<String>();
for (Attribute a : attrList)
{
@@ -138,14 +141,19 @@
try
{
- File schemaFile = new File(schemaDirectory, filename);
+ File schemaFile = new File(schemaInstallDirectory, filename);
if ((! schemaFile.exists()) ||
- (! schemaFile.getParent().equals(schemaDirectory)))
+ (! schemaFile.getParent().equals(schemaInstallDirectory)))
{
+ // try in the instance
+ schemaFile = new File(schemaInstanceDirectory, filename);
+ if (! schemaFile.exists())
+ {
Message message = ERR_TASK_ADDSCHEMAFILE_NO_SUCH_FILE.get(
- filename, schemaDirectory);
+ filename, schemaInstallDirectory, schemaInstanceDirectory);
throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
message);
+ }
}
}
catch (Exception e)
@@ -156,7 +164,8 @@
}
Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE.get(
- filename, schemaDirectory, getExceptionMessage(e));
+ filename, schemaInstallDirectory, schemaInstanceDirectory,
+ getExceptionMessage(e));
throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
message, e);
}
diff --git a/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java b/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java
index 8f00dcc..8cbe32a 100644
--- a/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java
+++ b/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java
@@ -28,9 +28,7 @@
-import java.io.BufferedReader;
import java.io.File;
-import java.io.FileReader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
@@ -39,6 +37,7 @@
import org.opends.server.api.ConfigHandler;
import org.opends.server.core.DirectoryServer;
import org.opends.server.extensions.ConfigFileHandler;
+import org.opends.quicksetup.util.Utils;
import static org.opends.server.config.ConfigConstants.*;
import static org.opends.messages.CoreMessages.*;
@@ -225,56 +224,8 @@
*/
public static File getInstanceRootFromServerRoot(File serverRoot)
{
- String instancePathFileName = serverRoot.getAbsolutePath() +
- File.separator + "instance.loc";
-
- // look for <installPath>/instance.loc
- File f = new File(instancePathFileName);
-
- if (! f.exists())
- {
- return serverRoot;
- }
-
- BufferedReader reader;
- try
- {
- reader = new BufferedReader(
- new FileReader(instancePathFileName));
- }
- catch (Exception e)
- {
- return null;
- }
-
-
- // Read the first line and close the file.
- String line;
- try
- {
- line = reader.readLine();
- File instanceLoc = new File(line);
- if (instanceLoc.isAbsolute())
- {
- return instanceLoc;
- }
- else
- {
- return new File(serverRoot.getAbsolutePath() + File.separator
- + instanceLoc.getPath());
- }
- }
- catch (Exception e)
- {
- return null;
- }
- finally
- {
- try
- {
- reader.close();
- } catch (Exception e) {}
- }
+ return new File(Utils.getInstancePathFromClasspath(
+ serverRoot.getAbsolutePath()));
}
@@ -806,10 +757,13 @@
* directory of "config/schema" exists below the server root, then
* that will be returned.
*
+ * @param userSchema indicates if we need to retrieve user schema or
+ * "unmodified" schema.
+ *
* @return The directory that contains the server schema
* configuration files, or {@code null} if none is defined.
*/
- public File getSchemaDirectory()
+ public File getSchemaDirectory(boolean userSchema)
{
String schemaDirectoryPath =
getProperty(PROPERTY_SCHEMA_DIRECTORY);
@@ -818,9 +772,19 @@
File serverRoot = getServerRoot();
if (serverRoot != null)
{
- File instanceRoot = getInstanceRootFromServerRoot(serverRoot);
- File schemaDir = new File(instanceRoot.getAbsolutePath() +
- File.separator + PATH_SCHEMA_DIR);
+ String schemaPath = null ;
+ if (userSchema)
+ {
+ File instanceRoot =
+ getInstanceRootFromServerRoot(serverRoot);
+ schemaPath = instanceRoot.getAbsolutePath();
+ }
+ else
+ {
+ schemaPath = serverRoot.getAbsolutePath();
+ }
+ File schemaDir = new File(schemaPath
+ + File.separator + PATH_SCHEMA_DIR);
if (schemaDir.exists() && schemaDir.isDirectory())
{
return schemaDir;
diff --git a/opends/src/server/org/opends/server/types/Schema.java b/opends/src/server/org/opends/server/types/Schema.java
index 3e8f61d..039a1ac 100644
--- a/opends/src/server/org/opends/server/types/Schema.java
+++ b/opends/src/server/org/opends/server/types/Schema.java
@@ -3125,28 +3125,37 @@
{
// Get a sorted list of the files in the schema directory.
String schemaDirectory =
- SchemaConfigManager.getSchemaDirectoryPath();
- TreeSet<String> schemaFileNames = new TreeSet<String>();
+ SchemaConfigManager.getSchemaDirectoryPath(false);
+ TreeSet<File> schemaFiles = new TreeSet<File>();
for (File f : new File(schemaDirectory).listFiles())
{
if (f.isFile())
{
- schemaFileNames.add(f.getName());
+ schemaFiles.add(f);
+ }
+ }
+
+ schemaDirectory =
+ SchemaConfigManager.getSchemaDirectoryPath(true);
+ for (File f : new File(schemaDirectory).listFiles())
+ {
+ if (f.isFile())
+ {
+ schemaFiles.add(f);
}
}
// Open each of the files in order and read the elements that they
// contain, appending them to the appropriate lists.
- for (String name : schemaFileNames)
+ for (File f : schemaFiles)
{
// Read the contents of the file into a list with one schema
// element per list element.
LinkedList<StringBuilder> lines =
new LinkedList<StringBuilder>();
BufferedReader reader =
- new BufferedReader(new FileReader(
- new File(schemaDirectory, name)));
+ new BufferedReader(new FileReader(f));
while (true)
{
@@ -3187,12 +3196,12 @@
if (line.endsWith(" )"))
{
line = line.substring(0, line.length()-1) +
- SCHEMA_PROPERTY_FILENAME + " '" + name + "' )";
+ SCHEMA_PROPERTY_FILENAME + " '" + f.getName() + "' )";
}
else if (line.endsWith(")"))
{
line = line.substring(0, line.length()-1) + " " +
- SCHEMA_PROPERTY_FILENAME + " '" + name + "' )";
+ SCHEMA_PROPERTY_FILENAME + " '" + f.getName() + "' )";
}
else
{
diff --git a/opends/src/svr4/OpenDS/README b/opends/src/svr4/OpenDS/README
new file mode 100644
index 0000000..7549dcd
--- /dev/null
+++ b/opends/src/svr4/OpenDS/README
@@ -0,0 +1,11 @@
+OpenDS Directory Server
+
+This archive contains the OpenDS Directory Server. Complete documentation for
+this product may be found online at https://OpenDS.dev.java.net/.
+
+To configure the server, run the configure script.
+
+This product is made available under the Common Development and Distribution
+License (CDDL). The complete text for this license, and for alternate licenses
+of included components, may be found in the legal-notices directory.
+
diff --git a/opends/src/svr4/OpenDS/copyright b/opends/src/svr4/OpenDS/copyright
new file mode 100644
index 0000000..639df45
--- /dev/null
+++ b/opends/src/svr4/OpenDS/copyright
@@ -0,0 +1,17 @@
+Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+Use is subject to license terms.
+
+The contents of this file are subject to the terms of the
+Common Development and Distribution License (the "License").
+You may not use this file except in compliance with the License.
+
+You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+or http://www.opensolaris.org/os/licensing.
+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 usr/src/OPENSOLARIS.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]
diff --git a/opends/src/svr4/OpenDS/install.html b/opends/src/svr4/OpenDS/install.html
new file mode 100644
index 0000000..7b68ef1
--- /dev/null
+++ b/opends/src/svr4/OpenDS/install.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+<title>How To Install Open DS</title>
+<style type="text/css">
+<!--
+body { font-family: Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ color: #333; background-color: #fff; }
+h1 { font-size: 2.0em; font-weight: normal;
+ margin-top: 0em; margin-bottom: 0em; }
+h2 { font-size: 1.7em; font-weight: normal;
+ margin: 1.2em 0em .8em 0em;
+ border-bottom: 1px #D9D9D9 solid; }
+h3 { font-size: 1.4em; font-weight: bold;
+ margin: 1.2em 0em .8em 0em; }
+
+a:link {color:#069;text-decoration:none;}
+a:visited {color:#069;text-decoration:none;}
+a:active, a:hover {color:#069;text-decoration:underline;}
+
+-->
+</style>
+</head>
+
+<body>
+
+<img src="images/opends_logo.png" alt="OpenDS logo" border="0" align=right>
+
+<br>
+
+<h2>How To Configure OpenDS</h2>
+<p>If you are reading this page, you have already installed the OpenDS package.
+
+<h3>Before You Configure</h3>
+A Java SE 5.0 (version 1.5.0_08) or higher runtime environment must be installed.
+It is recommended that your system have at least 100MB of disk space and
+256MB of free memory to run OpenDS for evaluation purposes. Note that
+you can configure OpenDS in such a way that it requires substantially
+less, or more, disk space. For more information, see the
+<a href="https://www.opends.org/wiki/page/OpenDSSystemRequirements">OpenDS System Requirements</a>.
+
+<h3>To Configure OpenDS</h3>
+<ol>
+ <li>As root, type the following command:
+ <br>
+ <span style="font-family: monospace; white-space: pre;">
+$BASEDIR/opends/configure --instancePath {instancePath} [ --userName {userName} [ --groupName {groupName} ] ]
+ </span>
+ </li>
+ <li>As {userName}, type the following command:
+ <br>
+ <span style="font-family: monospace; white-space: pre;">
+ $BASEDIR/opends/setup
+ </span>
+ </li>
+</ol>
+
+<h3>See Also</h3>
+<ul>
+ <li><a href="https://www.opends.org/wiki/page/InstallingTheOpenDSDirectoryServer">Installing the OpenDS Directory Server</a>
+ <br>
+ </li>
+ <li> <a href="https://www.opends.org/wiki/page/Setup">setup</a>
+ </li>
+</ul>
+</body>
+</html>
diff --git a/opends/src/svr4/OpenDS/install.txt b/opends/src/svr4/OpenDS/install.txt
new file mode 100644
index 0000000..98b5347
--- /dev/null
+++ b/opends/src/svr4/OpenDS/install.txt
@@ -0,0 +1,25 @@
+How To Install OpenDS
+=====================
+
+If you are reading this page, you have already installed the OpenDS package.
+
+Before You Configure
+------------------
+A Java SE 5.0 (version 1.5.0_08) or higher runtime environment must be installed. It is
+recommended that your system have at least 100MB of disk space and 256MB of free memory to run
+OpenDS for evaluation purposes. Note that you can configure OpenDS in such a way that it requires
+substantially less, or more, disk space. For more information, see the OpenDS System Requirements
+at https://www.opends.org/wiki/page/OpenDSSystemRequirements.
+
+To Configure OpenDS
+--------------------------------------
+ 1. As root, type the following command:
+ $BASEDIR/opends/configure --instancePath {instancePath} [ --userName {userName} [ --groupName {groupName} ] ]
+ 2. As {userName}, type the following command:
+ $BASEDIR/opends/setup
+
+See Also
+--------
+ * Installing the OpenDS Directory Server
+ (https://www.opends.org/wiki/page/InstallingTheOpenDSDirectoryServer)
+ * setup (https://www.opends.org/wiki/page/Setup)
diff --git a/opends/src/svr4/OpenDS/layout.xml b/opends/src/svr4/OpenDS/layout.xml
new file mode 100644
index 0000000..038d448
--- /dev/null
+++ b/opends/src/svr4/OpenDS/layout.xml
@@ -0,0 +1,167 @@
+<!--
+ ! 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 2006-2008 Sun Microsystems, Inc.
+ ! -->
+
+<project name="OpenDS SVR4 layout" basedir=".">
+ <description>
+ This is a build script that extends the OpenDS build script by adding
+ SVR4 packaging functions.
+ </description>
+
+
+ <target name="pkgversion"
+ description="Set pkg.version property" >
+ <!-- Construct the version number string -->
+ <taskdef name="getversionnumber"
+ classname="org.opends.build.tools.CreateVersionString">
+ <classpath>
+ <fileset dir="${build.dir}/build-tools">
+ <include name="*.jar" />
+ </fileset>
+ </classpath>
+ </taskdef>
+
+ <getversionnumber property="pkg.version" />
+ </target>
+
+ <property name="resource.dir" location="src/resource" />
+
+ <!-- Construct layout -->
+ <target name="layout" if="isSunOS"
+ description="Create layout based on zip layout" >
+ <!-- Get the revision number of the current Subversion workspace -->
+ <taskdef name="getsvnrevision"
+ classname="org.opends.build.tools.GetSubversionRevision">
+ <classpath>
+ <fileset dir="${build.dir}/build-tools">
+ <include name="*.jar" />
+ </fileset>
+ <fileset dir="${svnkit.dir}">
+ <include name="*.jar" />
+ </fileset>
+ </classpath>
+ </taskdef>
+
+<!-- <getsvnrevision property="REVISION_NUMBER" />
+ <tstamp>
+ <format property="REVISION_NUMBER" pattern="MMddhhmm"/>
+ </tstamp>
+-->
+
+
+
+
+
+ <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 -->
+ <mkdir dir="${svr4.layout.dir}"/>
+ <exec executable="cp">
+ <arg value="-R"/>
+ <arg value="${zip.dir}"/>
+ <arg value="${svr4.layout.pkg.dir}"/>
+ </exec>
+ <!-- Remove Windows specific files -->
+ <delete includeemptydirs="true">
+ <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"/>
+ </delete>
+ <!-- Remove MacOS specific files -->
+ <delete includeemptydirs="true">
+ <fileset dir="${svr4.layout.pkg.dir}" includes="**/*.app/" />
+ </delete>
+ <!-- Remove instance.loc file -->
+ <delete file="${svr4.layout.pkg.dir}/instance.loc" />
+ <!-- Remove uninstall file -->
+ <delete file="${svr4.layout.pkg.dir}/uninstall" />
+ <!-- Remove ldaptools -->
+ <delete file="${svr4.layout.pkg.dir}/bin/ldapcompare" />
+ <delete file="${svr4.layout.pkg.dir}/bin/ldapdelete" />
+ <delete file="${svr4.layout.pkg.dir}/bin/ldapmodify" />
+ <delete file="${svr4.layout.pkg.dir}/bin/ldapsearch" />
+ <!-- Remove ZIP README / install files -->
+ <delete file="${svr4.layout.pkg.dir}/README" />
+ <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" />
+ <!-- Add configure script -->
+ <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 -->
+ <delete file="${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"/>
+ <chmod dir="${svr4.layout.pkg.dir}/tmpl_instance" perm="755"/>
+ <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"/>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/bak">
+ <fileset dir="${svr4.layout.pkg.dir}/bak"/>
+ </move>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/changelogDb">
+ <fileset dir="${svr4.layout.pkg.dir}/changelogDb"/>
+ </move>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/classes">
+ <fileset dir="${svr4.layout.pkg.dir}/classes"/>
+ </move>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/config">
+ <fileset dir="${svr4.layout.pkg.dir}/config"/>
+ </move>
+ <mkdir dir="${svr4.layout.pkg.dir}/config"/>
+ <chmod dir="${svr4.layout.pkg.dir}/config" perm="755"/>
+ <move todir="${svr4.layout.pkg.dir}/config/schema">
+ <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"/>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/db">
+ <fileset dir="${svr4.layout.pkg.dir}/db"/>
+ </move>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/import-tmp">
+ <fileset dir="${svr4.layout.pkg.dir}/import-tmp"/>
+ </move>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/ldif">
+ <fileset dir="${svr4.layout.pkg.dir}/ldif"/>
+ </move>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/locks">
+ <fileset dir="${svr4.layout.pkg.dir}/locks"/>
+ </move>
+ <move todir="${svr4.layout.pkg.dir}/tmpl_instance/logs">
+ <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" />
+ </target>
+
+</project>
diff --git a/opends/src/svr4/OpenDS/pkg.properties b/opends/src/svr4/OpenDS/pkg.properties
new file mode 100644
index 0000000..7358680
--- /dev/null
+++ b/opends/src/svr4/OpenDS/pkg.properties
@@ -0,0 +1,7 @@
+# Info for prototype
+pkg.name=opends
+pkg.fullname=OpenDS, an open source LDAP directory server
+pkg.desc=OpenDS, an open source LDAP directory server
+pkg.arch=all
+pkg.vendor=opends.org
+pkg.basedir=/opt
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index a41dd49..6e4e313 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -304,12 +304,16 @@
testInstallRoot.mkdirs();
testInstanceRoot.mkdirs();
}
+
+ File testInstanceSchema =
+ new File (testInstanceRoot, "config" + File.separator + "schema");
+ testInstanceSchema.mkdirs();
//db_verify is second jeb backend used by the jeb verify test cases
//db_rebuild is the third jeb backend used by the jeb rebuild test cases
//db_unindexed is the forth backend used by the unindexed search privilege
//test cases
- String[] installSubDirectories = { "bin", "lib", "bat"};
+ String[] installSubDirectories = { "bin", "lib", "bat", "config"};
String[] instanceSubDirectories = { "bak", "changelogDb", "classes",
"config", "db", "import-tmp", "db_verify",
"ldif", "locks", "logs", "db_rebuild",
@@ -333,6 +337,7 @@
File testResourceDir = new File(testSrcRoot, "resource");
// Set the class variable
testConfigDir = new File(testInstanceRoot, "config");
+ File testSchemaDir = new File(testInstallRoot, "config");
File testClassesDir = new File(testInstanceRoot, "classes");
File testLibDir = new File(testInstallRoot, "lib");
File testBinDir = new File(testInstallRoot, "bin");
@@ -371,7 +376,7 @@
copyDirectory(new File(resourceDir, "bin"), testBinDir);
copyDirectory(new File(resourceDir, "config"), testConfigDir);
copyDirectory(new File(resourceDir, "schema"),
- new File(testConfigDir, "schema"));
+ new File(testSchemaDir, "schema"));
copyDirectory(new File(resourceDir, "MakeLDIF"),
new File(testConfigDir, "MakeLDIF"));
copyDirectory(new File(snmpResourceDir, "security"),
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java
index 7cab354..19249d4 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java
@@ -706,7 +706,7 @@
String attrName = "testaddattributetypetoaltschemafile";
assertFalse(DirectoryServer.getSchema().hasAttributeType(attrName));
- File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(),
+ File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(true),
"98-schema-test-attrtype.ldif");
assertFalse(schemaFile.exists());
@@ -802,7 +802,7 @@
String attrName = "testreplaceattributetypeinaltschemafile";
assertFalse(DirectoryServer.getSchema().hasAttributeType(attrName));
- File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(),
+ File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(true),
"98-schema-test-replaceattrtype.ldif");
assertFalse(schemaFile.exists());
@@ -1676,7 +1676,7 @@
String ocName = "testaddobjectclasstoaltschemafile";
assertFalse(DirectoryServer.getSchema().hasObjectClass(ocName));
- File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(),
+ File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(true),
"98-schema-test-oc.ldif");
assertFalse(schemaFile.exists());
@@ -2476,7 +2476,7 @@
String nameFormName = "testaddnameformtoaltschemafile";
assertFalse(DirectoryServer.getSchema().hasNameForm(nameFormName));
- File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(),
+ File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(true),
"98-schema-test-nameform.ldif");
assertFalse(schemaFile.exists());
@@ -3229,7 +3229,7 @@
String ocName = "testadddcrtoaltschemafileoc";
assertFalse(DirectoryServer.getSchema().hasObjectClass(ocName));
- File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(),
+ File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(true),
"98-schema-test-dcr.ldif");
assertFalse(schemaFile.exists());
@@ -4286,7 +4286,7 @@
int ruleID = 999010;
assertFalse(DirectoryServer.getSchema().hasDITStructureRule(ruleID));
- File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(),
+ File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(true),
"98-schema-test-dsr.ldif");
assertFalse(schemaFile.exists());
@@ -4777,7 +4777,7 @@
"-f", path
};
- File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(),
+ File schemaFile = new File(SchemaConfigManager.getSchemaDirectoryPath(true),
"98-schema-test-mru.ldif");
assertFalse(schemaFile.exists());
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
index c06d885..953cfbb 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
@@ -785,7 +785,7 @@
hasPrivilege);
- String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath();
+ String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath(true);
String identifier;
Entry authNEntry = conn.getAuthenticationInfo().getAuthenticationEntry();
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java
index 40c765c..a761a0f 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java
@@ -95,7 +95,7 @@
DirectoryServer.registerMatchingRule(matchingRule, false);
- String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath();
+ String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath(true);
String[] fileLines =
{
@@ -168,7 +168,7 @@
Thread.sleep(2);
- String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath();
+ String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath(true);
SchemaTestMatchingRule matchingRule1 =
@@ -342,7 +342,7 @@
Thread.sleep(2);
- String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath();
+ String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath(true);
File emptyFile = new File(schemaDirectory, "05-empty.ldif");
emptyFile.createNewFile();
@@ -377,7 +377,7 @@
public void testAddInvalidSchemaFile()
throws Exception
{
- String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath();
+ String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath(true);
File invalidFile = new File(schemaDirectory, "05-invalid.ldif");
BufferedWriter writer = new BufferedWriter(new FileWriter(invalidFile));
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java
index 16f3b84..9a06dfc 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java
@@ -850,7 +850,7 @@
hasPrivilege);
- String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath();
+ String schemaDirectory = SchemaConfigManager.getSchemaDirectoryPath(true);
String identifier;
Entry authNEntry = conn.getAuthenticationInfo().getAuthenticationEntry();
--
Gitblit v1.10.0