BUG 932 - Swagger HTTP POST contains incorrect object
[controller.git] / opendaylight / distribution / opendaylight-karaf-resources / src / main / resources / bin / karaf
1 #!/bin/sh
2 #
3 #    Licensed to the Apache Software Foundation (ASF) under one or more
4 #    contributor license agreements.  See the NOTICE file distributed with
5 #    this work for additional information regarding copyright ownership.
6 #    The ASF licenses this file to You under the Apache License, Version 2.0
7 #    (the "License"); you may not use this file except in compliance with
8 #    the License.  You may obtain a copy of the License at
9 #
10 #       http://www.apache.org/licenses/LICENSE-2.0
11 #
12 #    Unless required by applicable law or agreed to in writing, software
13 #    distributed under the License is distributed on an "AS IS" BASIS,
14 #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 #    See the License for the specific language governing permissions and
16 #    limitations under the License.
17 #
18
19 DIRNAME=`dirname $0`
20 PROGNAME=`basename $0`
21
22 #
23 # Sourcing environment settings for karaf similar to tomcats setenv
24 #
25 KARAF_SCRIPT="karaf"
26 export KARAF_SCRIPT
27 if [ -f "$DIRNAME/setenv" ]; then
28   . "$DIRNAME/setenv"
29 fi
30
31 #
32 # Set up some easily accessible MIN/MAX params for JVM mem usage
33 #
34 if [ "x$JAVA_MIN_MEM" = "x" ]; then
35     JAVA_MIN_MEM=128M
36     export JAVA_MIN_MEM
37 fi
38 if [ "x$JAVA_MAX_MEM" = "x" ]; then
39     JAVA_MAX_MEM=512M
40     export JAVA_MAX_MEM
41 fi
42
43 #
44 # Check the mode that initiated the script
45 #
46 if [ "x$1" != "x" ]; then
47     MODE=$1
48 fi
49
50 warn() {
51     echo "${PROGNAME}: $*"
52 }
53
54 die() {
55     warn "$*"
56     exit 1
57 }
58
59 detectOS() {
60     # OS specific support (must be 'true' or 'false').
61     cygwin=false;
62     darwin=false;
63     aix=false;
64     os400=false;
65     case "`uname`" in
66         CYGWIN*)
67             cygwin=true
68             ;;
69         Darwin*)
70             darwin=true
71             ;;
72         AIX*)
73             aix=true
74             ;;
75         OS400*)
76             os400=true
77             ;;
78     esac
79     # For AIX, set an environment variable
80     if $aix; then
81          export LDR_CNTRL=MAXDATA=0xB0000000@DSA
82          echo $LDR_CNTRL
83     fi
84 }
85
86 unlimitFD() {
87     # Use the maximum available, or set MAX_FD != -1 to use that
88     if [ "x$MAX_FD" = "x" ]; then
89         MAX_FD="maximum"
90     fi
91
92     # Increase the maximum file descriptors if we can
93     if [ "$os400" = "false" ] && [ "$cygwin" = "false" ]; then
94         MAX_FD_LIMIT=`ulimit -H -n`
95         if [ "$MAX_FD_LIMIT" != 'unlimited' ]; then 
96             if [ $? -eq 0 ]; then
97                 if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
98                     # use the system max
99                     MAX_FD="$MAX_FD_LIMIT"
100                 fi
101
102                 ulimit -n $MAX_FD > /dev/null
103                 # echo "ulimit -n" `ulimit -n`
104                 if [ $? -ne 0 ]; then
105                     warn "Could not set maximum file descriptor limit: $MAX_FD"
106                 fi
107             else
108                 warn "Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"
109             fi
110         fi
111     fi
112 }
113
114 locateHome() {
115     if [ "x$KARAF_HOME" != "x" ]; then
116         warn "Ignoring predefined value for KARAF_HOME"
117     fi
118
119     # In POSIX shells, CDPATH may cause cd to write to stdout
120     (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
121
122     KARAF_HOME=`cd "$DIRNAME/.."; pwd`
123     if [ ! -d "$KARAF_HOME" ]; then
124         die "KARAF_HOME is not valid: $KARAF_HOME"
125     fi
126 }
127
128 locateBase() {
129     if [ "x$KARAF_BASE" != "x" ]; then
130         if [ ! -d "$KARAF_BASE" ]; then
131             die "KARAF_BASE is not valid: $KARAF_BASE"
132         fi
133     else
134         KARAF_BASE=$KARAF_HOME
135     fi
136 }
137
138 locateData() {
139     if [ "x$KARAF_DATA" != "x" ]; then
140         if [ ! -d "$KARAF_DATA" ]; then
141             die "KARAF_DATA is not valid: $KARAF_DATA"
142         fi
143     else
144         KARAF_DATA=$KARAF_BASE/data
145     fi
146 }
147
148 locateEtc() {
149     if [ "x$KARAF_ETC" != "x" ]; then
150         if [ ! -d "$KARAF_ETC" ]; then
151             die "KARAF_ETC is not valid: $KARAF_ETC"
152         fi
153     else
154         KARAF_ETC=$KARAF_BASE/etc
155     fi
156 }
157
158 setupNativePath() {
159     # Support for loading native libraries
160     LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$KARAF_BASE/lib:$KARAF_HOME/lib"
161
162     # For Cygwin, set PATH from LD_LIBRARY_PATH
163     if $cygwin; then
164         LD_LIBRARY_PATH=`cygpath --path --windows "$LD_LIBRARY_PATH"`
165         PATH="$PATH;$LD_LIBRARY_PATH"
166         export PATH
167     fi
168     export LD_LIBRARY_PATH
169 }
170
171 pathCanonical() {
172     local dst="${1}"
173     while [ -h "${dst}" ] ; do
174         ls=`ls -ld "${dst}"`
175         link=`expr "$ls" : '.*-> \(.*\)$'`
176         if expr "$link" : '/.*' > /dev/null; then
177             dst="$link"
178         else
179             dst="`dirname "${dst}"`/$link"
180         fi
181     done
182     local bas=`basename "${dst}"`
183     local dir=`dirname "${dst}"`
184     if [ "$bas" != "$dir" ]; then
185       dst="`pathCanonical "$dir"`/$bas"
186     fi
187     echo "${dst}" | sed -e 's#//#/#g' -e 's#/./#/#g' -e 's#/[^/]*/../#/#g'
188 }
189
190 locateJava() {
191     # Setup the Java Virtual Machine
192     if $cygwin ; then
193         [ -n "$JAVA" ] && JAVA=`cygpath --unix "$JAVA"`
194         [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
195     fi
196
197         if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then
198                 JAVA_HOME="$(/usr/libexec/java_home)"
199         fi
200     if [ "x$JAVA" = "x" ] && [ -r /etc/gentoo-release ] ; then
201         JAVA_HOME=`java-config --jre-home`
202     fi
203     if [ "x$JAVA" = "x" ]; then
204         if [ "x$JAVA_HOME" != "x" ]; then
205             if [ ! -d "$JAVA_HOME" ]; then
206                 die "JAVA_HOME is not valid: $JAVA_HOME"
207             fi
208             JAVA="$JAVA_HOME/bin/java"
209         else
210             warn "JAVA_HOME not set; results may vary"
211             JAVA=`type java`
212             JAVA=`expr "$JAVA" : '.*is \(.*\)$'`
213             if [ "x$JAVA" = "x" ]; then
214                 die "java command not found"
215             fi
216         fi
217     fi
218     if [ "x$JAVA_HOME" = "x" ]; then
219         JAVA_HOME="$(dirname $(dirname $(pathCanonical "$JAVA")))"
220     fi
221 }
222
223 detectJVM() {
224    #echo "`$JAVA -version`"
225    # This service should call `java -version`,
226    # read stdout, and look for hints
227    if $JAVA -version 2>&1 | grep "^IBM" ; then
228        JVM_VENDOR="IBM"
229    # on OS/400, java -version does not contain IBM explicitly
230    elif $os400; then
231        JVM_VENDOR="IBM"
232    else
233        JVM_VENDOR="SUN"
234    fi
235    # echo "JVM vendor is $JVM_VENDOR"
236 }
237
238 checkJvmVersion() {
239    # echo "`$JAVA -version`"
240    VERSION=`$JAVA -version 2>&1 | egrep '"([0-9].[0-9]\..*[0-9])"' | awk '{print substr($3,2,length($3)-2)}' | awk '{print substr($1, 3, 3)}' | sed -e 's;\.;;g'`
241    # echo $VERSION
242    if [ "$VERSION" -lt "60" ]; then
243        echo "JVM must be greater than 1.6"
244        exit 1;
245    fi
246 }
247
248 setupDebugOptions() {
249     if [ "x$JAVA_OPTS" = "x" ]; then
250         JAVA_OPTS="$DEFAULT_JAVA_OPTS"
251     fi
252     export JAVA_OPTS
253
254     # Set Debug options if enabled
255     if [ "x$KARAF_DEBUG" != "x" ]; then
256         # Ignore DEBUG in case of stop or client mode
257         if [ "x$MODE" = "xstop" ]; then
258             return
259         fi
260         if [ "x$MODE" = "xclient" ]; then
261             return
262         fi
263         # Use the defaults if JAVA_DEBUG_OPTS was not set
264         if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then
265             JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
266         fi
267
268         JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS"
269         warn "Enabling Java debug options: $JAVA_DEBUG_OPTS"
270     fi
271 }
272
273 setupDefaults() {
274     DEFAULT_JAVA_OPTS="-Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass "
275
276     #Set the JVM_VENDOR specific JVM flags
277     if [ "$JVM_VENDOR" = "SUN" ]; then
278         #
279         # Check some easily accessible MIN/MAX params for JVM mem usage
280         #
281         if [ "x$JAVA_PERM_MEM" != "x" ]; then
282             DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:PermSize=$JAVA_PERM_MEM"
283         fi
284         if [ "x$JAVA_MAX_PERM_MEM" != "x" ]; then
285             DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:MaxPermSize=$JAVA_MAX_PERM_MEM"
286         fi
287         DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote"
288     elif [ "$JVM_VENDOR" = "IBM" ]; then
289         if $os400; then
290             DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS"
291         elif $aix; then
292             DEFAULT_JAVA_OPTS="-Xverify:none -Xdump:heap -Xlp $DEFAULT_JAVA_OPTS"
293         else
294             DEFAULT_JAVA_OPTS="-Xverify:none $DEFAULT_JAVA_OPTS"
295         fi
296     fi
297
298     # Add the jars in the lib dir
299     for file in "$KARAF_HOME"/lib/karaf*.jar
300     do
301         if [ -z "$CLASSPATH" ]; then
302             CLASSPATH="$file"
303         else
304             CLASSPATH="$CLASSPATH:$file"
305         fi
306     done
307     DEFAULT_JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
308
309     ##
310     ## TODO: Move to conf/profiler/yourkit.{sh|cmd}
311     ##
312     # Uncomment to enable YourKit profiling
313     #DEFAULT_JAVA_DEBUG_OPTS="-Xrunyjpagent"
314 }
315
316 init() {
317     # Determine if there is special OS handling we must perform
318     detectOS
319
320     # Unlimit the number of file descriptors if possible
321     unlimitFD
322
323     # Locate the Karaf home directory
324     locateHome
325
326     # Locate the Karaf base directory
327     locateBase
328
329     # Locate the Karaf data directory
330     locateData
331
332     # Locate the Karaf etc directory
333     locateEtc
334
335     # Setup the native library path
336     setupNativePath
337
338     # Locate the Java VM to execute
339     locateJava
340
341     # Determine the JVM vendor
342     detectJVM
343     
344     # Determine the JVM version >= 1.6
345     checkJvmVersion
346
347     # Setup default options
348     setupDefaults
349
350     # Install debug options
351     setupDebugOptions
352
353 }
354
355 run() {
356     OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=true"
357     MAIN=org.apache.karaf.main.Main
358     while [ "$1" != "" ]; do
359         case $1 in
360             'clean')
361                 rm -Rf "$KARAF_DATA"
362                 shift
363                 ;;
364             'debug')
365                 if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then
366                     JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
367                 fi
368                 JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS"
369                 shift
370                 ;;
371             'status')
372                 MAIN=org.apache.karaf.main.Status
373                 shift
374                 ;;
375             'stop')
376                 MAIN=org.apache.karaf.main.Stop
377                 shift
378                 ;;
379             'console')
380                 shift
381                 ;;
382             'server')
383                 OPTS="-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true"
384                 shift
385                 ;;
386             'client')
387                 OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=false"
388                 shift
389                 ;;
390             *)
391                 break
392                 ;;
393         esac
394     done
395
396     JAVA_ENDORSED_DIRS="${JAVA_HOME}/jre/lib/endorsed:${JAVA_HOME}/lib/endorsed:${KARAF_HOME}/lib/endorsed"
397     JAVA_EXT_DIRS="${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext:${KARAF_HOME}/lib/ext"
398     if $cygwin; then
399         KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"`
400         KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
401         KARAF_DATA=`cygpath --path --windows "$KARAF_DATA"`
402         KARAF_ETC=`cygpath --path --windows "$KARAF_ETC"`
403         CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
404         JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
405         JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
406         JAVA_EXT_DIRS=`cygpath --path --windows "$JAVA_EXT_DIRS"`
407     fi
408     cd "$KARAF_BASE"
409
410     exec "$JAVA" $JAVA_OPTS -Djava.endorsed.dirs="${JAVA_ENDORSED_DIRS}" -Djava.ext.dirs="${JAVA_EXT_DIRS}" -Dkaraf.instances="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Dkaraf.data="$KARAF_DATA" -Dkaraf.etc="$KARAF_ETC" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file="$KARAF_BASE/etc/java.util.logging.properties" $KARAF_OPTS $OPTS -classpath "$CLASSPATH" $MAIN "$@"
411 }
412
413 main() {
414     init
415     run "$@"
416 }
417
418 main "$@"