Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Jul 2005 20:33:04 +0200 (MEST)
From:      "Martin Jakob" <mj-mailinglist@gmx.de>
To:        Herve Quiroz <herve.quiroz@esil.univ-mrs.fr>
Cc:        freebsd-java@freebsd.org
Subject:   Re: RFC: New port for using Tomcat with jakarta-commons-daemon (jscv)
Message-ID:  <20654.1120674784@www86.gmx.net>

next in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
Hello Herve,

Since i found some time to work on my pet-port, i implemented some of your
suggestions, see below.

> Hi Martin,
> 
> ...
> So my plan for now is the following:
> 
> - Rework the sysutils/jakarta-commons-daemon port and add it in the
>   ports tree.
> - Add a rcNG/Tomcat port: sysutils/jakarta-tomcat-rncg. This port would
>   be bound to (but not depend on -- see below) a particular Tomcat port
>   (which user may pick at build/install), and would set an according
>   PKGNAMESUFFIX (e.g.  "50", "55") so that we could install several
>   startup scripts for the many installed Tomcat ports.

I untangled the jakarta-tomcat-daemon port into two seperate ports:

- jakarta-commons-daemon
- jakarta-tomcat55-launcher

(as always the names are open for suggestions :)

As the number says the script is intended for Tomcat 5.5, but when the
proper variables are changes, it could be used for Tomcat > 4.0 (but not
tested).
As i understand it, Tomcat 3 lacks the daemon interface, so this port would
still use the current way. 
With symlinking /usr/local/sbin/jscv to tomcat55, tomcat50 etc. it is
possible to use multiple installations of Tomcat. The symlinking is done to
let rcNG find the correct process(es) to stop via their names, instead of
simply all running jscvs.

> - Have each Tomcat port in the tree depend on an according
>   jakarta-tomcat-rncgXX port. That's why we don't want the tomcat-rcng
>   ports to depend on a particular Tomcat port (cyclic dependency).

I must confess i have not thought a lot about dependencies.
In the current implementation:

jakarta-commons-daemon no dependency on Tomcat.
jakarta-tomcat55-launcher -> jakarta-commons-daemon but also no Tomcat
dependency.

> ...
> The PKGNAMESUFFIX and "multiple tomcat launchers" approach described in
> step 2 means that there will be different configuration settings, each
> specific to one tomcat version (e.g. "tomcat50_enable",
> "tomcat55_javahome"...).

Yes, i used this idea in my approach.

> However, we need to discuss the patch-jsvc-unix.c issue. I don't think
> it is good to disable some FreeBSD-specific code in a generic utility
> port such as jakarta-commons-daemon. But you seem to think this is
> useful in our Tomcat/rcNG case. Hence, here again I need feedback and/or
> contribution or we will probably have to have two distinct ports
> (jakarta-commons-daemon and jakarta-tomcat-launcher), possibly with the
> later importing stuff from the former.

I am uneasy with this patch myself, but it was the only way i found to use
the already implemented rcNG functions for stop, status and poll.
BTW, stopping the daemon takes really a long time, but i do not have an idea
why this is the case :(
I will look further into it, but ideas about the cause of this behaviour are
welcome.

> ... 

> Herve

I hope the attached shars make it unharmed to the list.

--
Martin
[-- Attachment #2 --]
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	jakarta-commons-daemon/
#	jakarta-commons-daemon/files
#	jakarta-commons-daemon/files/patch-configure
#	jakarta-commons-daemon/files/patch-jsvc-unix.c
#	jakarta-commons-daemon/Makefile
#	jakarta-commons-daemon/distinfo
#	jakarta-commons-daemon/pkg-descr
#	jakarta-commons-daemon/pkg-message
#
echo c - jakarta-commons-daemon/
mkdir -p jakarta-commons-daemon/ > /dev/null 2>&1
echo c - jakarta-commons-daemon/files
mkdir -p jakarta-commons-daemon/files > /dev/null 2>&1
echo x - jakarta-commons-daemon/files/patch-configure
sed 's/^X//' >jakarta-commons-daemon/files/patch-configure << 'END-of-jakarta-commons-daemon/files/patch-configure'
X$FreeBSD$
X
XPatch to have configure script recognize FreeBSD 5.x and 6.x
X
X--- src/native/unix/configure.orig Wed Dec 22 18:53:10 2004
X+++ src/native/unix/configure Wed Dec 22 18:53:30 2004
X@@ -2583,7 +2583,7 @@
X     CFLAGS="$CFLAGS -DOS_SYSV -DDSO_DLFCN -Kthread"
X     LDFLAGS="-Kthread $LDFLAGS -ldl"
X     ;;
X-  freebsd4.?)
X+  freebsd[456].?)
X     CFLAGS="$CFLAGS -DOS_FREEBSD -DDSO_DLFCN -D_THREAD_SAFE -pthread"
X     LDFLAGS="-pthread $LDFLAGS"
X     supported_os="freebsd"
END-of-jakarta-commons-daemon/files/patch-configure
echo x - jakarta-commons-daemon/files/patch-jsvc-unix.c
sed 's/^X//' >jakarta-commons-daemon/files/patch-jsvc-unix.c << 'END-of-jakarta-commons-daemon/files/patch-jsvc-unix.c'
X--- src/native/unix/native/jsvc-unix.c.orig    Sat Jun 18 15:27:16 2005
X+++ src/native/unix/native/jsvc-unix.c Sat Jun 18 15:27:55 2005
X@@ -601,6 +601,13 @@
X     uid_t uid=0;
X     gid_t gid=0;
X
X+#ifdef OS_FREEBSD
X+    /* to use the rcNG infrastructure properly (stopping the process),
X+       it is necessary, to get atleast the processname/path
X+       via the ps command. So set this via setproctitle() */
X+    setproctitle("%s", argv[0]);
X+#endif /* ifdef OS_FREEBSD */
X+
X     /* Parse command line arguments */
X     args=arguments(argc,argv);
X     if (args==NULL) return(1);
END-of-jakarta-commons-daemon/files/patch-jsvc-unix.c
echo x - jakarta-commons-daemon/Makefile
sed 's/^X//' >jakarta-commons-daemon/Makefile << 'END-of-jakarta-commons-daemon/Makefile'
X# New ports collection makefile for: Jakarta Tomcat Daemon
X# Date created:	May 18, 2005
X# Whom:		mj@freebsd.local
X#
X# $FreeBSD$
X#
X
XPORTNAME=	commons-daemon
XPORTVERSION=	1.0.1
XCATEGORIES=	java
XMASTER_SITES=	${MASTER_SITE_APACHE_JAKARTA}
XMASTER_SITE_SUBDIR=	commons/daemon/source
XPKGNAMEPREFIX=	jakarta-
XDISTNAME=	daemon-${PORTVERSION}
X
XMAINTAINER=	ports@FreeBSD.org
XCOMMENT=	Start Java programs as a Unix Daemon
X
XGNU_CONFIGURE=		yes
XUSE_GMAKE=		yes
XNATIVE_WRKSRC=		${WRKSRC}/src/native/unix
XCONFIGURE_WRKSRC=	${NATIVE_WRKSRC}
X
XUSE_JAVA=	yes
XJAVA_VERSION=	1.3+
X
XCONTROL_PROGRAM=jsvc
X
XPLIST_FILES=	sbin/${CONTROL_PROGRAM} \
X
X.include <bsd.port.pre.mk>
X
XCONFIGURE_ARGS+=	--with-java="${JAVA_HOME}"
X
Xdo-build:
X	cd ${NATIVE_WRKSRC}/native; ${SETENV} ${MAKE_ENV} ${GMAKE}
X
Xdo-install:
X	@${ECHO_CMD} "=> Installing ${CONTROL_PROGRAM} in ${PREFIX}/sbin/"
X	@${INSTALL_PROGRAM} ${NATIVE_WRKSRC}/${CONTROL_PROGRAM} ${PREFIX}/sbin/${CONTROL_PROGRAM}
X
Xpost-install:
X	@${ECHO_CMD} ""
X	@${CAT} ${PKGMESSAGE}
X
X.include <bsd.port.post.mk>
END-of-jakarta-commons-daemon/Makefile
echo x - jakarta-commons-daemon/distinfo
sed 's/^X//' >jakarta-commons-daemon/distinfo << 'END-of-jakarta-commons-daemon/distinfo'
XMD5 (daemon-1.0.1.tar.gz) = df3eb5aafa53ca530843a09d40b8a1c0
XSIZE (daemon-1.0.1.tar.gz) = 301023
END-of-jakarta-commons-daemon/distinfo
echo x - jakarta-commons-daemon/pkg-descr
sed 's/^X//' >jakarta-commons-daemon/pkg-descr << 'END-of-jakarta-commons-daemon/pkg-descr'
XRun Java programs as Unix daemon.
X
XWWW: http://jakarta.apache.org/commons/daemon/
END-of-jakarta-commons-daemon/pkg-descr
echo x - jakarta-commons-daemon/pkg-message
sed 's/^X//' >jakarta-commons-daemon/pkg-message << 'END-of-jakarta-commons-daemon/pkg-message'
XJakarta-Commons-Daemon is intended for running Java applications
Xas Unix daemons.
X
END-of-jakarta-commons-daemon/pkg-message
exit


[-- Attachment #3 --]
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	jakarta-tomcat55-launcher/
#	jakarta-tomcat55-launcher/files
#	jakarta-tomcat55-launcher/files/tomcat55.sh
#	jakarta-tomcat55-launcher/work
#	jakarta-tomcat55-launcher/work/.extract_done.jakarta-tomcat55-launcher-1.0._usr_local
#	jakarta-tomcat55-launcher/work/.patch_done.jakarta-tomcat55-launcher-1.0._usr_local
#	jakarta-tomcat55-launcher/work/.configure_done.jakarta-tomcat55-launcher-1.0._usr_local
#	jakarta-tomcat55-launcher/work/.build_done.jakarta-tomcat55-launcher-1.0._usr_local
#	jakarta-tomcat55-launcher/work/.PLIST.mktmp
#	jakarta-tomcat55-launcher/work/.PLIST.flattened
#	jakarta-tomcat55-launcher/work/.PLIST.setuid
#	jakarta-tomcat55-launcher/work/.PLIST.writable
#	jakarta-tomcat55-launcher/work/.PLIST.objdump
#	jakarta-tomcat55-launcher/work/.install_done.jakarta-tomcat55-launcher-1.0._usr_local
#	jakarta-tomcat55-launcher/Makefile
#	jakarta-tomcat55-launcher/pkg-descr
#	jakarta-tomcat55-launcher/pkg-message
#
echo c - jakarta-tomcat55-launcher/
mkdir -p jakarta-tomcat55-launcher/ > /dev/null 2>&1
echo c - jakarta-tomcat55-launcher/files
mkdir -p jakarta-tomcat55-launcher/files > /dev/null 2>&1
echo x - jakarta-tomcat55-launcher/files/tomcat55.sh
sed 's/^X//' >jakarta-tomcat55-launcher/files/tomcat55.sh << 'END-of-jakarta-tomcat55-launcher/files/tomcat55.sh'
X#!/bin/sh
X#
X# $FreeBSD$
X#
X
X# PROVIDE: tomcat55
X# REQUIRE: NETWORKING SERVERS
X# BEFORE: DAEMON
X# KEYWORD: shutdown
X
X#
X# Add the following lines to /etc/rc.conf to enable tomcat:
X# tomcat55_enable (bool):                Set to "NO" by default.
X#                                      Set it to "YES" to enable tomcat
X### Optional
X# tomcat55_tcuser (str):                 User to run tomcat as, Default to "www"
X#                                      the used jsvc program has its own method
X#                                      to change the user, so use the variable name
X#                                      "tcuser" instead of the rcNG-"user" variable 
X# tomcat55_javahome (str):               Set to "/usr/local/jdk1.4.2" by default.
X# tomcat55_jvmtype (str):                What JavaVM Type to use, server or client
X#                                      Default to "server" 
X# tomcat55_catalinahome (string):        Home directory of the Tomcat installation        
X#                                      defaults to "/usr/local/jakarta-tomcat5.0"
X#
X# tomcat55_catalinaopts (str):           Setting system properties
X#                                      eg. "-Djava.awt.headless=true" etc.
X#
X# tomcat55_javaopts (str):               Setting non-standard options regarding
X#                                      the JVM. 
X#                                      eg. "-Xms128m -Xmx128m", "-Xdebug" etc.
X#
X
X. /etc/rc.subr
X
Xname="tomcat55"
Xrcvar=`set_rcvar`
X
Xtomcat55_tcpidfile="/var/run/tomcat.pid"
X
X[ -z "$tomcat55_enable" ]       && tomcat55_enable="NO"
X[ -z "$tomcat55_tcuser" ]       && tomcat55_tcuser="www"
X[ -z "$tomcat55_javahome" ]     && tomcat55_javahome="/usr/local/jdk1.4.2"
X[ -z "$tomcat55_jvmtype" ]      && tomcat55_jvmtype="server"
X[ -z "$tomcat55_catalinahome" ] && tomcat55_catalinahome="/usr/local/jakarta-tomcat5.0"
X
Xload_rc_config $name
X
X# export these explizit  
Xexport LD_LIBRARY_PATH="$tomcat55_javahome/jre/lib/i386/$tomcat55_jvmtype:$tomcat55_javahome/jre/lib/i386"
X
Xcommand="/usr/local/sbin/tomcat55"
Xarguments="-jvm $tomcat55_jvmtype \
X              -errfile /dev/null \
X              -outfile $tomcat55_catalinahome/logs/catalina.out \
X              -pidfile $tomcat55_tcpidfile \
X              -user $tomcat55_tcuser \
X              -home $tomcat55_javahome \
X              -Dcatalina.home=$tomcat55_catalinahome \
X              -Djava.io.tmpdir=$tomcat55_catalinahome/temp \
X              -cp $tomcat55_javahome/lib/tools.jar:$tomcat55_catalinahome/bin/commons-daemon.jar:$tomcat55_catalinahome/bin/bootstrap.jar"
X
Xbootclassfile="org.apache.catalina.startup.Bootstrap"
X
Xif [ -n "$tomcat55_catalinaopts" ]; then
X   arguments="$arguments $tomcat55_catalinaopts"
Xfi
X
Xif [ -n "$tomcat55_javaopts" ]; then
X   arguments="$arguments $tomcat55_javaopts"
Xfi
X
Xcommand_args="$arguments $bootclassfile"
X
Xrun_rc_command "$1"
END-of-jakarta-tomcat55-launcher/files/tomcat55.sh
echo c - jakarta-tomcat55-launcher/work
mkdir -p jakarta-tomcat55-launcher/work > /dev/null 2>&1
echo x - jakarta-tomcat55-launcher/work/.extract_done.jakarta-tomcat55-launcher-1.0._usr_local
sed 's/^X//' >jakarta-tomcat55-launcher/work/.extract_done.jakarta-tomcat55-launcher-1.0._usr_local << 'END-of-jakarta-tomcat55-launcher/work/.extract_done.jakarta-tomcat55-launcher-1.0._usr_local'
END-of-jakarta-tomcat55-launcher/work/.extract_done.jakarta-tomcat55-launcher-1.0._usr_local
echo x - jakarta-tomcat55-launcher/work/.patch_done.jakarta-tomcat55-launcher-1.0._usr_local
sed 's/^X//' >jakarta-tomcat55-launcher/work/.patch_done.jakarta-tomcat55-launcher-1.0._usr_local << 'END-of-jakarta-tomcat55-launcher/work/.patch_done.jakarta-tomcat55-launcher-1.0._usr_local'
END-of-jakarta-tomcat55-launcher/work/.patch_done.jakarta-tomcat55-launcher-1.0._usr_local
echo x - jakarta-tomcat55-launcher/work/.configure_done.jakarta-tomcat55-launcher-1.0._usr_local
sed 's/^X//' >jakarta-tomcat55-launcher/work/.configure_done.jakarta-tomcat55-launcher-1.0._usr_local << 'END-of-jakarta-tomcat55-launcher/work/.configure_done.jakarta-tomcat55-launcher-1.0._usr_local'
END-of-jakarta-tomcat55-launcher/work/.configure_done.jakarta-tomcat55-launcher-1.0._usr_local
echo x - jakarta-tomcat55-launcher/work/.build_done.jakarta-tomcat55-launcher-1.0._usr_local
sed 's/^X//' >jakarta-tomcat55-launcher/work/.build_done.jakarta-tomcat55-launcher-1.0._usr_local << 'END-of-jakarta-tomcat55-launcher/work/.build_done.jakarta-tomcat55-launcher-1.0._usr_local'
END-of-jakarta-tomcat55-launcher/work/.build_done.jakarta-tomcat55-launcher-1.0._usr_local
echo x - jakarta-tomcat55-launcher/work/.PLIST.mktmp
sed 's/^X//' >jakarta-tomcat55-launcher/work/.PLIST.mktmp << 'END-of-jakarta-tomcat55-launcher/work/.PLIST.mktmp'
Xetc/rc.d/tomcat55.sh
X/usr/local/sbin/tomcat55
END-of-jakarta-tomcat55-launcher/work/.PLIST.mktmp
echo x - jakarta-tomcat55-launcher/work/.PLIST.flattened
sed 's/^X//' >jakarta-tomcat55-launcher/work/.PLIST.flattened << 'END-of-jakarta-tomcat55-launcher/work/.PLIST.flattened'
X/usr/local/etc/rc.d/tomcat55.sh
X/usr/local/sbin/tomcat55
END-of-jakarta-tomcat55-launcher/work/.PLIST.flattened
echo x - jakarta-tomcat55-launcher/work/.PLIST.setuid
sed 's/^X//' >jakarta-tomcat55-launcher/work/.PLIST.setuid << 'END-of-jakarta-tomcat55-launcher/work/.PLIST.setuid'
END-of-jakarta-tomcat55-launcher/work/.PLIST.setuid
echo x - jakarta-tomcat55-launcher/work/.PLIST.writable
sed 's/^X//' >jakarta-tomcat55-launcher/work/.PLIST.writable << 'END-of-jakarta-tomcat55-launcher/work/.PLIST.writable'
END-of-jakarta-tomcat55-launcher/work/.PLIST.writable
echo x - jakarta-tomcat55-launcher/work/.PLIST.objdump
sed 's/^X//' >jakarta-tomcat55-launcher/work/.PLIST.objdump << 'END-of-jakarta-tomcat55-launcher/work/.PLIST.objdump'
END-of-jakarta-tomcat55-launcher/work/.PLIST.objdump
echo x - jakarta-tomcat55-launcher/work/.install_done.jakarta-tomcat55-launcher-1.0._usr_local
sed 's/^X//' >jakarta-tomcat55-launcher/work/.install_done.jakarta-tomcat55-launcher-1.0._usr_local << 'END-of-jakarta-tomcat55-launcher/work/.install_done.jakarta-tomcat55-launcher-1.0._usr_local'
END-of-jakarta-tomcat55-launcher/work/.install_done.jakarta-tomcat55-launcher-1.0._usr_local
echo x - jakarta-tomcat55-launcher/Makefile
sed 's/^X//' >jakarta-tomcat55-launcher/Makefile << 'END-of-jakarta-tomcat55-launcher/Makefile'
X# New ports collection makefile for: Jakarta Tomcat Launcher
X# Date created:	May 18, 2005
X# Whom:		mj@freebsd.local
X#
X# $FreeBSD$
X#
X
XPORTNAME=	tomcat55-launcher
XPORTVERSION=	1.0
XCATEGORIES=	www java
XMASTER_SITES=	# none
XPKGNAMEPREFIX=	jakarta-
XDISTFILES=	# none
X
XMAINTAINER=	ports@FreeBSD.org
XCOMMENT=	Start Jakarta Tomcat as a Unix Daemon
X
XNO_BUILD=	yes
XNO_WRKSUBDIR=	yes
X
XCONTROL_PROGRAM=jsvc
XTOMCAT_SERVICE=	tomcat55
X
XRUN_DEPENDS=	${PREFIX}/sbin/${CONTROL_PROGRAM}:${PORTSDIR}/java/jakarta-commons-daemon
X
XPLIST_FILES=	etc/rc.d/"${TOMCAT_SERVICE}.sh" \
X		${PREFIX}/sbin/${TOMCAT_SERVICE}
X
X.include <bsd.port.pre.mk>
X
Xdo-install:
X	@${ECHO_CMD} "=> Installing ${PREFIX}/etc/rc.d/${TOMCAT_SERVICE}.sh startup script."
X	@${INSTALL_SCRIPT} -m 555 ${FILESDIR}/"${TOMCAT_SERVICE}.sh" ${PREFIX}/etc/rc.d/"${TOMCAT_SERVICE}.sh"
X	@${ECHO_CMD} "=> Create Symlink: ${PREFIX}/sbin/${CONTROL_PROGRAM} -> ${PREFIX}/sbin/${TOMCAT_SERVICE}"
X	@${LN} -sf ${PREFIX}/sbin/${CONTROL_PROGRAM} ${PREFIX}/sbin/${TOMCAT_SERVICE}
X
Xpost-install:
X	@${ECHO_CMD} ""
X	@${CAT} ${PKGMESSAGE}
X
X.include <bsd.port.post.mk>
END-of-jakarta-tomcat55-launcher/Makefile
echo x - jakarta-tomcat55-launcher/pkg-descr
sed 's/^X//' >jakarta-tomcat55-launcher/pkg-descr << 'END-of-jakarta-tomcat55-launcher/pkg-descr'
XRun Tomcat as Unix daemon.
X
XWWW: http://jakarta.apache.org/commons/daemon/
END-of-jakarta-tomcat55-launcher/pkg-descr
echo x - jakarta-tomcat55-launcher/pkg-message
sed 's/^X//' >jakarta-tomcat55-launcher/pkg-message << 'END-of-jakarta-tomcat55-launcher/pkg-message'
XTo run tomcat server from startup, add tomcat_enable="YES"
Xin your /etc/rc.conf or /etc/rc.conf.local
XExtra options can be found in startup script.
X
END-of-jakarta-tomcat55-launcher/pkg-message
exit


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20654.1120674784>