diff options
-rw-r--r-- | development/nexus/README | 10 | ||||
-rw-r--r-- | development/nexus/doinst.sh | 27 | ||||
-rw-r--r-- | development/nexus/nexus.SlackBuild | 123 | ||||
-rw-r--r-- | development/nexus/nexus.info | 10 | ||||
-rw-r--r-- | development/nexus/plexus.properties | 23 | ||||
-rw-r--r-- | development/nexus/rc.nexus | 571 | ||||
-rw-r--r-- | development/nexus/slack-desc | 19 | ||||
-rw-r--r-- | development/nexus/wrapper.conf | 182 |
8 files changed, 965 insertions, 0 deletions
diff --git a/development/nexus/README b/development/nexus/README new file mode 100644 index 0000000000..fedf5bd17b --- /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 0000000000..2b7b1560a0 --- /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 0000000000..8ace4750d3 --- /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 0000000000..5816c5fce7 --- /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 0000000000..b4efc21d37 --- /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 0000000000..776017e9be --- /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 0000000000..51dd3bf53b --- /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 0000000000..b570ea1eae --- /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 |