ports/74344: [proposal] tomcat41ctl: support for passing parameters to java vm
SimpleRezo Team
freebsd at simplerezo.com
Wed Nov 24 23:50:29 UTC 2004
>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 at 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:
More information about the freebsd-ports-bugs
mailing list