From 229c3f67eb790778528dbaa47c2f22b4f7cb0585 Mon Sep 17 00:00:00 2001 From: Ernst de Haan Date: Thu, 21 Feb 2002 20:06:55 +0000 Subject: Cleaned things up. Made things working :-) Both the startup script in ${PREFIX}/etc/rc.d and the control script in ${PREFIX}/bin have been refactored and now actually work very well. Using the 'www' user and group, creating them if they don't exist. I've used the same approach as www/apache13. STDOUT_LOG and STDERR_LOG are now fixed (no ?= anymore) since the package deinstall does not support a different location. This fixes the first half of PR 28624. See: http://www.freebsd.org/cgi/query-pr.cgi?pr=34931 Reported by: Kees Jan Koster --- www/jakarta-tomcat4/Makefile | 56 ++++++----- www/jakarta-tomcat4/files/jakarta-tomcat.sh | 10 +- www/jakarta-tomcat4/files/startup.sh | 10 +- www/jakarta-tomcat4/files/tomcatctl | 144 ++++++++++++++++++---------- www/jakarta-tomcat4/pkg-deinstall | 25 +++-- www/jakarta-tomcat4/pkg-plist | 2 - 6 files changed, 147 insertions(+), 100 deletions(-) (limited to 'www/jakarta-tomcat4') diff --git a/www/jakarta-tomcat4/Makefile b/www/jakarta-tomcat4/Makefile index 2fe0c1d7944e..2a8597c4167c 100644 --- a/www/jakarta-tomcat4/Makefile +++ b/www/jakarta-tomcat4/Makefile @@ -7,6 +7,7 @@ PORTNAME= jakarta-tomcat PORTVERSION= 3.2.4 +PORTREVISION= 1 CATEGORIES= www java MASTER_SITES= http://jakarta.apache.org/builds/jakarta-tomcat/release/v${PORTVERSION}/bin/ \ http://www.metaverse.nl/~ernst/ \ @@ -25,40 +26,34 @@ LOG_DIR= ${APP_HOME}/logs PLIST_SUB+= T=${APP_HOME:S/^${PREFIX}\///} APP_TITLE= Jakarta Tomcat APP_SHORTNAME= tomcat -APPCTL_NAME= ${APP_SHORTNAME}ctl -CTL_SCRIPT= ${PREFIX}/bin/${APPCTL_NAME} +CONTROL_SCRIPT_NAME= ${APP_SHORTNAME}ctl +CONTROL_SCRIPT= ${PREFIX}/bin/${CONTROL_SCRIPT_NAME} STARTUP_ORDER?= 020 STARTUP_SCRIPT= ${PREFIX}/etc/rc.d/${STARTUP_ORDER}.${PORTNAME}.sh JAVA_HOME?= ${LOCALBASE}/jdk1.3.1 JAVA_PORT?= ${PORTSDIR}/java/jdk13 -USER_NAME?= ${APP_SHORTNAME} -GROUP_NAME?= ${USER_NAME} -USER_ID?= 7103 -GROUP_ID?= ${USER_ID} +USER_NAME= www +GROUP_NAME= www PW?= /usr/sbin/pw LISTEN_PORT?= 8080 -STDOUT_LOG?= ${LOG_DIR}/stdout.log -STDERR_LOG?= ${LOG_DIR}/stderr.log +STDOUT_LOG= ${LOG_DIR}/stdout.log +STDERR_LOG= ${LOG_DIR}/stderr.log AUTO_START?= NO pre-install: @${ECHO_CMD} "Installation settings:" @${ECHO_CMD} " Destination directory: ${APP_HOME}" - @${ECHO_CMD} " Control script location: ${CTL_SCRIPT}" + @${ECHO_CMD} " Control script location: ${CONTROL_SCRIPT}" @${ECHO_CMD} " Startup script location: ${STARTUP_SCRIPT}" @${ECHO_CMD} " Location of JDK: ${JAVA_HOME}" @${ECHO_CMD} " Location of Java port: ${JAVA_PORT}" - @${ECHO_CMD} " Running as (user/group): ${USER_NAME}/${GROUP_NAME} (${USER_ID}:${GROUP_ID})" + @${ECHO_CMD} " Running as (user/group): ${USER_NAME}/${GROUP_NAME}" @${ECHO_CMD} " Port to listen at: ${LISTEN_PORT}" @${ECHO_CMD} " Logfile stdout: ${STDOUT_LOG}" @${ECHO_CMD} " Logfile stderr: ${STDERR_LOG}" @${ECHO_CMD} " Starting after install: ${AUTO_START}" do-install: - @# Add the group and the user if they do not exist - ${PW} groupadd -n ${GROUP_NAME} -g ${GROUP_ID} || true - ${PW} useradd -n ${USER_NAME} -u ${USER_ID} -g ${GROUP_NAME} -c "${APP_TITLE} account" -d ${APP_HOME} -s ${SH} -h - || true - @# Create the destination directory ${MKDIR} ${APP_HOME} @@ -75,10 +70,17 @@ do-install: > ${WRKDIR}/workers.properties ${MV} ${WRKDIR}/workers.properties ${APP_HOME}/conf/workers.properties + @# Install the startup script + ${CAT} ${FILESDIR}/${PORTNAME}.sh \ + | ${SED} "/%%USER_NAME%%/s//${USER_NAME}/" \ + | ${SED} "/%%APP_SHORTNAME%%/s//${APP_SHORTNAME}/" \ + | ${SED} "/%%CONTROL_SCRIPT%%/s//${CONTROL_SCRIPT:S/\//\\\//g}/" \ + > ${STARTUP_SCRIPT} + ${CHMOD} 0554 ${STARTUP_SCRIPT} + @# Install the control script - ${CAT} ${FILESDIR}/${APPCTL_NAME} \ + ${CAT} ${FILESDIR}/${CONTROL_SCRIPT_NAME} \ | ${SED} "/%%PORTNAME%%/s//${PORTNAME}/" \ - | ${SED} "/%%PORTVERSION%%/s//${PORTVERSION}/" \ | ${SED} "/%%APP_TITLE%%/s//${APP_TITLE}/" \ | ${SED} "/%%APP_SHORTNAME%%/s//${APP_SHORTNAME}/" \ | ${SED} "/%%APP_HOME%%/s//${APP_HOME:S/\//\\\//g}/" \ @@ -88,13 +90,9 @@ do-install: | ${SED} "/%%USER_NAME%%/s//${USER_NAME}/" \ | ${SED} "/%%STDOUT_LOG%%/s//${STDOUT_LOG:S/\//\\\//g}/" \ | ${SED} "/%%STDERR_LOG%%/s//${STDERR_LOG:S/\//\\\//g}/" \ - > ${CTL_SCRIPT} - ${CHOWN} ${USER_NAME}:${GROUP_NAME} ${CTL_SCRIPT} - ${CHMOD} 6554 ${CTL_SCRIPT} - - @# Install the startup script - ${CP} ${FILESDIR}/${PORTNAME}.sh ${STARTUP_SCRIPT} - ${CHMOD} 0554 ${STARTUP_SCRIPT} + > ${CONTROL_SCRIPT} + ${CHOWN} ${USER_NAME}:${GROUP_NAME} ${CONTROL_SCRIPT} + ${CHMOD} 6554 ${CONTROL_SCRIPT} @# Create the directories that the application will create at the @# first run @@ -115,21 +113,21 @@ do-install: @# Install the man page .if !defined(NOPORTDOCS) - ${CAT} ${FILESDIR}/${APPCTL_NAME}.1 \ + ${CAT} ${FILESDIR}/${CONTROL_SCRIPT_NAME}.1 \ | ${SED} "/%%PREFIX%%/s//${PREFIX:S/\//\\\//g}/" \ - > ${WRKDIR}/${APPCTL_NAME}.1 - ${INSTALL_MAN} ${WRKDIR}/${APPCTL_NAME}.1 ${MANPREFIX}/man/man1 + > ${WRKDIR}/${CONTROL_SCRIPT_NAME}.1 + ${INSTALL_MAN} ${WRKDIR}/${CONTROL_SCRIPT_NAME}.1 ${MANPREFIX}/man/man1 .endif post-install: @${ECHO_CMD} "${APP_TITLE} ${PORTVERSION} has been installed in ${APP_HOME}." - @${ECHO_CMD} "If you would like a user to be able to use ${APPCTL_NAME}, then put this user in the group ${GROUP_NAME}." + @${ECHO_CMD} "If you would like a user to be able to use ${CONTROL_SCRIPT_NAME}, then put this user in the group ${GROUP_NAME}." .if !defined(NOPORTDOCS) - @${ECHO_CMD} "Use 'man ${APPCTL_NAME}' for information about starting and stopping ${APP_TITLE}." + @${ECHO_CMD} "Use 'man ${CONTROL_SCRIPT_NAME}' for information about starting and stopping ${APP_TITLE}." .endif .if ${AUTO_START} == "YES" @${ECHO_CMD} "Starting ${APP_TITLE}..." - @${CTL_SCRIPT} start || true + @${CONTROL_SCRIPT} start || true .endif .include diff --git a/www/jakarta-tomcat4/files/jakarta-tomcat.sh b/www/jakarta-tomcat4/files/jakarta-tomcat.sh index d67a00118237..cbd3e16f99b1 100644 --- a/www/jakarta-tomcat4/files/jakarta-tomcat.sh +++ b/www/jakarta-tomcat4/files/jakarta-tomcat.sh @@ -3,21 +3,17 @@ # Set some variables USER_NAME=%%USER_NAME%% MYSELF=`basename $0` -CONTROL_SCRIPT=%%CONTROL_SCRIPT%% case "$1" in start) - su - ${USER_NAME} -c "%%CONTROL_SCRIPT%% start" > /dev/null ; echo -n + su -f -m ${USER_NAME} -c "exec %%CONTROL_SCRIPT%% start" && echo -n ' %%APP_SHORTNAME%%' ;; stop) - su - ${USER_NAME} -c "%%CONTROL_SCRIPT%% stop" - ;; - restart) - su - ${USER_NAME} -c "%%CONTROL_SCRIPT%% restart" + su -f -m ${USER_NAME} -c "exec %%CONTROL_SCRIPT%% stop" && echo -n ' %%APP_SHORTNAME%%' ;; *) echo "" - echo "Usage: ${MYSELF} { start | stop | restart }" + echo "Usage: ${MYSELF} { start | stop }" echo "" exit 64 ;; diff --git a/www/jakarta-tomcat4/files/startup.sh b/www/jakarta-tomcat4/files/startup.sh index d67a00118237..cbd3e16f99b1 100644 --- a/www/jakarta-tomcat4/files/startup.sh +++ b/www/jakarta-tomcat4/files/startup.sh @@ -3,21 +3,17 @@ # Set some variables USER_NAME=%%USER_NAME%% MYSELF=`basename $0` -CONTROL_SCRIPT=%%CONTROL_SCRIPT%% case "$1" in start) - su - ${USER_NAME} -c "%%CONTROL_SCRIPT%% start" > /dev/null ; echo -n + su -f -m ${USER_NAME} -c "exec %%CONTROL_SCRIPT%% start" && echo -n ' %%APP_SHORTNAME%%' ;; stop) - su - ${USER_NAME} -c "%%CONTROL_SCRIPT%% stop" - ;; - restart) - su - ${USER_NAME} -c "%%CONTROL_SCRIPT%% restart" + su -f -m ${USER_NAME} -c "exec %%CONTROL_SCRIPT%% stop" && echo -n ' %%APP_SHORTNAME%%' ;; *) echo "" - echo "Usage: ${MYSELF} { start | stop | restart }" + echo "Usage: ${MYSELF} { start | stop }" echo "" exit 64 ;; diff --git a/www/jakarta-tomcat4/files/tomcatctl b/www/jakarta-tomcat4/files/tomcatctl index 5ba640f927ad..a28cac7623a2 100644 --- a/www/jakarta-tomcat4/files/tomcatctl +++ b/www/jakarta-tomcat4/files/tomcatctl @@ -1,9 +1,7 @@ #!/bin/sh # Set some variables -VERSION=%%PORTVERSION%% APP_HOME=%%APP_HOME%% -USER_NAME=%%USER_NAME%% STDOUT_LOG=%%STDOUT_LOG%% STDERR_LOG=%%STDERR_LOG%% JAR_FILE=${APP_HOME}/lib/webserver.jar @@ -22,13 +20,6 @@ if [ -f ${JAVA_HOME}/lib/tools.jar ] ; then CLASSPATH=${CLASSPATH}:${JAVA_HOME}/lib/tools.jar fi -# Check if we're being run as a shell script or as an rc script -if [ ${MYSELF} = "%%RC_SCRIPT_NAME%%" ]; then - AS_RC_SCRIPT=yes -else - AS_RC_SCRIPT=no -fi - # Check if the JAVA_HOME directory is defined, otherwise set it to the # fallback default if [ "${JAVA_HOME}a" = "a" ]; then @@ -36,64 +27,119 @@ if [ "${JAVA_HOME}a" = "a" ]; then fi JAVA_CMD=${JAVA_HOME}/bin/java -# Function that starts the application -start() { + +############################################################################## +# Function that shows an error message +# +# This function is called by the 'checks' function +# +# Parameters: +# 1: The message to be displayed. + +error() { + echo -n "%%APP_SHORTNAME%%: ERROR: " + echo $1 +} + + +############################################################################## +# Function that performs all checks necessary for starting or stopping the +# application. +# +# This function is called by the 'start' and 'stop' functions +# +# This function expects no parameters + +checks() { # Make sure the application directory does exist if [ ! -d ${APP_HOME} ]; then - if [ "${AS_RC_SCRIPT}" = "yes" ]; then - echo "" - fi - echo "%%APP_SHORTNAME%%: ERROR: Unable to find %%APP_TITLE%% home directory at ${APP_HOME}." + error "Unable to find %%APP_TITLE%% home directory at ${APP_HOME}." exit 2 fi # Make sure the application JAR file exists if [ ! -r ${JAR_FILE} ]; then - if [ "${AS_RC_SCRIPT}" = "yes" ]; then - echo "" - fi - echo "%%APP_SHORTNAME%%: ERROR: Unable to find %%APP_TITLE%% JAR file at ${JAR_FILE}." + error "Unable to find %%APP_TITLE%% JAR file at ${JAR_FILE}." exit 3 fi # Make sure the Java VM can be found if [ ! -x ${JAVA_CMD} ]; then - if [ "${AS_RC_SCRIPT}" = "yes" ]; then - echo "" - fi - echo "%%APP_SHORTNAME%%: ERROR: Unable to find Java VM at ${JAVA_HOME}." + error "Unable to find Java VM at ${JAVA_HOME}." exit 4 fi +} - if [ "${AS_RC_SCRIPT}" = "yes" ]; then - echo -n " %%APP_SHORTNAME%%" - fi - su - ${USER_NAME} -c "(cd ${APP_HOME} && ${JAVA_CMD} -cp ${CLASSPATH} -Dtomcat.home=${APP_HOME} org.apache.tomcat.startup.Tomcat) >> ${STDOUT_LOG} 2>> ${STDERR_LOG}" + +############################################################################## +# Functions that calls the application with the specified parameter +# +# Parameters: +# 1: The argument to pass to the application (optional) + +app() { + (cd ${APP_HOME} && ${JAVA_CMD} -cp ${CLASSPATH} -Dtomcat.home=${APP_HOME} org.apache.tomcat.startup.Tomcat $1 &) >> ${STDOUT_LOG} 2>> ${STDERR_LOG} +} + + +############################################################################## +# Function that starts the application +# +# This function is called from the main function +# +# This function expects no parameters + +start() { + # Perform the checks + checks + + # Stop the application + app } + +############################################################################## # Function that stops the application +# +# This function is called from the main function +# +# This function expects no parameters + stop() { - if [ "${AS_RC_SCRIPT}" = "yes" ]; then - echo -n " %%APP_SHORTNAME%%" - fi - su - ${USER_NAME} -c "(cd ${APP_HOME} && ${JAVA_CMD} -cp ${CLASSPATH} -Dtomcat.home=${APP_HOME} org.apache.tomcat.startup.Tomcat -stop) >> ${STDOUT_LOG} 2>> ${STDERR_LOG}" + # Perform the checks + checks + + # Stop the application + app -stop } -case "$1" in - start) - start - ;; - stop) - stop - ;; - restart) - stop - start - ;; - *) - echo "" - echo "Usage: ${MYSELF} { start | stop | restart }" - echo "" - exit 64 - ;; -esac + +############################################################################## +# Main function. This function calls the 'start' and 'stop' functions. +# +# Parameters: +# 1: The argument to this shell script + +main() { + case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + *) + echo "Usage: ${MYSELF} { start | stop | restart }" + exit 64 + ;; + esac +} + + +# Call the main function and exit +main $1 +exit 0 diff --git a/www/jakarta-tomcat4/pkg-deinstall b/www/jakarta-tomcat4/pkg-deinstall index 3a3071532612..3a131360f1a5 100644 --- a/www/jakarta-tomcat4/pkg-deinstall +++ b/www/jakarta-tomcat4/pkg-deinstall @@ -1,8 +1,21 @@ #!/bin/sh -PID_FILE=/var/run/jakarta-tomcat.pid -if [ -e ${PID_FILE} ]; then - echo -n "Jakarta Tomcat is still running." - /bin/kill `cat ${PID_FILE}` - rm -f ${PID_FILE} - echo " Stopped." +# +# This script does the following. +# +# Checks if the 'www' user exists. If it does, then it displays +# a message. +# +# $FreeBSD$ +# + +# Make sure we're called during the 'make deinstall' process +if [ "$2" != "POST-DEINSTALL" ]; then + exit 0 fi + +# If the user exists, then display a message +if pw usershow "www" 2>/dev/null 1>&2; then + echo "To delete the www user permanently, use 'pw userdel www'" +fi + +exit 0 diff --git a/www/jakarta-tomcat4/pkg-plist b/www/jakarta-tomcat4/pkg-plist index 492325cfec9b..23a54415cc5e 100644 --- a/www/jakarta-tomcat4/pkg-plist +++ b/www/jakarta-tomcat4/pkg-plist @@ -410,5 +410,3 @@ etc/rc.d/020.jakarta-tomcat.sh @dirrm %%T%%/conf @dirrm %%T%%/bin @dirrm %%T%% -@unexec pw groupdel tomcat || true -@unexec pw userdel tomcat || true -- cgit v1.2.3