Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Nov 2004 00:44:12 +0100 (CET)
From:      SimpleRezo Team <freebsd@simplerezo.com>
To:        FreeBSD-gnats-submit@FreeBSD.org
Cc:        znerd@FreeBSD.org
Subject:   ports/74344: [proposal] tomcat41ctl: support for passing parameters to java vm
Message-ID:  <200411242344.iAONiC7B020649@agnesb.simplerezo.net>
Resent-Message-ID: <200411242350.iAONoTiI063712@freefall.freebsd.org>

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

>Number:         74344
>Category:       ports
>Synopsis:       [proposal] tomcat41ctl: support for passing parameters to java vm
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Wed Nov 24 23:50:29 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     SimpleRezo Team
>Release:        FreeBSD 5.3-RELEASE i386
>Organization:
SimpleRezo
>Environment:
System: FreeBSD devel.simplerezo.com 5.3-RELEASE FreeBSD 5.3-RELEASE #0: Fri Nov 5 04:19:18 UTC 2004 root@devel.simplerezo.com:/usr/obj/usr/src/sys/KERNEL i386


	
>Description:
	
	tomcat41ctl is a FreeBSD port specific tool for controlling tomcat daemon
	but instead of tomcat standards scripts files, actually there are no way to pass to jvm
	some parameters... but sometimes, you need to do that!
	so the proposal patch enable tomcat41ctl for reading a "configuration file" that contains
	parameters to java vm

>How-To-Repeat:
	
	be patient and 
	install java
	install tomcat
	;)
>Fix:

	

--- www.jakarta-tomcat4.diff begins here ---
************************* www/jakarta-tomcat4 *************************
diff -ruN /usr/ports/www/jakarta-tomcat4/Makefile www/jakarta-tomcat4/Makefile
--- /usr/ports/www/jakarta-tomcat4/Makefile	Sun Aug 29 20:36:28 2004
+++ www/jakarta-tomcat4/Makefile	Thu Nov 25 00:13:44 2004
@@ -7,6 +7,7 @@
 
 PORTNAME=	jakarta-tomcat
 PORTVERSION=	4.0.6
+PORTREVISION=	1
 CATEGORIES=	www java
 MASTER_SITES=	http://jakarta.apache.org/builds/jakarta-tomcat-${PORTVERSION:R}/release/v${PORTVERSION}/bin/ \
 		${MASTER_SITE_LOCAL}
@@ -27,6 +28,7 @@
 APP_TITLE=	Jakarta Tomcat
 APP_SHORTNAME=	tomcat${MAJOR_VER}
 CONTROL_SCRIPT_NAME=	${APP_SHORTNAME}ctl
+CONTROL_SCRIPT_CONF=	conf/${APP_SHORTNAME}ctl.conf
 CONTROL_SCRIPT=	${PREFIX}/bin/${CONTROL_SCRIPT_NAME}
 CONTROL_SCRIPT_MANPAGE_TITLE=	${CONTROL_SCRIPT_NAME:U}
 STARTUP_ORDER?=	020
@@ -45,6 +47,7 @@
 STOP_TIMEOUT?=	5
 PID_FILE=	/var/run/${APP_SHORTNAME}.pid
 REPLACE_FILES=	${FILESDIR}/daemonctl.c \
+		${FILESDIR}/daemonctl.conf \
 		${FILESDIR}/daemonctl.1 \
 		${FILESDIR}/startup.sh \
 		${WRKSRC}/conf/server.xml
@@ -69,7 +72,7 @@
 	@${ECHO_CMD} "   Logfile stderr:           ${STDERR_LOG}"
 	@${ECHO_CMD} "   Starting after install:   ${AUTO_START}"
 	@${ECHO_CMD} "   Stop time-out:            ${STOP_TIMEOUT} sec."
-	@PKG_PREFIX=${PREFIX} ${SH} pkg-install ${PKGNAME} PRE-INSTALL
+	@PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL
 
 post-patch:
 	@${ECHO_CMD} -n ">> Removing unneeded files..."
@@ -121,11 +124,11 @@
 
 	@${ECHO_CMD} -n ">> Compiling and installing control program..."
 	@${SED} \
-	-e "/%%JAVA_ARGS%%/s//\"-Dcatalina.home=${APP_HOME:S/\//\\\//g}\",/g" \
-	-e "/%%JAR_ARGS%%/s//\"start\",/g" \
-	${WRKDIR}/daemonctl.c > ${WRKDIR}/daemonctl_.c
+		-e "/%%JAR_ARGS%%/s//\"start\"/g" \
+		${WRKDIR}/daemonctl.c > ${WRKDIR}/daemonctl_.c
 	@cd ${WRKDIR} && ${CC} -ansi -o ${CONTROL_SCRIPT_NAME} daemonctl_.c
 	@${CP} ${WRKDIR}/${CONTROL_SCRIPT_NAME} ${CONTROL_SCRIPT}
+	@${CP} ${WRKDIR}/daemonctl.conf ${APP_HOME}/${CONTROL_SCRIPT_CONF}
 	@${CHOWN} ${USER}:${GROUP} ${CONTROL_SCRIPT}
 	@${CHMOD} 6754 ${CONTROL_SCRIPT}
 	@${ECHO_CMD} " [ DONE ]"
diff -ruN /usr/ports/www/jakarta-tomcat4/files/daemonctl.c www/jakarta-tomcat4/files/daemonctl.c
--- /usr/ports/www/jakarta-tomcat4/files/daemonctl.c	Thu Oct 10 01:10:32 2002
+++ www/jakarta-tomcat4/files/daemonctl.c	Thu Nov 25 00:13:08 2004
@@ -21,6 +21,9 @@
 #include <sys/types.h>
 #include <sys/uio.h>
 
+/* The maximum size of each line of configuration file */
+#define MAX_ARGS_SIZE			256
+
 /* The maximum size of the PID file, in bytes */
 #define MAX_FILE_SIZE			32
 
@@ -39,6 +42,7 @@
 #define ERR_ACCESS_JAR_FILE					17
 #define ERR_STDOUT_LOGFILE_OPEN				9
 #define ERR_STDERR_LOGFILE_OPEN				10
+#define ERR_INCORRECT_CONFIGURATION			18
 #define ERR_FORK_FAILED						11
 #define ERR_STAT_JAVA_HOME					12
 #define ERR_JAVA_HOME_NOT_DIR				13
@@ -307,7 +311,17 @@
  */
 void start(void) {
 
+	FILE *javaConfFile;
+    char **args;
+	char *args_jvm = "/usr/local/jdk1.4.2/bin/java";
+	char *args_jar = "bin/bootstrap.jar";
+	char *args_arg = %%JAR_ARGS%%;
+  	char buffer[MAX_ARGS_SIZE];
+	int argc;
 	int file;
+	int i;
+	int line;
+	int ok;
 	int pid;
 	int result;
 	int stdoutLogFile;
@@ -404,6 +418,41 @@
 	}
 	lseek(stderrLogFile, (off_t) 0, SEEK_END);
 
+	/* Get java parameters */
+	argc = 4;
+	args = (char **) malloc(argc * sizeof(char *));
+	args[0] = args_jvm;
+	javaConfFile = fopen("%%APP_HOME%%/%%CONTROL_SCRIPT_CONF%%", "r");
+	if (javaConfFile >= 0) {
+		line = 0;
+	    while (fgets(buffer, MAX_ARGS_SIZE, javaConfFile) != NULL) {
+		    line++;
+			if (strlen(buffer) == 0)
+				continue;
+
+			ok = 1;
+			for (i = -1; ok && (++i < strlen(buffer)); )
+				ok &= (islower(buffer[i]) || isdigit(buffer[i]) || (buffer[i] == '.'));
+			ok |= (i < strlen(buffer) && (i > 0) && (buffer[i++] == '=') && (i < strlen(buffer)));
+			for (; ok && (i < strlen(buffer)); i++)
+				ok &= (isalnum(buffer[i]) || (buffer[i] == '-') || (buffer[i] == '.') || (buffer[i] == '/') || (buffer[i] == 10));
+
+			if (ok != 1) {
+				printf(" [ FAILED ]\n");
+				fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Error in %%APP_HOME%%/%%CONTROL_SCRIPT_CONF%%#%i-%i\n", line, i);
+				exit(ERR_INCORRECT_CONFIGURATION);
+			}
+			
+			argc++;
+			args = (char **) realloc(args, argc * sizeof(char));
+			args[argc - 4] = strdup(buffer);
+		}
+		fclose(javaConfFile);
+	}
+	args[argc - 3] = args_jar;
+	args[argc - 2] = args_arg;
+	args[argc - 1] = NULL;
+
 	/* Split this process in two */
 	pid = fork();
 	if (pid == -1) {
@@ -425,7 +474,7 @@
 		         file using pipe(2) */
 
 		/* Execute the command */
-		execl("%%JAVA_HOME%%/%%JAVA_CMD%%", "%%JAVA_HOME%%/%%JAVA_CMD%%", "-jar", %%JAVA_ARGS%% "%%JAR_FILE%%", %%JAR_ARGS%% NULL);
+		execv("%%JAVA_HOME%%/%%JAVA_CMD%%", args);
 
 		fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to start %%APP_TITLE%% %%PORTVERSION%% since '%%JAVA_HOME%%/%%JAVA_CMD%% -jar %%JAR_FILE%%' in %%APP_HOME%%: ");
 		perror(NULL);
diff -ruN /usr/ports/www/jakarta-tomcat4/files/daemonctl.conf www/jakarta-tomcat4/files/daemonctl.conf
--- /usr/ports/www/jakarta-tomcat4/files/daemonctl.conf	Thu Jan  1 01:00:00 1970
+++ www/jakarta-tomcat4/files/daemonctl.conf	Wed Nov 24 23:59:14 2004
@@ -0,0 +1,2 @@
+catalina.home=%%APP_HOME%%
+java.io.tmpdir=%%APP_HOME%%/temp/

************************* www/jakarta-tomcat41 *************************
diff -ruN /usr/ports/www/jakarta-tomcat41/Makefile www/jakarta-tomcat41/Makefile
--- /usr/ports/www/jakarta-tomcat41/Makefile	Sat Apr  3 13:22:22 2004
+++ www/jakarta-tomcat41/Makefile	Thu Nov 25 00:13:58 2004
@@ -7,7 +7,7 @@
 
 PORTNAME=	jakarta-tomcat
 PORTVERSION=	4.1.30
-PORTREVISION=	0
+PORTREVISION=	1
 CATEGORIES=	www java
 MASTER_SITES=	http://www.apache.org/dist/jakarta/tomcat-4/v${PORTVERSION}/bin/ \
 		${MASTER_SITE_LOCAL}
@@ -30,6 +30,7 @@
 APP_TITLE=	Jakarta Tomcat
 APP_SHORTNAME=	tomcat${MAJOR_VER:S/.//}
 CONTROL_SCRIPT_NAME=	${APP_SHORTNAME}ctl
+CONTROL_SCRIPT_CONF=	conf/${APP_SHORTNAME}ctl.conf
 CONTROL_SCRIPT=	${PREFIX}/bin/${CONTROL_SCRIPT_NAME}
 CONTROL_SCRIPT_MANPAGE_TITLE=	${CONTROL_SCRIPT_NAME:U}
 STARTUP_ORDER?=	020
@@ -48,6 +49,7 @@
 STOP_TIMEOUT?=	5
 PID_FILE=	/var/run/${APP_SHORTNAME}.pid
 REPLACE_FILES=	${PORTSDIR}/www/jakarta-tomcat4/files/daemonctl.c \
+		${PORTSDIR}/www/jakarta-tomcat4/files/daemonctl.conf \
 		${PORTSDIR}/www/jakarta-tomcat4/files/daemonctl.1 \
 		${PORTSDIR}/www/jakarta-tomcat4/files/startup.sh \
 		${WRKSRC}/conf/server.xml
@@ -72,7 +74,7 @@
 	@${ECHO_CMD} "   Logfile stderr:           ${STDERR_LOG}"
 	@${ECHO_CMD} "   Starting after install:   ${AUTO_START}"
 	@${ECHO_CMD} "   Stop time-out:            ${STOP_TIMEOUT} sec."
-	@PKG_PREFIX=${PREFIX} ${SH} pkg-install ${PKGNAME} PRE-INSTALL
+	@PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL
 
 post-patch:
 	@${ECHO_CMD} -n ">> Removing unneeded files..."
@@ -124,11 +126,11 @@
 
 	@${ECHO_CMD} -n ">> Compiling and installing control program..."
 	@${SED} \
-	-e "/%%JAVA_ARGS%%/s//\"-Dcatalina.home=${APP_HOME:S/\//\\\//g}\",/g" \
-	-e "/%%JAR_ARGS%%/s//\"start\",/g" \
-	${WRKDIR}/daemonctl.c > ${WRKDIR}/daemonctl_.c
+		-e "/%%JAR_ARGS%%/s//\"start\"/g" \
+		${WRKDIR}/daemonctl.c > ${WRKDIR}/daemonctl_.c
 	@cd ${WRKDIR} && ${CC} -ansi -o ${CONTROL_SCRIPT_NAME} daemonctl_.c
 	@${CP} ${WRKDIR}/${CONTROL_SCRIPT_NAME} ${CONTROL_SCRIPT}
+	@${CP} ${WRKDIR}/daemonctl.conf ${APP_HOME}/${CONTROL_SCRIPT_CONF}
 	@${CHOWN} ${USER}:${GROUP} ${CONTROL_SCRIPT}
 	@${CHMOD} 6754 ${CONTROL_SCRIPT}
 	@${ECHO_CMD} " [ DONE ]"
--- www.jakarta-tomcat4.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



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