aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--development/nexus/README10
-rw-r--r--development/nexus/doinst.sh27
-rw-r--r--development/nexus/nexus.SlackBuild123
-rw-r--r--development/nexus/nexus.info10
-rw-r--r--development/nexus/plexus.properties23
-rw-r--r--development/nexus/rc.nexus571
-rw-r--r--development/nexus/slack-desc19
-rw-r--r--development/nexus/wrapper.conf182
8 files changed, 965 insertions, 0 deletions
diff --git a/development/nexus/README b/development/nexus/README
new file mode 100644
index 0000000000000..fedf5bd17bce0
--- /dev/null
+++ b/development/nexus/README
@@ -0,0 +1,10 @@
+Nexus manages software artifacts required for development, deployment, and
+provisioning. If you develop software, Nexus can help you share those
+artifacts with other developers and end-users.
+
+Nexus requires a "nexus" user and group; create these before running the
+SlackBuild script. Examples:
+
+# groupadd -g 252 nexus
+# useradd -u 252 -s /bin/sh -d /dev/null -g nexus nexus
+
diff --git a/development/nexus/doinst.sh b/development/nexus/doinst.sh
new file mode 100644
index 0000000000000..2b7b1560a0069
--- /dev/null
+++ b/development/nexus/doinst.sh
@@ -0,0 +1,27 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+preserve_perms() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ if [ -e $OLD ]; then
+ cp -a $OLD ${NEW}.incoming
+ cat $NEW > ${NEW}.incoming
+ mv ${NEW}.incoming $NEW
+ fi
+ config $NEW
+}
+
+preserve_perms etc/rc.d/rc.nexus.new
+config etc/nexus/plexus.properties.new
+config etc/nexus/wrapper.conf.new
diff --git a/development/nexus/nexus.SlackBuild b/development/nexus/nexus.SlackBuild
new file mode 100644
index 0000000000000..8ace4750d3750
--- /dev/null
+++ b/development/nexus/nexus.SlackBuild
@@ -0,0 +1,123 @@
+#!/bin/sh
+
+# Copyright 2008-2011 Giorgio Peron Campodarsego Italy
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PRGNAM=nexus
+VERSION=${VERSION:-1.9.2}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i486 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i486" ]; then
+ NEXUS_ARCH="linux-x86-32"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ NEXUS_ARCH="linux-x86-32"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ NEXUS_ARCH="linux-x86-64"
+ LIBDIRSUFFIX="64"
+else
+ echo "ARCH $ARCH not supported"
+ exit 1
+fi
+
+set -e
+
+# Check if the 'nexus' user & group exist:
+if [ "$(grep ^nexus /etc/passwd)" = "" -o "$(grep ^nexus /etc/group)" = "" ] ; then
+ printf "\nYou must have a nexus user and group.\n\nExample:\n"
+ printf "\t# groupadd -g 252 nexus\n"
+ printf "\t# useradd -u 252 -d /dev/null -s /bin/sh -g nexus nexus\n\n"
+ exit 1
+fi
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $PRGNAM-oss-webapp-$VERSION
+tar xvf $CWD/$PRGNAM-oss-webapp-$VERSION-bundle.tar.gz
+cd $PRGNAM-oss-webapp-$VERSION
+chown -R root:root .
+find . \
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \;
+
+DIR=$PKG/usr/lib$LIBDIRSUFFIX/$PRGNAM
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+mkdir -p $PKG/var/{lib,log,run}/$PRGNAM
+mkdir -p $PKG/etc/rc.d
+mkdir -p $PKG/etc/$PRGNAM
+
+cp -r bin/jsw/conf/* $PKG/etc/nexus/
+mkdir -p $DIR/bin/jsw/lib
+cp -r bin/jsw/lib $DIR/bin/jsw
+cp -r bin/jsw/license $PKG/usr/doc/$PRGNAM-$VERSION
+mkdir -p $DIR/bin/jsw/$NEXUS_ARCH
+cp -r bin/jsw/$NEXUS_ARCH $DIR/bin/jsw
+cp -r runtime $DIR
+cp -r conf/* $PKG/etc/nexus/
+mkdir -p $PKG/var/tmp/$PRGNAM
+cp *.txt $PKG/usr/doc/$PRGNAM-$VERSION
+
+#Put startup script in place and set correct location
+cat $CWD/rc.$PRGNAM | \
+ sed -e "s/@NEXUS_ARCH@/$NEXUS_ARCH/g" \
+ -e "s/@LIBDIRSUFFIX@/$LIBDIRSUFFIX/g" \
+ > $PKG/etc/rc.d/rc.$PRGNAM.new
+
+#Create links to configurarion files
+cd $DIR
+ ln -sf ../../../etc/nexus conf
+cd -
+cd $DIR/bin/jsw
+ ln -sf ../../../../../etc/nexus conf
+cd -
+
+#Replace two configuration files
+rm $PKG/etc/nexus/plexus.properties
+cat $CWD/plexus.properties > $PKG/etc/nexus/plexus.properties.new
+rm $PKG/etc/nexus/wrapper.conf
+cat $CWD/wrapper.conf > $PKG/etc/nexus/wrapper.conf.new
+
+#Fix ownership of some dirs
+chown -R nexus:nexus $PKG/var/{lib,log,run,tmp}/nexus
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/development/nexus/nexus.info b/development/nexus/nexus.info
new file mode 100644
index 0000000000000..5816c5fce79d2
--- /dev/null
+++ b/development/nexus/nexus.info
@@ -0,0 +1,10 @@
+PRGNAM="nexus"
+VERSION="1.9.2"
+HOMEPAGE="http://nexus.sonatype.org"
+DOWNLOAD="http://nexus.sonatype.org/downloads/nexus-oss-webapp-1.9.2-bundle.tar.gz"
+MD5SUM="adfe4d0fb4f177a78bce6494d4d5d627"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+MAINTAINER="Giorgio Peron"
+EMAIL="giorgio.peron@gmail.com"
+APPROVED="Niels Horn"
diff --git a/development/nexus/plexus.properties b/development/nexus/plexus.properties
new file mode 100644
index 0000000000000..b4efc21d37f9c
--- /dev/null
+++ b/development/nexus/plexus.properties
@@ -0,0 +1,23 @@
+application-port=8081
+application-host=0.0.0.0
+runtime=${basedir}/runtime
+apps=${runtime}/apps
+#nexus-work=${basedir}/../sonatype-work/nexus
+nexus-work=/var/lib/nexus
+nexus-app=${runtime}/apps/nexus
+webapp=${runtime}/apps/nexus/webapp
+webapp-context-path=/nexus
+security-xml-file=${nexus-work}/conf/security.xml
+application-conf=${nexus-work}/conf
+#runtime-tmp=${runtime}/tmp
+runtime-tmp=/var/tmp/nexus
+
+# If this file is present, it will be used to configure Jetty.
+jetty.xml=${basedir}/conf/jetty.xml
+
+# Uncomment this to use the debug js files
+#index.template.file=templates/index-debug.vm
+
+
+
+
diff --git a/development/nexus/rc.nexus b/development/nexus/rc.nexus
new file mode 100644
index 0000000000000..776017e9be1bf
--- /dev/null
+++ b/development/nexus/rc.nexus
@@ -0,0 +1,571 @@
+#! /bin/sh
+
+#
+# Copyright (c) 1999, 2006 Tanuki Software Inc.
+#
+# Java Service Wrapper sh script. Suitable for starting and stopping
+# wrapped Java applications on UNIX platforms.
+#
+
+# Copyright 2011 Giorgio Peron Campodarsego, PD, Italy giorgio.peron@gmail.com
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+APP_NAME="nexus"
+APP_LONG_NAME="Nexus OSS"
+
+WRAPPER_CMD="/usr/lib@LIBDIRSUFFIX@/nexus/bin/jsw/@NEXUS_ARCH@/wrapper"
+WRAPPER_CONF="/usr/lib@LIBDIRSUFFIX@/nexus/bin/jsw/conf/wrapper.conf"
+
+# Priority at which to run the wrapper. See "man nice" for valid priorities.
+# nice is only used if a priority is specified.
+PRIORITY=
+
+# Location of the pid file.
+PIDDIR="/var/run/nexus"
+
+# If uncommented, causes the Wrapper to be shutdown using an anchor file.
+# When launched with the 'start' command, it will also ignore all INT and
+# TERM signals.
+#IGNORE_SIGNALS=true
+
+# If specified, the Wrapper will be run as the specified user.
+# IMPORTANT - Make sure that the user has the required privileges to write
+# the PID file and wrapper.log files. Failure to be able to write the log
+# file will cause the Wrapper to exit without any way to write out an error
+# message.
+# NOTE - This will set the user which is used to run the Wrapper as well as
+# the JVM and is not useful in situations where a privileged resource or
+# port needs to be allocated prior to the user being changed.
+RUN_AS_USER=nexus
+
+# The following two lines are used by the chkconfig command. Change as is
+# appropriate for your application. They should remain commented.
+# chkconfig: 2345 20 80
+# description: Test Wrapper Sample Application
+
+# Do not modify anything beyond this point
+#-----------------------------------------------------------------------------
+
+# Get the fully qualified path to the script
+case $0 in
+ /*)
+ SCRIPT="$0"
+ ;;
+ *)
+ PWD=`pwd`
+ SCRIPT="$PWD/$0"
+ ;;
+esac
+
+# Resolve the true real path without any sym links.
+CHANGED=true
+while [ "X$CHANGED" != "X" ]
+do
+ # Change spaces to ":" so the tokens can be parsed.
+ SAFESCRIPT=`echo $SCRIPT | sed -e 's; ;:;g'`
+ # Get the real path to this script, resolving any symbolic links
+ TOKENS=`echo $SAFESCRIPT | sed -e 's;/; ;g'`
+ REALPATH=
+ for C in $TOKENS; do
+ # Change any ":" in the token back to a space.
+ C=`echo $C | sed -e 's;:; ;g'`
+ REALPATH="$REALPATH/$C"
+ # If REALPATH is a sym link, resolve it. Loop for nested links.
+ while [ -h "$REALPATH" ] ; do
+ LS="`ls -ld "$REALPATH"`"
+ LINK="`expr "$LS" : '.*-> \(.*\)$'`"
+ if expr "$LINK" : '/.*' > /dev/null; then
+ # LINK is absolute.
+ REALPATH="$LINK"
+ else
+ # LINK is relative.
+ REALPATH="`dirname "$REALPATH"`""/$LINK"
+ fi
+ done
+ done
+
+ if [ "$REALPATH" = "$SCRIPT" ]
+ then
+ CHANGED=""
+ else
+ SCRIPT="$REALPATH"
+ fi
+done
+
+# Change the current directory to the location of the script
+cd "`dirname "$REALPATH"`"
+REALDIR=`pwd`
+
+# If the PIDDIR is relative, set its value relative to the full REALPATH to avoid problems if
+# the working directory is later changed.
+FIRST_CHAR=`echo $PIDDIR | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+ PIDDIR=$REALDIR/$PIDDIR
+fi
+# Same test for WRAPPER_CMD
+FIRST_CHAR=`echo $WRAPPER_CMD | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+ WRAPPER_CMD=$REALDIR/$WRAPPER_CMD
+fi
+# Same test for WRAPPER_CONF
+FIRST_CHAR=`echo $WRAPPER_CONF | cut -c1,1`
+if [ "$FIRST_CHAR" != "/" ]
+then
+ WRAPPER_CONF=$REALDIR/$WRAPPER_CONF
+fi
+
+# Process ID
+ANCHORFILE="$PIDDIR/$APP_NAME.anchor"
+PIDFILE="$PIDDIR/$APP_NAME.pid"
+LOCKDIR="/var/lock/subsys"
+LOCKFILE="$LOCKDIR/$APP_NAME"
+pid=""
+
+# Resolve the location of the 'ps' command
+PSEXE="/usr/bin/ps"
+if [ ! -x "$PSEXE" ]
+then
+ PSEXE="/bin/ps"
+ if [ ! -x "$PSEXE" ]
+ then
+ echo "Unable to locate 'ps'."
+ echo "Please report this message along with the location of the command on your system."
+ exit 1
+ fi
+fi
+
+# Resolve the os
+DIST_OS=`uname -s | tr [:upper:] [:lower:] | tr -d [:blank:]`
+case "$DIST_OS" in
+ 'sunos')
+ DIST_OS="solaris"
+ ;;
+ 'hp-ux' | 'hp-ux64')
+ DIST_OS="hpux"
+ ;;
+ 'darwin')
+ DIST_OS="macosx"
+ ;;
+ 'unix_sv')
+ DIST_OS="unixware"
+ ;;
+esac
+
+# Resolve the architecture
+DIST_ARCH=`uname -p | tr [:upper:] [:lower:] | tr -d [:blank:]`
+if [ "$DIST_ARCH" = "unknown" ]
+then
+ DIST_ARCH=`uname -m | tr [:upper:] [:lower:] | tr -d [:blank:]`
+fi
+case "$DIST_ARCH" in
+ 'amd64' | 'athlon' | 'ia32' | 'ia64' | 'i386' | 'i486' | 'i586' | 'i686' | 'x86_64')
+ DIST_ARCH="x86"
+ ;;
+ 'ip27')
+ DIST_ARCH="mips"
+ ;;
+ 'power' | 'powerpc' | 'power_pc' | 'ppc64')
+ DIST_ARCH="ppc"
+ ;;
+ 'pa_risc' | 'pa-risc')
+ DIST_ARCH="parisc"
+ ;;
+ 'sun4u' | 'sparcv9')
+ DIST_ARCH="sparc"
+ ;;
+ '9000/800')
+ DIST_ARCH="parisc"
+ ;;
+esac
+
+outputFile() {
+ if [ -f "$1" ]
+ then
+ echo " $1 (Found but not executable.)";
+ else
+ echo " $1"
+ fi
+}
+
+# Decide on the wrapper binary to use.
+# If a 32-bit wrapper binary exists then it will work on 32 or 64 bit
+# platforms, if the 64-bit binary exists then the distribution most
+# likely wants to use long names. Otherwise, look for the default.
+# For macosx, we also want to look for universal binaries.
+WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+if [ -x "$WRAPPER_TEST_CMD" ]
+then
+ WRAPPER_CMD="$WRAPPER_TEST_CMD"
+else
+ if [ "$DIST_OS" = "macosx" ]
+ then
+ WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-32"
+ if [ -x "$WRAPPER_TEST_CMD" ]
+ then
+ WRAPPER_CMD="$WRAPPER_TEST_CMD"
+ else
+ WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+ if [ -x "$WRAPPER_TEST_CMD" ]
+ then
+ WRAPPER_CMD="$WRAPPER_TEST_CMD"
+ else
+ WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-universal-64"
+ if [ -x "$WRAPPER_TEST_CMD" ]
+ then
+ WRAPPER_CMD="$WRAPPER_TEST_CMD"
+ else
+ if [ ! -x "$WRAPPER_CMD" ]
+ then
+ echo "Unable to locate any of the following binaries:"
+ outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+ outputFile "$WRAPPER_CMD-$DIST_OS-universal-32"
+ outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+ outputFile "$WRAPPER_CMD-$DIST_OS-universal-64"
+ outputFile "$WRAPPER_CMD"
+ exit 1
+ fi
+ fi
+ fi
+ fi
+ else
+ WRAPPER_TEST_CMD="$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+ if [ -x "$WRAPPER_TEST_CMD" ]
+ then
+ WRAPPER_CMD="$WRAPPER_TEST_CMD"
+ else
+ if [ ! -x "$WRAPPER_CMD" ]
+ then
+ echo "Unable to locate any of the following binaries:"
+ outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-32"
+ outputFile "$WRAPPER_CMD-$DIST_OS-$DIST_ARCH-64"
+ outputFile "$WRAPPER_CMD"
+ exit 1
+ fi
+ fi
+ fi
+fi
+
+# Build the nice clause
+if [ "X$PRIORITY" = "X" ]
+then
+ CMDNICE=""
+else
+ CMDNICE="nice -$PRIORITY"
+fi
+
+# Build the anchor file clause.
+if [ "X$IGNORE_SIGNALS" = "X" ]
+then
+ ANCHORPROP=
+ IGNOREPROP=
+else
+ ANCHORPROP=wrapper.anchorfile=\"$ANCHORFILE\"
+ IGNOREPROP=wrapper.ignore_signals=TRUE
+fi
+
+# Build the lock file clause. Only create a lock file if the lock directory exists on this platform.
+LOCKPROP=
+if [ -d $LOCKDIR ]
+then
+ if [ -w $LOCKDIR ]
+ then
+ LOCKPROP=wrapper.lockfile=\"$LOCKFILE\"
+ fi
+fi
+
+checkUser() {
+ # $1 touchLock flag
+ # $2 command
+
+ # Check the configured user. If necessary rerun this script as the desired user.
+ if [ "X$RUN_AS_USER" != "X" ]
+ then
+ # Resolve the location of the 'id' command
+ IDEXE="/usr/xpg4/bin/id"
+ if [ ! -x "$IDEXE" ]
+ then
+ IDEXE="/usr/bin/id"
+ if [ ! -x "$IDEXE" ]
+ then
+ echo "Unable to locate 'id'."
+ echo "Please report this message along with the location of the command on your system."
+ exit 1
+ fi
+ fi
+
+ if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ]
+ then
+ # Already running as the configured user. Avoid password prompts by not calling su.
+ RUN_AS_USER=""
+ fi
+ fi
+ if [ "X$RUN_AS_USER" != "X" ]
+ then
+ # If LOCKPROP and $RUN_AS_USER are defined then the new user will most likely not be
+ # able to create the lock file. The Wrapper will be able to update this file once it
+ # is created but will not be able to delete it on shutdown. If $2 is defined then
+ # the lock file should be created for the current command
+ if [ "X$LOCKPROP" != "X" ]
+ then
+ if [ "X$1" != "X" ]
+ then
+ # Resolve the primary group
+ RUN_AS_GROUP=`groups $RUN_AS_USER | awk '{print $3}' | tail -1`
+ if [ "X$RUN_AS_GROUP" = "X" ]
+ then
+ RUN_AS_GROUP=$RUN_AS_USER
+ fi
+ touch $LOCKFILE
+ chown $RUN_AS_USER:$RUN_AS_GROUP $LOCKFILE
+ fi
+ fi
+
+ # Still want to change users, recurse. This means that the user will only be
+ # prompted for a password once. Variables shifted by 1
+ su -m $RUN_AS_USER -c "\"$REALPATH\" $2"
+
+ # Now that we are the original user again, we may need to clean up the lock file.
+ if [ "X$LOCKPROP" != "X" ]
+ then
+ getpid
+ if [ "X$pid" = "X" ]
+ then
+ # Wrapper is not running so make sure the lock file is deleted.
+ if [ -f "$LOCKFILE" ]
+ then
+ rm "$LOCKFILE"
+ fi
+ fi
+ fi
+
+ exit 0
+ fi
+}
+
+getpid() {
+ if [ -f "$PIDFILE" ]
+ then
+ if [ -r "$PIDFILE" ]
+ then
+ pid=`cat "$PIDFILE"`
+ if [ "X$pid" != "X" ]
+ then
+ # It is possible that 'a' process with the pid exists but that it is not the
+ # correct process. This can happen in a number of cases, but the most
+ # common is during system startup after an unclean shutdown.
+ # The ps statement below looks for the specific wrapper command running as
+ # the pid. If it is not found then the pid file is considered to be stale.
+ pidtest=`$PSEXE -p $pid -o args | grep "$WRAPPER_CMD" | tail -1`
+ if [ "X$pidtest" = "X" ]
+ then
+ # This is a stale pid file.
+ rm -f "$PIDFILE"
+ echo "Removed stale pid file: $PIDFILE"
+ pid=""
+ fi
+ fi
+ else
+ echo "Cannot read $PIDFILE."
+ exit 1
+ fi
+ fi
+}
+
+testpid() {
+ pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
+ if [ "X$pid" = "X" ]
+ then
+ # Process is gone so remove the pid file.
+ rm -f "$PIDFILE"
+ pid=""
+ fi
+}
+
+console() {
+ echo "Running $APP_LONG_NAME..."
+ getpid
+ if [ "X$pid" = "X" ]
+ then
+ # The string passed to eval must handles spaces in paths correctly.
+ COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=$APP_NAME wrapper.pidfile=\"$PIDFILE\" $ANCHORPROP $LOCKPROP"
+ eval $COMMAND_LINE
+ else
+ echo "$APP_LONG_NAME is already running."
+ exit 1
+ fi
+}
+
+start() {
+ echo "Starting $APP_LONG_NAME..."
+ getpid
+ if [ "X$pid" = "X" ]
+ then
+ # The string passed to eval must handles spaces in paths correctly.
+ COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=$APP_NAME wrapper.pidfile=\"$PIDFILE\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $LOCKPROP"
+ eval $COMMAND_LINE
+ else
+ echo "$APP_LONG_NAME is already running."
+ exit 1
+ fi
+ getpid
+ if [ "X$pid" != "X" ]
+ then
+ echo "Started $APP_LONG_NAME."
+ else
+ echo "Failed to start $APP_LONG_NAME."
+ fi
+}
+
+stopit() {
+ echo "Stopping $APP_LONG_NAME..."
+ getpid
+ if [ "X$pid" = "X" ]
+ then
+ echo "$APP_LONG_NAME was not running."
+ else
+ if [ "X$IGNORE_SIGNALS" = "X" ]
+ then
+ # Running so try to stop it.
+ kill $pid
+ if [ $? -ne 0 ]
+ then
+ # An explanation for the failure should have been given
+ echo "Unable to stop $APP_LONG_NAME."
+ exit 1
+ fi
+ else
+ rm -f "$ANCHORFILE"
+ if [ -f "$ANCHORFILE" ]
+ then
+ # An explanation for the failure should have been given
+ echo "Unable to stop $APP_LONG_NAME."
+ exit 1
+ fi
+ fi
+
+ # We can not predict how long it will take for the wrapper to
+ # actually stop as it depends on settings in wrapper.conf.
+ # Loop until it does.
+ savepid=$pid
+ CNT=0
+ TOTCNT=0
+ while [ "X$pid" != "X" ]
+ do
+ # Show a waiting message every 5 seconds.
+ if [ "$CNT" -lt "5" ]
+ then
+ CNT=`expr $CNT + 1`
+ else
+ echo "Waiting for $APP_LONG_NAME to exit..."
+ CNT=0
+ fi
+ TOTCNT=`expr $TOTCNT + 1`
+
+ sleep 1
+
+ testpid
+ done
+
+ pid=$savepid
+ testpid
+ if [ "X$pid" != "X" ]
+ then
+ echo "Failed to stop $APP_LONG_NAME."
+ exit 1
+ else
+ echo "Stopped $APP_LONG_NAME."
+ fi
+ fi
+}
+
+status() {
+ getpid
+ if [ "X$pid" = "X" ]
+ then
+ echo "$APP_LONG_NAME is not running."
+ exit 1
+ else
+ echo "$APP_LONG_NAME is running ($pid)."
+ exit 0
+ fi
+}
+
+dump() {
+ echo "Dumping $APP_LONG_NAME..."
+ getpid
+ if [ "X$pid" = "X" ]
+ then
+ echo "$APP_LONG_NAME was not running."
+
+ else
+ kill -3 $pid
+
+ if [ $? -ne 0 ]
+ then
+ echo "Failed to dump $APP_LONG_NAME."
+ exit 1
+ else
+ echo "Dumped $APP_LONG_NAME."
+ fi
+ fi
+}
+
+case "$1" in
+
+ 'console')
+ checkUser touchlock $1
+ console
+ ;;
+
+ 'start')
+ checkUser touchlock $1
+ start
+ ;;
+
+ 'stop')
+ checkUser "" $1
+ stopit
+ ;;
+
+ 'restart')
+ checkUser touchlock $1
+ stopit
+ start
+ ;;
+
+ 'status')
+ checkUser "" $1
+ status
+ ;;
+
+ 'dump')
+ checkUser "" $1
+ dump
+ ;;
+
+ *)
+ echo "Usage: $0 { console | start | stop | restart | status | dump }"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/development/nexus/slack-desc b/development/nexus/slack-desc
new file mode 100644
index 0000000000000..51dd3bf53b163
--- /dev/null
+++ b/development/nexus/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+nexus: Nexus (Maven repository manager)
+nexus:
+nexus: Nexus manages software artifacts required for development, deployment,
+nexus: and provisioning. If you develop software, Nexus can help you share
+nexus: those artifacts with other developers and end-users.
+nexus: Nexus greatly simplifies the maintenance of your own internal
+nexus: repositories and access to external repositories.
+nexus:
+nexus: Homepage: http://nexus.sonatype.org
+nexus:
+nexus:
diff --git a/development/nexus/wrapper.conf b/development/nexus/wrapper.conf
new file mode 100644
index 0000000000000..b570ea1eaea93
--- /dev/null
+++ b/development/nexus/wrapper.conf
@@ -0,0 +1,182 @@
+# JSW Configuration file
+#
+# For complete coverage of available configuration, please go here:
+# http://wrapper.tanukisoftware.org/doc/english/properties.html
+#
+# Some "most often used" keywords are added to end of this file
+# to be used as a "guideline". They are NOT the complete list of
+# keywords.
+
+
+# Include the platform specific path of JSW configuration
+include ./platform.conf
+
+# Set the JSW working directory (used as base for resolving relative paths)
+wrapper.working.dir=../../..
+
+# Set the JVM executable
+# (modify this to absolute path if you need a Java that is not on the OS path)
+wrapper.java.command=%JAVA_HOME%/bin/java
+
+# The main class that JSW will execute within JVM
+wrapper.java.mainclass=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# The JVM classpath
+wrapper.java.classpath.1=bin/jsw/lib/wrapper-3.2.3.jar
+wrapper.java.classpath.2=./runtime/apps/nexus/lib/plexus-classworlds-*.jar
+wrapper.java.classpath.3=./conf/
+
+# Additional JVM parameters (tune if needed, but match the sequence of numbers!)
+wrapper.java.additional.1=-Dsun.net.inetaddr.ttl=3600
+wrapper.java.additional.2=-Dbasedir=.
+#wrapper.java.additional.3=-Djava.io.tmpdir=./runtime/tmp
+wrapper.java.additional.3=-Djava.io.tmpdir=/var/tmp/nexus
+#wrapper.java.additional.4=-Xdebug
+#wrapper.java.additional.5=-Xnoagent
+#wrapper.java.additional.6=-Djava.compiler=NONE
+#wrapper.java.additional.7=-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#wrapper.java.additional.8=-XX:+HeapDumpOnOutOfMemoryError
+
+
+# Size Java memory, in MB (-Xms)
+#wrapper.java.initmemory=128
+# Size Java memory, in MB (-Xmx)
+#wrapper.java.maxmemory=256
+
+# How much to wait for JVM to respond to "ping" (increase on slower machines and VMs if needed)
+wrapper.ping.timeout=90
+# How much to wait for application to start up (increase on slower machines if needed)
+wrapper.startup.timeout=90
+
+# Make wrapper reload configuration between app restarts
+# and set exit code 12 as "RESTART" command
+wrapper.restart.reload_configuration=TRUE
+wrapper.on_exit.12=RESTART
+
+# Set up JSW logging
+#wrapper.logfile=logs/wrapper.log
+wrapper.logfile=/var/log/nexus/wrapper.log
+wrapper.logfile.format=PM
+wrapper.logfile.loglevel=INFO
+wrapper.logfile.maxsize=10m
+wrapper.logfile.maxfiles=10
+
+# Set up system logging (if needed, change to INFO or other valid values)
+wrapper.syslog.loglevel=NONE
+
+# Set up JSW Console
+wrapper.console.title=Nexus OSS
+wrapper.console.format=PM
+wrapper.console.loglevel=INFO
+wrapper.console.flush=true
+
+# =============================================
+# An example wrapper.conf file is included
+# below for quick reference
+# =============================================
+
+# ********************************************************************
+# Wrapper Java Properties
+# ********************************************************************
+# Java Application
+#wrapper.java.command=java
+
+# Tell the Wrapper to log the full generated Java command line.
+#wrapper.java.command.loglevel=INFO
+
+# Java Main class. This class must implement the WrapperListener interface
+# or guarantee that the WrapperManager class is initialized. Helper
+# classes are provided to do this for you. See the Integration section
+# of the documentation for details.
+#wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
+
+# Java Classpath (include wrapper.jar) Add class path elements as
+# needed starting from 1
+#wrapper.java.classpath.1=../lib/wrapper.jar
+
+# Java Library Path (location of Wrapper.DLL or libwrapper.so)
+#wrapper.java.library.path.1=../lib
+
+# Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
+#wrapper.java.additional.auto_bits=TRUE
+
+# Java Additional Parameters
+#wrapper.java.additional.1=
+
+# Initial Java Heap Size (in MB)
+#wrapper.java.initmemory=3
+
+# Maximum Java Heap Size (in MB)
+#wrapper.java.maxmemory=64
+
+# Application parameters. Add parameters as needed starting from 1
+#wrapper.app.parameter.1=<YourMainClass>
+
+# ********************************************************************
+# Wrapper Logging Properties
+# ********************************************************************
+# Enables Debug output from the Wrapper.
+#wrapper.debug=TRUE
+
+# Format of output for the console. (See docs for formats)
+#wrapper.console.format=PM
+
+# Log Level for console output. (See docs for log levels)
+#wrapper.console.loglevel=INFO
+
+# Log file to use for wrapper output logging.
+#wrapper.logfile=../logs/wrapper.log
+
+# Format of output for the log file. (See docs for formats)
+#wrapper.logfile.format=LPTM
+
+# Log Level for log file output. (See docs for log levels)
+#wrapper.logfile.loglevel=INFO
+
+# Maximum size that the log file will be allowed to grow to before
+# the log is rolled. Size is specified in bytes. The default value
+# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
+# 'm' (mb) suffix. For example: 10m = 10 megabytes.
+#wrapper.logfile.maxsize=0
+
+# Maximum number of rolled log files which will be allowed before old
+# files are deleted. The default value of 0 implies no limit.
+#wrapper.logfile.maxfiles=0
+
+# Log Level for sys/event log output. (See docs for log levels)
+#wrapper.syslog.loglevel=NONE
+
+# ********************************************************************
+# Wrapper General Properties
+# ********************************************************************
+# Allow for the use of non-contiguous numbered properties
+#wrapper.ignore_sequence_gaps=TRUE
+
+# Title to use when running as a console
+#wrapper.console.title=@app.long.name@
+
+# ********************************************************************
+# Wrapper Windows NT/2000/XP Service Properties
+# ********************************************************************
+# WARNING - Do not modify any of these properties when an application
+# using this configuration file has been installed as a service.
+# Please uninstall the service before modifying this section. The
+# service can then be reinstalled.
+
+# Name of the service
+#wrapper.name=@app.name@
+
+# Display name of the service
+#wrapper.displayname=@app.long.name@
+
+# Description of the service
+#wrapper.description=@app.description@
+
+# Service dependencies. Add dependencies as needed starting from 1
+#wrapper.ntservice.dependency.1=
+
+# Mode in which the service is installed. AUTO_START, DELAY_START or DEMAND_START
+#wrapper.ntservice.starttype=AUTO_START
+
+# Allow the service to interact with the desktop.
+#wrapper.ntservice.interactive=false