You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by tv...@apache.org on 2014/03/24 16:23:32 UTC
svn commit: r1580883 - in /tomee/tomee/trunk/tomee: ./ tomee-deb/
tomee-deb/src/ tomee-deb/src/main/ tomee-deb/src/main/config/
tomee-deb/src/main/groovy/ tomee-deb/src/main/groovy/org/
tomee-deb/src/main/groovy/org/apache/ tomee-deb/src/main/groovy/or...
Author: tveronezi
Date: Mon Mar 24 15:23:31 2014
New Revision: 1580883
URL: http://svn.apache.org/r1580883
Log:
https://issues.apache.org/jira/browse/TOMEE-245
Ok, it builds and installs a debian package for Apache TomEE Plus.
We still need to...
* hack it to create debian packages for all TomEE versions
* improve the init scripts
* meet the debian policy [https://www.debian.org/doc/debian-policy/]
Added:
tomee/tomee/trunk/tomee/tomee-deb/
tomee/tomee/trunk/tomee/tomee-deb/pom.xml
tomee/tomee/trunk/tomee/tomee-deb/src/
tomee/tomee/trunk/tomee/tomee-deb/src/main/
tomee/tomee/trunk/tomee/tomee-deb/src/main/config/
tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/
tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/
tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/
tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/
tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/
tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy
tomee/tomee/trunk/tomee/tomee-deb/src/main/java/
tomee/tomee/trunk/tomee/tomee-deb/src/main/java/readme.txt
tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/
tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/
tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template
tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh
tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh
tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/
tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/tomee.sh
Modified:
tomee/tomee/trunk/tomee/pom.xml
Modified: tomee/tomee/trunk/tomee/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/pom.xml?rev=1580883&r1=1580882&r2=1580883&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/pom.xml (original)
+++ tomee/tomee/trunk/tomee/pom.xml Mon Mar 24 15:23:31 2014
@@ -47,6 +47,7 @@
<module>tomee-jaxrs-webapp</module>
<module>apache-tomee</module>
<module>tomee-util</module>
+ <module>tomee-deb</module>
</modules>
<repositories>
Added: tomee/tomee/trunk/tomee/tomee-deb/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/pom.xml?rev=1580883&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/pom.xml (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/pom.xml Mon Mar 24 15:23:31 2014
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>tomee</artifactId>
+ <groupId>org.apache.openejb</groupId>
+ <version>1.6.1-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>tomee-deb</artifactId>
+ <packaging>jar</packaging>
+ <name>OpenEJB :: TomEE :: Debian Package Builder</name>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <commons.compress>1.8</commons.compress>
+ <commons.io>2.4</commons.io>
+ <commons.codec>1.9</commons.codec>
+ <distribution.workdir>${project.build.directory}/work-dir</distribution.workdir>
+ </properties>
+ <repositories>
+ <repository>
+ <id>apache.snapshots</id>
+ <url>http://repository.apache.org/snapshots/</url>
+ <releases>
+ <updatePolicy>daily</updatePolicy>
+ </releases>
+ <snapshots>
+ <updatePolicy>daily</updatePolicy>
+ </snapshots>
+ </repository>
+ </repositories>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy-ant</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-compress</artifactId>
+ <version>${commons.compress}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>${commons.io}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>${commons.codec}</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.3</version>
+ <executions>
+ <execution>
+ <id>copy-tomee-zip</id>
+ <phase>prepare-package</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>apache-tomee</artifactId>
+ <version>${project.version}</version>
+ <classifier>plus</classifier>
+ <type>zip</type>
+ <outputDirectory>${distribution.workdir}</outputDirectory>
+ <destFileName>tomee.zip</destFileName>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <compilerId>groovy-eclipse-compiler</compilerId>
+ <verbose>true</verbose>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy-eclipse-compiler</artifactId>
+ <version>2.8.0-01</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy-eclipse-batch</artifactId>
+ <version>2.1.8-01</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.gmaven</groupId>
+ <artifactId>groovy-maven-plugin</artifactId>
+ <version>2.0</version>
+ <configuration>
+ <classpathScope>runtime</classpathScope>
+ <scriptpath>
+ <path>${project.basedir}/src/main/groovy</path>
+ </scriptpath>
+ <defaults>
+ <testSectionsFile>${project.basedir}/sections.properties</testSectionsFile>
+ <logOutputDirectory>${project.build.directory}/logs</logOutputDirectory>
+ <backupLogs>true</backupLogs>
+ </defaults>
+ </configuration>
+ <executions>
+ <execution>
+ <id>build-distribution</id>
+ <phase>package</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <properties>
+ <tomeeVersion>${project.version}</tomeeVersion>
+ <workDir>${distribution.workdir}</workDir>
+ <buildDir>${project.build.directory}</buildDir>
+ </properties>
+ <source>
+ new org.apache.tomee.deb.PackageBuilder(properties: properties).createPackage()
+ </source>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.3.1</version>
+ <executions>
+ <execution>
+ <id>install-deb-package</id>
+ <phase>install</phase>
+ <goals>
+ <goal>install-file</goal>
+ </goals>
+ <configuration>
+ <file>${project.build.directory}/apache-tomee-${project.version}.deb</file>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>apache-tomee</artifactId>
+ <version>${project.version}</version>
+ <packaging>deb</packaging>
+ <generatePom>${true}</generatePom>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy?rev=1580883&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy Mon Mar 24 15:23:31 2014
@@ -0,0 +1,205 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tomee.deb
+
+import groovy.text.GStringTemplateEngine
+import org.apache.commons.codec.digest.DigestUtils
+import org.apache.commons.compress.archivers.ar.ArArchiveEntry
+import org.apache.commons.compress.archivers.ar.ArArchiveOutputStream
+
+class PackageBuilder {
+ def ant = new AntBuilder()
+ def properties
+
+ String unzip(String tarPath) {
+ def outputDir = new File(new File(tarPath).parent, 'exploded')
+ outputDir.mkdirs()
+ ant.unzip(
+ src: tarPath,
+ dest: outputDir.absolutePath
+ )
+ def files = outputDir.listFiles()
+ if (files.size() > 1) {
+ return outputDir.absolutePath
+ }
+ def aux = new File(new File(tarPath).parent, 'aux')
+ files[0].renameTo(aux)
+ outputDir.delete()
+ aux.renameTo(outputDir)
+ ant.delete(includeemptydirs: true) {
+ fileset(dir: outputDir.absolutePath, includes: '**/*.exe')
+ fileset(dir: outputDir.absolutePath, includes: '**/*.bat')
+ fileset(dir: outputDir.absolutePath, includes: '**/*.original')
+ fileset(dir: outputDir.absolutePath, includes: '**/*.tmp')
+ fileset(dir: new File(outputDir, 'webapps').absolutePath) {
+ include(name: '**/*')
+ exclude(name: '**/tomee/**')
+ }
+ }
+ outputDir.absolutePath
+ }
+
+ private String getCheckSum(File file) {
+ return getCheckSum(new FileInputStream(file))
+ }
+
+ private String getCheckSum(InputStream input) {
+ String md5 = DigestUtils.md5Hex(input)
+ input.close()
+ return md5
+ }
+
+ private String getCheckSumLine(File root, File file) {
+ String md5 = getCheckSum(file)
+ return "${md5} ${file.absolutePath.substring(root.absolutePath.length() + 1)}"
+ }
+
+ String createControlDir(String dataDirPath) {
+ def dataDir = new File(dataDirPath)
+ def controlDir = new File(dataDir.parent, 'control')
+ controlDir.mkdirs()
+ new File(controlDir, 'md5sums').withWriter { BufferedWriter out ->
+ dataDir.eachFileRecurse {
+ if (it.directory) {
+ return
+ }
+ out.writeLine(getCheckSumLine(dataDir, it))
+ }
+ }
+ Double installedSize = dataDir.directorySize() / 1024
+ new File(controlDir, 'control').withWriter { BufferedWriter out ->
+ def template = new GStringTemplateEngine().createTemplate(
+ this.class.getResource('/control/control.template')
+ ).make([
+ tomeeVersion: properties.tomeeVersion,
+ inMB : installedSize.longValue()
+ ])
+ out.write(template.toString())
+ }
+ new File(controlDir, 'postinst').withWriter { BufferedWriter out ->
+ out.write(this.class.getResource('/control/postinst.sh').text)
+ }
+ new File(controlDir, 'prerm').withWriter { BufferedWriter out ->
+ out.write(this.class.getResource('/control/prerm.sh').text)
+ }
+ controlDir.absolutePath
+ }
+
+ String createDataDir(String explodedPath) {
+ def exploded = new File(explodedPath)
+ def outputDir = new File(exploded.parent, 'output')
+ def dataDir = new File(outputDir, 'data')
+ dataDir.mkdirs()
+ def distributionTomeeDir = new File(dataDir, 'opt/tomee')
+ ant.move(todir: distributionTomeeDir.absolutePath) {
+ fileset(dir: explodedPath) {
+ include(name: "**/*")
+ }
+ }
+ ant.move(todir: new File(dataDir, 'etc/tomee').absolutePath) {
+ fileset(dir: new File(distributionTomeeDir, 'conf')) {
+ include(name: "**/*")
+ }
+ }
+ def initd = new File(dataDir, 'etc/init.d/')
+ initd.mkdirs()
+ new File(initd, 'tomee').withWriter { BufferedWriter out ->
+ out.write(this.class.getResource('/init/tomee.sh').text)
+ }
+ ant.move(
+ todir: new File(dataDir, 'var/lib/tomee').absolutePath,
+ file: new File(distributionTomeeDir, 'webapps').absolutePath
+ )
+ new File(dataDir, 'var/log/tomee').mkdirs()
+ new File(dataDir, 'var/tmp/tomee/temp').mkdirs()
+ new File(dataDir, 'var/tmp/tomee/work').mkdirs()
+ new File(distributionTomeeDir, 'conf').delete() // add link from "/usr/lib/tomee/conf" to "/etc/tomee"
+ new File(distributionTomeeDir, 'logs').delete() // add link from "/usr/lib/tomee/logs" to "/var/log/tomee"
+ new File(distributionTomeeDir, 'temp').delete() // add link from "/usr/lib/tomee/temp" to "/var/tmp/tomee/temp"
+ new File(distributionTomeeDir, 'work').delete() // add link from "/usr/lib/tomee/work" to "/var/tmp/tomee/work"
+ new File(distributionTomeeDir, 'webapps').delete() // add link from "/usr/lib/tomee/webapps" to "/var/lib/tomee/webapps"
+ exploded.delete()
+ dataDir.absolutePath
+ }
+
+ private File createTarGz(String path) {
+ def dataDir = new File(path)
+ def tarFile = new File(dataDir.parent, "${dataDir.name}.tar")
+ def gzFile = new File(tarFile.parent, "${tarFile.name}.gz")
+ ant.with {
+ tar(destfile: tarFile) {
+ tarfileset(dir: dataDir.absolutePath, username: 'root', group: 'root', prefix: './') {
+ include(name: "**/*")
+ exclude(name: "**/*.sh")
+ exclude(name: "**/postinst")
+ exclude(name: "**/prerm")
+ exclude(name: "**/init.d/tomee")
+ }
+ tarfileset(dir: dataDir.absolutePath, username: 'root', group: 'root', filemode: '755', prefix: './') {
+ include(name: "**/*.sh")
+ include(name: "**/postinst")
+ include(name: "**/prerm")
+ include(name: "**/init.d/tomee")
+ }
+ }
+ gzip(src: tarFile, destfile: gzFile)
+ delete(file: tarFile)
+ }
+ gzFile
+ }
+
+
+ private static void arItem(ArArchiveOutputStream output, File file) {
+ def entry = new ArArchiveEntry(file.name, file.length())
+ output.putArchiveEntry(entry)
+ output << new FileInputStream(file)
+ output.closeArchiveEntry()
+ }
+
+ private static void arDebianBinary(ArArchiveOutputStream output) {
+ byte[] text = "2.0\n".getBytes()
+ def entry = new ArArchiveEntry('debian-binary', text.length)
+ output.putArchiveEntry(entry)
+ output.write(text)
+ output.closeArchiveEntry()
+ }
+
+ File compressFiles(String... paths) {
+ def packageName = "apache-tomee-${properties.tomeeVersion}.deb"
+ def ar = new File(new File(paths[0]).parent, packageName)
+ def output = new ArArchiveOutputStream(new FileOutputStream(ar))
+ arDebianBinary(output)
+ paths.collect({
+ createTarGz(it)
+ }).each {
+ arItem(output, it)
+ }
+ output.close()
+ ar
+ }
+
+ void createPackage() {
+ def filePath = new File(properties.workDir as String, 'tomee.zip').absolutePath
+ def explodedPath = unzip(filePath)
+ def dataDir = createDataDir(explodedPath)
+ def controlDir = createControlDir(dataDir)
+ def deb = compressFiles(controlDir, dataDir)
+ deb.renameTo(new File(properties.buildDir as String, deb.name))
+ }
+}
Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/java/readme.txt
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/java/readme.txt?rev=1580883&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/java/readme.txt (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/java/readme.txt Mon Mar 24 15:23:31 2014
@@ -0,0 +1,6 @@
+If there is at least one file (Java or not) in src/main/java,
+then all files in src/main/groovy will be found.
+If, however, src/main/java is empty, then src/main/groovy will be ignored.
+You can get around this by placing an empty file in src/main/java just so that src/main/groovy
+will be recognized. The same is true for src/test/java and src/test/groovy.
+This is actually a workaround for GRECLIPSE-1221.
\ No newline at end of file
Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template?rev=1580883&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/control.template Mon Mar 24 15:23:31 2014
@@ -0,0 +1,13 @@
+Package: tomee
+Version: ${tomeeVersion}
+Section: java
+Priority: optional
+Homepage: http://tomee.apache.org/
+Architecture: all
+Installed-Size: ${inMB}
+Maintainer: devlist <de...@tomee.apache.org>
+Description: Apache TomEE
+ Apache TomEE, pronounced "Tommy", is an all-Apache Java EE 6 Web Profile
+ certified stack where Tomcat is top dog. Apache TomEE is assembled from a
+ vanilla Apache Tomcat zip file. We start with Tomcat, add our jars and zip
+ up the rest. The result is Tomcat with added EE features - TomEE.
Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh?rev=1580883&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/postinst.sh Mon Mar 24 15:23:31 2014
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+ln -sf /etc/tomee /opt/tomee/conf
+ln -sf /var/log/tomee /opt/tomee/logs
+ln -sf /var/tmp/tomee/temp /opt/tomee/temp
+ln -sf /var/tmp/tomee/work /opt/tomee/work
+ln -sf /var/lib/tomee/webapps /opt/tomee/webapps
+
+groupadd apachetomee
+useradd apachetomee -g apachetomee
+
+chown -R apachetomee:apachetomee /opt/tomee/
+chown -R apachetomee:apachetomee /var/log/tomee
+chown -R apachetomee:apachetomee /var/tmp/tomee/temp
+chown -R apachetomee:apachetomee /var/tmp/tomee/work
+chown -R apachetomee:apachetomee /var/lib/tomee/webapps
+
+update-rc.d tomee defaults
+echo "Reboot your machine or run 'service tomee start' to start the Apache TomEE server"
\ No newline at end of file
Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh?rev=1580883&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/control/prerm.sh Mon Mar 24 15:23:31 2014
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+kill -9 $(ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{print $2}')
+
+rm -f /opt/tomee/conf
+rm -f /opt/tomee/logs
+rm -f /opt/tomee/temp
+rm -f /opt/tomee/work
+rm -f /opt/tomee/webapps
+
+update-rc.d -f tomee remove
\ No newline at end of file
Added: tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/tomee.sh
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/tomee.sh?rev=1580883&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/tomee.sh (added)
+++ tomee/tomee/trunk/tomee/tomee-deb/src/main/resources/init/tomee.sh Mon Mar 24 15:23:31 2014
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+CATALINA_HOME=/opt/tomee
+TOMCAT_USER=apachetomee
+
+RETVAL=0
+start(){
+ echo "Starting TomEE: "
+ su - $TOMCAT_USER -c "$CATALINA_HOME/bin/startup.sh"
+ RETVAL=$?
+ return $RETVAL
+}
+
+stop(){
+ echo "Shutting down TomEE: "
+ su - $TOMCAT_USER -c "$CATALINA_HOME/bin/shutdown.sh"
+ RETVAL=$?
+ return $RETVAL
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ force-reload)
+ stop
+ start
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|force-reload}"
+ exit 1
+ ;;
+esac
+exit $?
\ No newline at end of file