From 80adb772de2781799f19e36c9d19a5dcbd511dbb Mon Sep 17 00:00:00 2001 From: Micha Glave Date: Mon, 11 Apr 2011 17:02:06 +0200 Subject: [PATCH] ebuild based on http://subversion.fem.tu-ilmenau.de/repository/fem-overlay/trunk/ --- dev-java/nexus/Manifest | 3 + dev-java/nexus/files/nexus.init | 549 ++++++++++++++++++++++++++++ dev-java/nexus/nexus-1.9.0.2.ebuild | 70 ++++ 3 files changed, 622 insertions(+) create mode 100644 dev-java/nexus/Manifest create mode 100755 dev-java/nexus/files/nexus.init create mode 100644 dev-java/nexus/nexus-1.9.0.2.ebuild diff --git a/dev-java/nexus/Manifest b/dev-java/nexus/Manifest new file mode 100644 index 0000000..0a66a4d --- /dev/null +++ b/dev-java/nexus/Manifest @@ -0,0 +1,3 @@ +AUX nexus.init 15022 RMD160 fa43eceee0de9fc1ce52e07a5052dc3394fae423 SHA1 848b94860861c46d4a986d38d6ba584b5660b574 SHA256 8426a084371a1110a35294fecb3b0d22162509663e42b7b8167b7c897f6a7e3f +DIST nexus-oss-webapp-1.9.0.2-bundle.tar.gz 27416107 RMD160 10b53fc44acfd50189464670ab4657d0b8b73511 SHA1 86d05c788808a2c32858e0121d92782148363f2a SHA256 53d41ba0da03869221902e4e259a6fd3e06ff5fbf5896343f354b64a5d141646 +EBUILD nexus-1.9.0.2.ebuild 1796 RMD160 efcd2c44c6240e8bf82728a4f0654d170bdf0413 SHA1 28b6908aec5e4d27dca145d43788f0b384f75177 SHA256 573cf741f271b2d9fa87e6bbc8385f2e5aa144e11e44698c9e8e0fd49383cf31 diff --git a/dev-java/nexus/files/nexus.init b/dev-java/nexus/files/nexus.init new file mode 100755 index 0000000..8bff44c --- /dev/null +++ b/dev-java/nexus/files/nexus.init @@ -0,0 +1,549 @@ +#! /bin/sh + +DEF_APP_NAME="nexus" +DEF_APP_LONG_NAME="Nexus Wrapper Sample Application" + +# Application +APP_NAME="nexus-webapp" +APP_LONG_NAME="Sonatype Nexus Repository Manager" + +# Wrapper +WRAPPER_CMD="/usr/share/nexus/bin/jsw/linux-x86-64/wrapper" +WRAPPER_CONF="/etc/nexus/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/dev-java/nexus/nexus-1.9.0.2.ebuild b/dev-java/nexus/nexus-1.9.0.2.ebuild new file mode 100644 index 0000000..d981058 --- /dev/null +++ b/dev-java/nexus/nexus-1.9.0.2.ebuild @@ -0,0 +1,70 @@ + +EAPI=2 + +inherit eutils java-pkg-2 + +DESCRIPTION="Nexus Maven Repository Server" + +MY_P=${P/nexus/nexus-oss-webapp} +SLOT="0" +SRC_URI="http://nexus.sonatype.org/downloads/${MY_P}-bundle.tar.gz" +KEYWORDS="~amd64 ~x86" + +IUSE="" + +RDEPEND=">=virtual/jre-1.5" +DEPEND=">=virtual/jdk-1.5" + +S=${WORKDIR}/${MY_P} + +NEXUS_HOME=/usr/share/${PN} + +pkg_setup() { + java-pkg-2_pkg_setup + enewgroup nexus + enewuser nexus -1 /bin/sh -1 nexus +} + +src_install() { + cd "${S}/bin/jsw" + case ${ARCH} in + x86) F_ARCH="linux-x86-32" ;; + amd64) F_ARCH="linux-x86-64" ;; + *) die "This ebuild doesn't support ${ARCH}." ;; + esac + ls | grep -v $F_ARCH | xargs rm -vR || die "remove failed" + + dodir ${NEXUS_HOME} + + diropts -m775 -o nexus -g nexus + keepdir /etc/nexus + keepdir /var/lib/nexus/ + keepdir /var/log/nexus/ + keepdir /var/run/nexus/ + keepdir /var/tmp/nexus/ + + dosym /var/log/nexus ${NEXUS_HOME}/logs + dosym /var/log/nexus /var/lib/nexus/logs + dosym /etc/nexus ${NEXUS_HOME}/conf + + # zunaechst nur an localhost binden + sed -i -e 's:application-host=0.0.0.0:application-host=127.0.0.1:' "${S}"/conf/plexus.properties + # working-dir aendern + sed -i -e 's:nexus-work=\${basedir}/../sonatype-work/nexus:nexus-work=/var/lib/nexus:' "${S}"/conf/plexus.properties + + cd "${S}" + chown -R nexus:nexus bin/* runtime/* + cp -pPR bin runtime "${D}${NEXUS_HOME}" || die "failed to copy runtime" + cp -pPR conf/* "${D}/etc/nexus" || die "failed to copy conf" + + dosym /var/tmp/nexus /usr/share/nexus/runtime/tmp + + newinitd "${FILESDIR}"/nexus.init nexus + + elog "Nexus storage is /var/lib/nexus. Ensure that there is enough space." + + elog "The default password for user admin is admin123." + + ewarn "For security reasons nexus is bound to localhost." + ewarn "Before binding to public ip or mapping with mod_jk, please change passwords." +}