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