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>