diff options
author | Ernst de Haan <znerd@FreeBSD.org> | 2002-04-03 21:22:23 +0000 |
---|---|---|
committer | Ernst de Haan <znerd@FreeBSD.org> | 2002-04-03 21:22:23 +0000 |
commit | bfc61c4e252ee598694903cdbb8b1efa88b9465a (patch) | |
tree | 970d8205b4fa735172e9bbd466e6ca5b88cc40d7 /www/orion | |
parent | 9243db9e77c5fa1fa6f9fe9d2aa8dce95d26f906 (diff) | |
download | ports-bfc61c4e252ee598694903cdbb8b1efa88b9465a.tar.gz ports-bfc61c4e252ee598694903cdbb8b1efa88b9465a.zip |
Notes
Diffstat (limited to 'www/orion')
-rw-r--r-- | www/orion/Makefile | 55 | ||||
-rw-r--r-- | www/orion/files/daemonctl.c | 366 | ||||
-rw-r--r-- | www/orion/files/orion.sh | 2 |
3 files changed, 31 insertions, 392 deletions
diff --git a/www/orion/Makefile b/www/orion/Makefile index 77fd46c23de4..2444c3b14deb 100644 --- a/www/orion/Makefile +++ b/www/orion/Makefile @@ -7,7 +7,7 @@ PORTNAME= orion PORTVERSION= 1.5.2 -PORTREVISION= 15 +PORTREVISION= 16 CATEGORIES= www java MASTER_SITES= http://www.orionserver.com/distributions/ \ http://www.atlassian.com/software/orion/downloads/ \ @@ -42,29 +42,30 @@ STDOUT_LOG= ${LOG_DIR}/stdout.log STDERR_LOG= ${LOG_DIR}/stderr.log AUTO_START?= NO PID_FILE= /var/run/${APP_SHORTNAME}.pid -REPLACE_FILES= ${FILESDIR}/daemonctl.c \ +REPLACE_FILES= ${PORTSDIR}/www/jakarta-tomcat/files/daemonctl.c \ ${FILESDIR}/${CONTROL_SCRIPT_NAME}.1 \ ${FILESDIR}/${STARTUP_SCRIPT_NAME} \ ${WRKSRC}/config/default-web-site.xml \ ${WRKSRC}/config/rmi.xml +JAR_FILE= ${APP_SHORTNAME}.jar WRKDIR?= work .include <bsd.port.pre.mk> pre-install: @${ECHO_CMD} "Installation settings:" - @${ECHO_CMD} " Destination directory: ${APP_HOME}" - @${ECHO_CMD} " Control script 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} " Using Jikes: ${WITH_JIKES}" - @${ECHO_CMD} " Running as (user/group): ${USER}/${GROUP}" - @${ECHO_CMD} " HTTP port: ${HTTP_PORT}" - @${ECHO_CMD} " RMI port: ${RMI_PORT}" - @${ECHO_CMD} " Logfile stdout: ${STDOUT_LOG}" - @${ECHO_CMD} " Logfile stderr: ${STDERR_LOG}" - @${ECHO_CMD} " Starting after install: ${AUTO_START}" + @${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} " Using Jikes: ${WITH_JIKES}" + @${ECHO_CMD} " Running as (user/group): ${USER}/${GROUP}" + @${ECHO_CMD} " HTTP port: ${HTTP_PORT}" + @${ECHO_CMD} " RMI port: ${RMI_PORT}" + @${ECHO_CMD} " Logfile stdout: ${STDOUT_LOG}" + @${ECHO_CMD} " Logfile stderr: ${STDERR_LOG}" + @${ECHO_CMD} " Starting after install: ${AUTO_START}" @PKG_PREFIX=${PREFIX} ${SH} pkg-install ${PKGNAME} PRE-INSTALL do-install: @@ -84,16 +85,16 @@ do-install: -e "/%%HTTP_PORT%%/s//${HTTP_PORT}/g" \ -e "/%%JAVA_CMD%%/s//bin\/java/g" \ -e "/%%JAVA_HOME%%/s//${JAVA_HOME:S/\//\\\//g}/g" \ - -e "/%%JAR_FILE%%/s//${APP_SHORTNAME}.jar/g" \ + -e "/%%JAR_FILE%%/s//${JAR_FILE}/g" \ -e "/%%LOG_DIR%%/s//${LOG_DIR:S/\//\\\//g}/g" \ + -e "/%%PID_FILE%%/s//${PID_FILE:S/\//\\\//g}/g" \ -e "/%%PORTNAME%%/s//${PORTNAME}/g" \ -e "/%%PORTVERSION%%/s//${PORTVERSION}/g" \ + -e "/%%PREFIX%%/s//${PREFIX:S/\//\\\//g}/g" \ + -e "/%%RMI_PORT%%/s//${RMI_PORT}/g" \ -e "/%%STARTUP_SCRIPT_NAME%%/s//${STARTUP_SCRIPT_NAME}/g" \ -e "/%%STDERR_LOG%%/s//${STDERR_LOG:S/\//\\\//g}/g" \ -e "/%%STDOUT_LOG%%/s//${STDOUT_LOG:S/\//\\\//g}/g" \ - -e "/%%PREFIX%%/s//${PREFIX:S/\//\\\//g}/g" \ - -e "/%%PID_FILE%%/s//${PID_FILE:S/\//\\\//g}/g" \ - -e "/%%RMI_PORT%%/s//${RMI_PORT}/g" \ -e "/%%USER%%/s//${USER}/g" \ $f > ${WRKDIR}/`basename $f` @${ECHO_CMD} " [ DONE ]" @@ -116,24 +117,28 @@ do-install: @${ECHO_CMD} " [ DONE ]" .endif - @${ECHO_CMD} -n ">> Compiling and installing control script..." - @cd ${WRKDIR} && ${CC} -ansi -o ${CONTROL_SCRIPT_NAME} daemonctl.c + @${ECHO_CMD} -n ">> Compiling and installing control program..." + @${SED} \ + -e "/%%JAVA_ARGS%%/s///g" \ + -e "/%%JAR_ARGS%%/s///g" \ + ${WRKDIR}/daemonctl.c > ${WRKDIR}/daemonctl_.c + @cd ${WRKDIR} && ${CC} -ansi -o ${CONTROL_SCRIPT_NAME} daemonctl_.c @${CP} ${WRKDIR}/${CONTROL_SCRIPT_NAME} ${CONTROL_SCRIPT} @${CHOWN} ${USER}:${GROUP} ${CONTROL_SCRIPT} @${CHMOD} 6754 ${CONTROL_SCRIPT} @${ECHO_CMD} " [ DONE ]" + @${ECHO_CMD} -n ">> Installing startup script..." + @${CP} ${WRKDIR}/${STARTUP_SCRIPT_NAME} ${STARTUP_SCRIPT} + @${CHMOD} 0544 ${STARTUP_SCRIPT} + @${ECHO_CMD} " [ DONE ]" + .if !defined(NOPORTDOCS) @${ECHO_CMD} -n ">> Installing man pages..." @${INSTALL_MAN} ${WRKDIR}/${CONTROL_SCRIPT_NAME}.1 ${MANPREFIX}/man/man1 @${ECHO_CMD} " [ DONE ]" .endif - @${ECHO_CMD} -n ">> Installing startup script..." - @${CP} ${WRKDIR}/${STARTUP_SCRIPT_NAME} ${STARTUP_SCRIPT} - @${CHMOD} 0544 ${STARTUP_SCRIPT} - @${ECHO_CMD} " [ DONE ]" - @${ECHO_CMD} -n ">> Creating log files..." @${INSTALL} /dev/null ${STDOUT_LOG} @${INSTALL} /dev/null ${STDERR_LOG} diff --git a/www/orion/files/daemonctl.c b/www/orion/files/daemonctl.c deleted file mode 100644 index 432cb5240d43..000000000000 --- a/www/orion/files/daemonctl.c +++ /dev/null @@ -1,366 +0,0 @@ -/* - * -*- mode: Fundamental; tab-width: 4; -*- - * ex:ts=4 - * - * Daemon control program. - * - * $FreeBSD$ - */ - -#include <assert.h> -#include <fcntl.h> -#include <signal.h> -#include <stdarg.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <syslog.h> -#include <unistd.h> -#include <sys/errno.h> -#include <sys/types.h> -#include <sys/uio.h> - -#define MAX_FILE_SIZE 32 - -#define ERR_ILLEGAL_ARGUMENT 1 -#define ERR_PID_FILE_NOT_FOUND 2 -#define ERR_PID_FILE_TOO_LARGE 3 -#define ERR_PID_FILE_CONTAINS_ILLEGAL_CHAR 4 -#define ERR_KILL_FAILED 5 -#define ERR_ALREADY_RUNNING 6 -#define ERR_NOT_RUNNING 7 -#define ERR_CHDIR_TO_APP_HOME 8 -#define ERR_STDOUT_LOGFILE_OPEN 9 -#define ERR_STDERR_LOGFILE_OPEN 10 -#define ERR_FORK_FAILED 11 - -#define private static - -private void printUsage(void); -private int openPIDFile(void); -private int readPID(int); -private void writePID(int file, int pid); -private void start(void); -private void stop(void); -private void restart(void); - - -/** - * Main function. This function is called when this program is executed. - * - * @param argc - * the number of arguments plus one, so always greater than 0. - * - * @param argv - * the arguments in an array of character pointers, where the last argument - * element is followed by a NULL element. - */ -int main(int argc, char *argv[]) { - - /* Declare variables, like all other good ANSI C programs do :) */ - char *argument; - - /* Parse the arguments */ - if (argc < 2) { - printUsage(); - return 0; - } - - argument = argv[1]; - if (strcmp("start", argument) == 0) { - start(); - } else if (strcmp("stop", argument) == 0) { - stop(); - } else if (strcmp("restart", argument) == 0) { - restart(); - } else { - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Illegal argument \"%s\".\n", argument); - printUsage(); - exit(ERR_ILLEGAL_ARGUMENT); - } - - return 0; -} - - -/** - * Prints usage information to stdout. - */ -void printUsage(void) { - printf("Usage: %%CONTROL_SCRIPT_NAME%% [ start | stop | restart ]\n"); -} - - -/** - * Attempts to open the PID file. If that file is successfully opened, then - * the file handle (an int) will be returned. - * - * @return - * the file handle. - */ -int openPIDFile(void) { - - int file; - - /* Attempt to open the PID file */ - printf(">> Opening PID file (%%PID_FILE%%)..."); - file = open("%%PID_FILE%%", O_RDWR); - if (file < 0) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to open %%PID_FILE%% for reading and writing: "); - perror(NULL); - exit(ERR_PID_FILE_NOT_FOUND); - } - printf(" [ DONE ]\n"); - - return file; -} - - -/** - * Reads a PID from the specified file. The file is identified by a file - * handle. - * - * @param file - * the file handle. - * - * @return - * the PID, or -1 if the file was empty. - */ -int readPID(int file) { - - char *buffer; - int hadNewline = 0; - unsigned int count; - unsigned int i; - int pid; - - /* Read the PID file contents */ - printf(">> Reading PID file..."); - buffer = (char *) malloc((MAX_FILE_SIZE + 1) * sizeof(char)); - count = read(file, buffer, MAX_FILE_SIZE + 1); - if (count > MAX_FILE_SIZE) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: The file %%PID_FILE%% contains more than %d bytes.\n", MAX_FILE_SIZE); - exit(ERR_PID_FILE_TOO_LARGE); - } - - /* Convert the bytes to a number */ - pid = 0; - for (i=0; i<count; i++) { - char c = buffer[i]; - if (c >= '0' && c <= '9') { - char digit = c - '0'; - pid *= 10; - pid += digit; - } else if (i == (count - 1) && c == '\n') { - /* XXX: Ignore a newline at the end of the file */ - hadNewline = 1; - } else { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: The file %%PID_FILE%% contains an illegal character (%d) at position %d.\n", c, i); - exit(ERR_PID_FILE_CONTAINS_ILLEGAL_CHAR); - } - } - printf(" [ DONE ]\n"); - - if (count == 0 || (count == 1 && hadNewline == 1)) { - return -1; - } - - return pid; -} - - -/** - * Writes a process ID to the specified file. The file is identified by a file - * handle. - * - * @param file - * the file handle, always greater than 0. - * - * @param pid - * the PID to store, always greater than 0. - */ -void writePID(int file, int pid) { - - char *buffer; - int nbytes; - - /* Check preconditions */ - assert(file > 0); - assert(pid > 0); - - printf(">> Writing PID file..."); - - lseek(file, 0, SEEK_SET); - ftruncate(file, 0); - nbytes = asprintf(&buffer, "%d\n", pid); - write(file, buffer, nbytes); - printf(" [ DONE ]\n"); -} - - -/** - * Kills the process identified by the specified ID. - * - * @param pid - * the process id, greater than 0. - */ -void killProcess(int pid) { - - int result; - - assert(pid > 0); - - printf(">> Killing process %d...", pid); - result = kill(pid, SIGTERM); - if (result < 0) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to kill process %d: ", pid); - perror(NULL); - exit(ERR_KILL_FAILED); - } - - printf(" [ DONE ]\n"); -} - - -/** - * Starts the daemon. - */ -void start(void) { - - int file; - int pid; - int result; - int stdoutLogFile; - int stderrLogFile; - - /* Open and read the PID file */ - file = openPIDFile(); - pid = readPID(file); - - printf(">> Checking that %%APP_TITLE%% is not already running..."); - if (pid != -1) { - - /* Check if the process actually exists */ - result = kill(pid, 0); - if (result == 0 || errno != ESRCH) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: %%APP_TITLE%% is already running, PID is %d.\n", pid); - exit(ERR_ALREADY_RUNNING); - } - } - - printf(" [ DONE ]\n"); - - /* XXX: printf(">> Checking for Java VM..."); */ - - printf(">> Starting %%APP_TITLE%%..."); - - /* Change directory */ - result = chdir("%%APP_HOME%%"); - if (result < 0) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to access directory %%APP_HOME%%: "); - perror(NULL); - exit(ERR_CHDIR_TO_APP_HOME); - } - - /* Open the stdout log file */ - stdoutLogFile = open("%%STDOUT_LOG%%", O_WRONLY); - if (stdoutLogFile < 0) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to open %%STDOUT_LOG%% for writing: "); - perror(NULL); - exit(ERR_STDOUT_LOGFILE_OPEN); - } - lseek(stdoutLogFile, 0, SEEK_END); - - /* Open the stderr log file */ - stderrLogFile = open("%%STDERR_LOG%%", O_WRONLY); - if (stderrLogFile < 0) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to open %%STDERR_LOG%% for writing: "); - perror(NULL); - exit(ERR_STDERR_LOGFILE_OPEN); - } - lseek(stderrLogFile, 0, SEEK_END); - - /* Split this process in two */ - pid = fork(); - if (pid == -1) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to fork: "); - perror(NULL); - exit(ERR_FORK_FAILED); - } - - if (pid == 0) { - - /* Redirect stdout to log file */ - dup2(stdoutLogFile, STDOUT_FILENO); - - /* Redirect stderr to log file */ - dup2(stderrLogFile, STDERR_FILENO); - - /* TODO: Support redirection of both stdout and stderr to the same - file using pipe(2) */ - - /* Execute the command */ - execl("%%JAVA_HOME%%/%%JAVA_CMD%%", "%%JAVA_HOME%%/%%JAVA_CMD%%", "-jar", "%%JAR_FILE%%", NULL); - - /* XXX: Improve this error message */ - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to start %%APP_TITLE%% as '%%JAVA_HOME%%/%%JAVA_CMD%% -jar %%JAR_FILE%%' in %%APP_HOME%%: "); - perror(NULL); - } else { - printf(" [ DONE ]\n"); - writePID(file, pid); - } -} - -/** - * Stops the daemon. - */ -void stop(void) { - - int file; - int pid; - - /* Open and read the PID file */ - file = openPIDFile(); - pid = readPID(file); - - printf(">> Checking that %%APP_TITLE%% is running..."); - - /* If there is a PID, see if the process still exists */ - if (pid != -1) { - int result = kill(pid, 0); - if (result != 0 && errno == ESRCH) { - ftruncate(file, 0); - pid = -1; - } - } - - /* If there is no running process, produce an error */ - if (pid == -1) { - printf(" [ FAILED ]\n"); - fprintf(stderr, "%%CONTROL_SCRIPT_NAME%%: %%APP_TITLE%% is currently not running.\n"); - exit(ERR_NOT_RUNNING); - } - - printf(" [ DONE ]\n"); - - killProcess(pid); - - printf(">> Clearing PID file..."); - ftruncate(file, 0); - printf(" [ DONE ]\n"); -} - - -void restart(void) { - stop(); - start(); -} diff --git a/www/orion/files/orion.sh b/www/orion/files/orion.sh index 6627cfbda27f..b27dea9f7de5 100644 --- a/www/orion/files/orion.sh +++ b/www/orion/files/orion.sh @@ -2,7 +2,7 @@ # -*- mode: Fundamental; tab-width: 4; -*- # ex:ts=4 # -# Orion startup script. +# %%APP_TITLE%% startup script. # # $FreeBSD$ # |