The Jakarta Tomcat port creates a bad filesystem mess. Here are the problems: 1. The port doesn't use -sample files, so it tends to blow away configuration files which are generally very complex and sensitive. 2. The port insists on installing in a directory in /usr/local that has the version number tacked on. This means that an upgrade requires a total duplication of the entire installed structure. While the structure of the port as is makes it very easy to get Tomcat running the first time around, it is out of touch with how Tomcat is used. Tomcat is an application environment, much like an OS. In practice, the environment tends to be heavily customized. The port is useless if it can't allow an upgrade that preserves all the customization. This includes the config file, the shared directory, and all webapps. Fix: Stop putting the minor version number in the directory. I'm pretty sure it's against the porter's handbook. Regardless, it's asinine. Second, make sure that you don't mess with anything the user's done. Most ports do this just fine: install configuration files named -sample and perhaps give a tool to help people get things working the first time. In a complex environment like an app server, a consistent upgrade path is far more important than quick initial setup.
Responsible Changed From-To: freebsd-ports->znerd I'll handle this.
Committed a change for the first request to all Tomcat, Orion and JBoss ports. See forwarded commit message below. ---- Forwarded message --- znerd 2002/10/09 15:37:56 PDT Modified files: www/jakarta-tomcat3 Makefile www/jakarta-tomcat4 Makefile www/jakarta-tomcat41 Makefile www/orion Makefile www/orion-devel Makefile java/jboss2 Makefile java/jboss3 Makefile Log: Changed target installation directory so it does not include the minor version number anymore. Bumped PORTREVISION. PR: 43565 Requested by: Andrew Gerweck <andy@gerweck.dyndns.org> Revision Changes Path 1.7 +2 -2 ports/java/jboss2/Makefile 1.7 +2 -1 ports/java/jboss3/Makefile 1.36 +2 -2 ports/www/jakarta-tomcat3/Makefile 1.41 +2 -1 ports/www/jakarta-tomcat4/Makefile 1.43 +2 -1 ports/www/jakarta-tomcat41/Makefile 1.51 +2 -1 ports/www/orion-devel/Makefile 1.50 +2 -2 ports/www/orion/Makefile
This patch gives all tomcat conf files a ".pkg-dist" extension prior to installation. If there is not an existing conf file, the file without the .pkg-dist extension is installed. The working config files are not removed when pkg_delete runs. brent -- "Develop your talent, man, and leave the world something. Records are really gifts from people. To think that an artist would love you enough to share his music with anyone is a beautiful thing." -- Duane Allman
State Changed From-To: open->feedback Is this PR still relevant? We are sorry for the delay. Let's sort this out now.
Responsible Changed From-To: znerd->freebsd-java With znerd's permission, I'm doing a cleanup of his PRs as he is not active on the FreeBSD ports front for now. Over to the FreeBSD Java community.
FYI, here is the patch for www/jakarta-tomcat41, mainly based on the patch provided by Brent Verner, any suggestion is welcome. Kang Index: Makefile =================================================================== RCS file: /home/ncvs/ports/www/jakarta-tomcat41/Makefile,v retrieving revision 1.58 diff -u -r1.58 Makefile --- Makefile 6 Dec 2004 02:35:40 -0000 1.58 +++ Makefile 10 Dec 2004 14:01:48 -0000 @@ -7,6 +7,7 @@ PORTNAME= jakarta-tomcat PORTVERSION= 4.1.31 +PORTREVISION= 1 CATEGORIES= www java MASTER_SITES= ${MASTER_SITE_APACHE_JAKARTA} MASTER_SITE_SUBDIR= tomcat-4/v${PORTVERSION}/bin @@ -52,6 +53,8 @@ ${WRKSRC}/conf/server.xml JAR_FILE= bin/bootstrap.jar WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/work +CONF_EXT= sample +PLIST_SUB+= CONF_EXT=${CONF_EXT} .include <bsd.port.pre.mk> @@ -116,9 +119,19 @@ @${MKDIR} ${LOG_DIR} @${ECHO_CMD} " [ DONE ]" - @${ECHO_CMD} -n ">> Copying files to destination directory..." + @${ECHO_CMD} ">> Copying files to destination directory..." + @${CP} ${WRKDIR}/server.xml ${WRKSRC}/conf/ + @(cd ${WRKSRC};${FIND} conf -type f | ${SED} -e '/${CONF_EXT}/d') \ + | while read a; do \ + ${MV} ${WRKSRC}/$$a ${WRKSRC}/$$a.${CONF_EXT}; \ + if [ ! -e "${APP_HOME}/$$a" ]; then \ + ${ECHO_CMD} " Installing local configuration file: ${APP_HOME}/$$a"; \ + ${CP} ${WRKSRC}/$$a.${CONF_EXT} ${WRKSRC}/$$a; \ + else \ + ${ECHO_CMD} " Preserving local configuration file: ${APP_HOME}/$$a"; \ + fi; \ + done @${CP} -R ${WRKSRC}/* ${APP_HOME} - @${CP} ${WRKDIR}/server.xml ${APP_HOME}/conf/ @${ECHO_CMD} " [ DONE ]" @${ECHO_CMD} -n ">> Compiling and installing control program..." Index: pkg-plist =================================================================== RCS file: /home/ncvs/ports/www/jakarta-tomcat41/pkg-plist,v retrieving revision 1.23 diff -u -r1.23 pkg-plist --- pkg-plist 6 Dec 2004 02:35:40 -0000 1.23 +++ pkg-plist 10 Dec 2004 13:57:11 -0000 @@ -44,12 +44,12 @@ %%T%%/common/lib/naming-resources.jar %%T%%/common/lib/servlet.jar %%T%%/common/lib/tools.jar -%%T%%/conf/catalina.policy -%%T%%/conf/jk2.properties -%%T%%/conf/server-noexamples.xml.config -%%T%%/conf/server.xml -%%T%%/conf/tomcat-users.xml -%%T%%/conf/web.xml +%%T%%/conf/catalina.policy.%%CONF_EXT%% +%%T%%/conf/jk2.properties.%%CONF_EXT%% +%%T%%/conf/server-noexamples.xml.config.%%CONF_EXT%% +%%T%%/conf/server.xml.%%CONF_EXT%% +%%T%%/conf/tomcat-users.xml.%%CONF_EXT%% +%%T%%/conf/web.xml.%%CONF_EXT%% %%T%%/logs/stderr.log %%T%%/logs/stdout.log %%T%%/server/lib/catalina-ant.jar
State Changed From-To: feedback->closed Patch commited. See ports/75152.
State Changed From-To: closed->feedback Okay, the patch has been commited for jakarta-tomcat5, and this PR is related to jakarta-tomcat41. Shall I commit this patch also?
Responsible Changed From-To: freebsd-java->hq I'll handle this.
This patch might be better, with the similar changes in PR: 75152 Index: Makefile =================================================================== RCS file: /home/ncvs/ports/www/jakarta-tomcat41/Makefile,v retrieving revision 1.58 diff -u -r1.58 Makefile --- Makefile 6 Dec 2004 02:35:40 -0000 1.58 +++ Makefile 17 Dec 2004 18:16:47 -0000 @@ -7,6 +7,7 @@ PORTNAME= jakarta-tomcat PORTVERSION= 4.1.31 +PORTREVISION= 1 CATEGORIES= www java MASTER_SITES= ${MASTER_SITE_APACHE_JAKARTA} MASTER_SITE_SUBDIR= tomcat-4/v${PORTVERSION}/bin @@ -19,13 +20,15 @@ NO_BUILD= YES LATEST_LINK= ${APP_SHORTNAME} +.if !defined(NOPORTDOCS) MAN1= ${CONTROL_SCRIPT_NAME}.1 +.endif MAJOR_VER= ${PORTVERSION:R} WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION} APP_HOME?= ${PREFIX}/${PKGBASE}${PORTVERSION:R} LOG_DIR= ${APP_HOME}/logs -PLIST_SUB+= T=${APP_HOME:S/^${PREFIX}\///} +PLIST_SUB+= T=${APP_HOME:S/^${PREFIX}\///} WWWOWN=${USER} WWWGRP=${GROUP} APP_TITLE= Jakarta Tomcat APP_SHORTNAME= tomcat${MAJOR_VER:S/.//} CONTROL_SCRIPT_NAME= ${APP_SHORTNAME}ctl @@ -52,34 +55,36 @@ ${WRKSRC}/conf/server.xml JAR_FILE= bin/bootstrap.jar WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/work +CONF_EXT= sample +PLIST_SUB+= CONF_EXT=${CONF_EXT} .include <bsd.port.pre.mk> pre-patch: - @${ECHO_CMD} "Installation settings:" - @${ECHO_CMD} " Destination directory: ${APP_HOME}" - @${ECHO_CMD} " Control program 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}/${GROUP}" - @${ECHO_CMD} " HTTP port: ${HTTP_PORT}" - @${ECHO_CMD} " Shutdown listener port: ${SHUTDOWN_PORT}" - @${ECHO_CMD} " WARP port: ${WARP_PORT}" - @${ECHO_CMD} " AJP 1.3 connector port: ${AJP_1_3_PORT}" - @${ECHO_CMD} " Logfile stdout: ${STDOUT_LOG}" - @${ECHO_CMD} " Logfile stderr: ${STDERR_LOG}" - @${ECHO_CMD} " Starting after install: ${AUTO_START}" - @${ECHO_CMD} " Stop time-out: ${STOP_TIMEOUT} sec." + @${ECHO_MSG} "Installation settings:" + @${ECHO_MSG} " Destination directory: ${APP_HOME}" + @${ECHO_MSG} " Control program location: ${CONTROL_SCRIPT}" + @${ECHO_MSG} " Startup script location: ${STARTUP_SCRIPT}" + @${ECHO_MSG} " Location of JDK: ${JAVA_HOME}" + @${ECHO_MSG} " Location of Java port: ${JAVA_PORT}" + @${ECHO_MSG} " Running as (user/group): ${USER}/${GROUP}" + @${ECHO_MSG} " HTTP port: ${HTTP_PORT}" + @${ECHO_MSG} " Shutdown listener port: ${SHUTDOWN_PORT}" + @${ECHO_MSG} " WARP port: ${WARP_PORT}" + @${ECHO_MSG} " AJP 1.3 connector port: ${AJP_1_3_PORT}" + @${ECHO_MSG} " Logfile stdout: ${STDOUT_LOG}" + @${ECHO_MSG} " Logfile stderr: ${STDERR_LOG}" + @${ECHO_MSG} " Starting after install: ${AUTO_START}" + @${ECHO_MSG} " Stop time-out: ${STOP_TIMEOUT} sec." @PKG_PREFIX=${PREFIX} ${SH} pkg-install ${PKGNAME} PRE-INSTALL post-patch: - @${ECHO_CMD} -n ">> Removing unneeded files..." + @${ECHO_MSG} -n ">> Removing unneeded files..." @${RM} -f `${FIND} ${WRKSRC} -name '*.bat'` `${FIND} ${WRKSRC} -name '*.orig'` `${FIND} ${WRKSRC} -name '*.exe'` - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" .for f in ${REPLACE_FILES} - @${ECHO_CMD} -n ">> Customizing `basename $f`..." + @${ECHO_MSG} -n ">> Customizing `basename $f`..." @${SED} \ -e "/%%AJP_1_3_PORT%%/s//${AJP_1_3_PORT}/g" \ -e "/%%APP_HOME%%/s//${APP_HOME:S/\//\\\//g}/g" \ @@ -107,21 +112,31 @@ -e "/%%USER%%/s//${USER}/g" \ -e "/%%WARP_PORT%%/s//${WARP_PORT}/g" \ $f > ${WRKDIR}/`basename $f` - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" .endfor do-install: - @${ECHO_CMD} -n ">> Creating destination directory..." + @${ECHO_MSG} -n ">> Creating destination directory..." @${MKDIR} ${APP_HOME} @${MKDIR} ${LOG_DIR} - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" - @${ECHO_CMD} -n ">> Copying files to destination directory..." + @${ECHO_MSG} ">> Copying files to destination directory..." + @${CP} ${WRKDIR}/server.xml ${WRKSRC}/conf/ + @(cd ${WRKSRC};${FIND} conf -type f | ${SED} -e '/${CONF_EXT}/d') \ + | while read a; do \ + ${MV} ${WRKSRC}/$$a ${WRKSRC}/$$a.${CONF_EXT}; \ + if [ ! -e "${APP_HOME}/$$a" ]; then \ + ${ECHO_MSG} " Installing local configuration file: ${APP_HOME}/$$a"; \ + ${CP} ${WRKSRC}/$$a.${CONF_EXT} ${WRKSRC}/$$a; \ + else \ + ${ECHO_MSG} " Preserving local configuration file: ${APP_HOME}/$$a"; \ + fi; \ + done @${CP} -R ${WRKSRC}/* ${APP_HOME} - @${CP} ${WRKDIR}/server.xml ${APP_HOME}/conf/ - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" - @${ECHO_CMD} -n ">> Compiling and installing control program..." + @${ECHO_MSG} -n ">> Compiling and installing control program..." @${SED} \ -e "/%%JAVA_ARGS%%/s//\"-Dcatalina.home=${APP_HOME:S/\//\\\//g}\",/g" \ -e "/%%JAR_ARGS%%/s//\"start\",/g" \ @@ -130,47 +145,47 @@ @${CP} ${WRKDIR}/${CONTROL_SCRIPT_NAME} ${CONTROL_SCRIPT} @${CHOWN} ${USER}:${GROUP} ${CONTROL_SCRIPT} @${CHMOD} 6754 ${CONTROL_SCRIPT} - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" - @${ECHO_CMD} -n ">> Installing startup script..." + @${ECHO_MSG} -n ">> Installing startup script..." @${CP} ${WRKDIR}/startup.sh ${STARTUP_SCRIPT} @${CHMOD} 0544 ${STARTUP_SCRIPT} - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" .if !defined(NOPORTDOCS) - @${ECHO_CMD} -n ">> Installing man pages..." + @${ECHO_MSG} -n ">> Installing man pages..." @${INSTALL_MAN} ${WRKDIR}/daemonctl.1 ${MANPREFIX}/man/man1/${CONTROL_SCRIPT_NAME}.1 - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" .endif - @${ECHO_CMD} -n ">> Creating log files..." + @${ECHO_MSG} -n ">> Creating log files..." @${INSTALL} /dev/null ${STDOUT_LOG} @${INSTALL} /dev/null ${STDERR_LOG} - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" - @${ECHO_CMD} -n ">> Creating symlink to tools.jar..." + @${ECHO_MSG} -n ">> Creating symlink to tools.jar..." @${LN} -sf ${JAVA_HOME}/lib/tools.jar ${APP_HOME}/common/lib/tools.jar - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" - @${ECHO_CMD} -n ">> Fixing ownership settings..." + @${ECHO_MSG} -n ">> Fixing ownership settings..." @${CHOWN} -R ${USER}:${GROUP} ${APP_HOME} - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" - @${ECHO_CMD} -n ">> Fixing permissions..." + @${ECHO_MSG} -n ">> Fixing permissions..." @${CHMOD} 755 `${FIND} ${APP_HOME} -type d` - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" - @${ECHO_CMD} -n ">> Creating PID file..." + @${ECHO_MSG} -n ">> Creating PID file..." @${TOUCH} ${PID_FILE} @${CHOWN} ${USER}:${GROUP} ${PID_FILE} @${CHMOD} 0600 ${PID_FILE} - @${ECHO_CMD} " [ DONE ]" + @${ECHO_MSG} " [ DONE ]" post-install: - @${ECHO_CMD} "${APP_TITLE} ${PORTVERSION} has been installed in ${APP_HOME}." - @${ECHO_CMD} "If a user should be able to use ${CONTROL_SCRIPT_NAME}, then put this user in the group ${GROUP}." + @${ECHO_MSG} "${APP_TITLE} ${PORTVERSION} has been installed in ${APP_HOME}." + @${ECHO_MSG} "If a user should be able to use ${CONTROL_SCRIPT_NAME}, then put this user in the group ${GROUP}." .if !defined(NOPORTDOCS) - @${ECHO_CMD} "Use 'man ${CONTROL_SCRIPT_NAME}' for information about starting and stopping ${APP_TITLE}." + @${ECHO_MSG} "Use 'man ${CONTROL_SCRIPT_NAME}' for information about starting and stopping ${APP_TITLE}." .endif .if ${AUTO_START} == "YES" @${CONTROL_SCRIPT} start || true Index: pkg-plist =================================================================== RCS file: /home/ncvs/ports/www/jakarta-tomcat41/pkg-plist,v retrieving revision 1.23 diff -u -r1.23 pkg-plist --- pkg-plist 6 Dec 2004 02:35:40 -0000 1.23 +++ pkg-plist 17 Dec 2004 18:11:28 -0000 @@ -1,11 +1,10 @@ @comment $FreeBSD: ports/www/jakarta-tomcat41/pkg-plist,v 1.23 2004/12/06 02:35:40 hq Exp $ -@exec mkdir %D/%%T%%/server || true -@exec mkdir %D/%%T%%/server/classes || true -@exec mkdir %D/%%T%%/server/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/filters ||true -@exec mkdir %D/%%T%%/shared || true -@exec mkdir %D/%%T%%/shared/classes || true -@exec mkdir %D/%%T%%/shared/lib || true -@exec mkdir %D/%%T%%/webapps/tomcat-docs/jk2/printer ||true +@unexec if cmp -s %D/%%T%%/conf/server.xml %D/%%T%%/conf/server.xml.%%CONF_EXT%%; then rm -f %D/%%T%%/conf/server.xml.%%CONF_EXT%%; else echo If permanently deleting this package, %D/%%T%%/conf/server.xml must be removed manually; fi +@unexec if cmp -s %D/%%T%%/conf/jk2.properties %D/%%T%%/conf/jk2.properties.%%CONF_EXT%%; then rm -f %D/%%T%%/conf/jk2.properties; else echo If permanently deleting this package, %D/%%T%%/conf/jk2.properties must be removed manually; fi +@unexec if cmp -s %D/%%T%%/conf/server-noexamples.xml.config %D/%%T%%/conf/server-noexamples.xml.config.%%CONF_EXT%%; then rm -f %D/%%T%%/conf/server-noexamples.xml.config; else echo If permanently deleting this package, %D/%%T%%/conf/server-noexamples.xml.config must be removed manually; fi +@unexec if cmp -s %D/%%T%%/conf/catalina.policy %D/%%T%%/conf/catalina.policy.%%CONF_EXT%%; then rm -f %D/%%T%%/conf/catalina.policy; else echo If permanently deleting this package, %D/%%T%%/conf/server.xml must be removed manually; fi +@unexec if cmp -s %D/%%T%%/conf/tomcat-users.xml %D/%%T%%/conf/tomcat-users.xml.%%CONF_EXT%%; then rm -f %D/%%T%%/conf/tomcat-users.xml; else echo If permanently deleting this package, %D/%%T%%/conf/tomcat-users.xml must be removed manually; fi +@unexec if cmp -s %D/%%T%%/conf/web.xml %D/%%T%%/conf/web.xml.%%CONF_EXT%%; then rm -f %D/%%T%%/conf/web.xml; else echo If permanently deleting this package, %D/%%T%%/conf/web.xml must be removed manually; fi bin/tomcat41ctl etc/rc.d/020.jakarta-tomcat41.sh %%T%%/LICENSE @@ -44,12 +43,12 @@ %%T%%/common/lib/naming-resources.jar %%T%%/common/lib/servlet.jar %%T%%/common/lib/tools.jar -%%T%%/conf/catalina.policy -%%T%%/conf/jk2.properties -%%T%%/conf/server-noexamples.xml.config -%%T%%/conf/server.xml -%%T%%/conf/tomcat-users.xml -%%T%%/conf/web.xml +%%T%%/conf/catalina.policy.%%CONF_EXT%% +%%T%%/conf/jk2.properties.%%CONF_EXT%% +%%T%%/conf/server-noexamples.xml.config.%%CONF_EXT%% +%%T%%/conf/server.xml.%%CONF_EXT%% +%%T%%/conf/tomcat-users.xml.%%CONF_EXT%% +%%T%%/conf/web.xml.%%CONF_EXT%% %%T%%/logs/stderr.log %%T%%/logs/stdout.log %%T%%/server/lib/catalina-ant.jar @@ -1482,6 +1481,11 @@ %%T%%/webapps/webdav/index.html %%T%%/webapps/webdav/tomcat-power.gif %%T%%/webapps/webdav/tomcat.gif +@exec mkdir %D/%%T%%/server/classes || true +@exec mkdir %D/%%T%%/server/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/filters ||true +@exec mkdir %D/%%T%%/shared || true +@exec mkdir %D/%%T%%/shared/classes || true +@exec mkdir %D/%%T%%/shared/lib || true @exec mkdir %D/%%T%%/work || true @exec mkdir %D/%%T%%/common/classes ||true @exec chown -R %%WWWOWN%%:%%WWWGRP%% %D/%%T%%/
State Changed From-To: feedback->closed Commited. Thanks for your contribution!