Modified: karaf/site/production/manual/latest/installation.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/installation.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/installation.html (original) +++ karaf/site/production/manual/latest/installation.html Wed Nov 22 14:52:25 2017 @@ -860,7 +860,7 @@ This property is used to locate the <cod </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body>
Modified: karaf/site/production/manual/latest/instances.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/instances.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/instances.html (original) +++ karaf/site/production/manual/latest/instances.html Wed Nov 22 14:52:25 2017 @@ -1067,7 +1067,7 @@ If wait is true, this operation is waiti </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/jdbc.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/jdbc.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/jdbc.html (original) +++ karaf/site/production/manual/latest/jdbc.html Wed Nov 22 14:52:25 2017 @@ -641,7 +641,7 @@ OPTIONS </div> <div class="listingblock"> <div class="content"> -<pre>karaf@root()> jdbc:ds-create -dn derby -dbName test -url jdbc:derby:test test</pre> +<pre>karaf@root()> jdbc:ds-create -dn derby -url "jdbc:derby:test;create=true" test</pre> </div> </div> <div class="paragraph"> @@ -832,7 +832,7 @@ REF_GENERATION | TYPE_NAME | TABLE_NAME </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-11-15 16:55:26 +01:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/jms.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/jms.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/jms.html (original) +++ karaf/site/production/manual/latest/jms.html Wed Nov 22 14:52:25 2017 @@ -983,7 +983,7 @@ ID:vostro-59602-1387462183019-3:3:1:1:1 </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/jndi.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/jndi.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/jndi.html (original) +++ karaf/site/production/manual/latest/jndi.html Wed Nov 22 14:52:25 2017 @@ -831,7 +831,7 @@ and the regular JNDI service.</p> </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/jpa.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/jpa.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/jpa.html (original) +++ karaf/site/production/manual/latest/jpa.html Wed Nov 22 14:52:25 2017 @@ -568,7 +568,7 @@ container managed persistence for applic </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/jta.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/jta.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/jta.html (original) +++ karaf/site/production/manual/latest/jta.html Wed Nov 22 14:52:25 2017 @@ -658,7 +658,7 @@ aries.transaction.howl.bufferSizeKBytes </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/kar.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/kar.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/kar.html (original) +++ karaf/site/production/manual/latest/kar.html Wed Nov 22 14:52:25 2017 @@ -776,6 +776,9 @@ is supported by the <code>kar:install</c <p>The Apache Karaf KAR service is looking for features XML files in the KAR file, registers the features XML and automatically installs all features described in the features repositories present in the KAR file.</p> </div> +<div class="paragraph"> +<p>Optionally, you can control if the bundles should be automatically started or not using <code>--no-start</code> option.</p> +</div> </div> <div class="sect4"> <h5 id="__code_kar_uninstall_code"><code>kar:uninstall</code></h5> @@ -841,7 +844,18 @@ installs all features described in the f # Enable or disable the refresh of the bundles when installing # the features contained in a KAR file # -noAutoRefreshBundles=false</pre> +noAutoRefreshBundles=false + +# +# Enable or disable the automatic start of the bundles when installing +# the features contained in a KAR file +# +noAutoStartBundles=false + +# +# Directory where the kar are stored (when downloaded from Maven for instance) +# +#karStorage=${karaf.data}/kar</pre> </div> </div> <div class="paragraph"> @@ -871,6 +885,9 @@ You can disable the automatic bundles re <p><code>install(url)</code> installs the KAR file at the given <code>url</code>.</p> </li> <li> +<p><code>install(url, noAutoStartBundles)</code> installs the KAR file at the given <code>url</code>, deciding if you want to automatically start the bundles or not.</p> +</li> +<li> <p><code>create(repository, features)</code> creates a KAR file using the given features <code>repository</code> name, and optionally the list of <code>features</code> to include in the KAR file.</p> </li> @@ -885,7 +902,7 @@ list of <code>features</code> to include </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-11-15 16:55:26 +01:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/karaf-maven-plugin.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/karaf-maven-plugin.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/karaf-maven-plugin.html (original) +++ karaf/site/production/manual/latest/karaf-maven-plugin.html Wed Nov 22 14:52:25 2017 @@ -577,11 +577,11 @@ table.CodeRay td.code>pre{padding:0} <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">feature</p></td> -<td class="tableblock halign-left valign-top"><p class="tableblock">The feature packaging generates a features.xml descriptor using the <code>karaf:features-generate-descriptor</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The feature packaging verifies a features.xml descriptor using the <code>karaf:verify</code> goal.</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">kar</p></td> -<td class="tableblock halign-left valign-top"><p class="tableblock">The kar packaging generates a features.xml descriptor using the <code>karaf:features-generate-descriptor</code> and then packages a kar using the <code>karaf:features-create-kar</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">The kar packaging generates a features.xml descriptor using the <code>karaf:features-generate-descriptor</code> and then packages a kar using the <code>karaf:features-create-kar</code> goal.</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">karaf-assembly</p></td> @@ -696,9 +696,6 @@ option in the Karaf shell console.</p> <div class="sect4"> <h5 id="__code_karaf_features_generate_descriptor_code"><code>karaf:features-generate-descriptor</code></h5> <div class="paragraph"> -<p>Except in unusual circumstances, use the <code><packaging>feature</packaging></code> to run this goal.</p> -</div> -<div class="paragraph"> <p>The <code>karaf:features-generate-descriptor</code> goal generates a features XML file based on the Maven dependencies. By default, it will follow Maven transitive dependencies, stopping when it encounters bundles already present in features that are Maven dependencies.</p> </div> @@ -797,11 +794,19 @@ This can be overridden by specifying the <artifactId>karaf-maven-plugin</artifactId> <version>${project.version}</version> <extensions>true</extensions> - <configuration> - <startLevel>80</startLevel> - <aggregateFeatures>true</aggregateFeatures> - </configuration> - </plugin> + <configuration> + <enableGeneration>true</enableGeneration> + </configuration> + <executions> + <execution> + <id>generate-features-file</id> + <phase>generate-resources</phase> + <goals> + <goal>features-generate-descriptor</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </build> </project></pre> @@ -812,6 +817,9 @@ This can be overridden by specifying the <div class="sect4"> <h5 id="__code_karaf_verify_code"><code>karaf:verify</code></h5> <div class="paragraph"> +<p>Except in unusual circumstances, use the <code><packaging>feature</packaging></code> to run this goal.</p> +</div> +<div class="paragraph"> <p>The <code>karaf:verify</code> goal verifies and validates a features XML descriptor by checking if all the required imports for the bundles defined in the features can be matched to a provided export.</p> </div> @@ -831,32 +839,32 @@ It reads the definition for the packages <pre><project> <build> <plugins> - <plugin> - <groupId>org.apache.karaf.tooling</groupId> - <artifactId>karaf-maven-plugin</artifactId> - <configuration> - </configuration> - <executions> - <execution> - <id>verify</id> - <phase>process-resources</phase> - <goals> - <goal>verify</goal> - </goals> - <configuration> - <descriptors> - <descriptor>mvn:org.apache.karaf.features/framework/4.0.4/xml/features</descriptor> - <descriptor>file:${project.build.directory}/feature/feature.xml</descriptor> - </descriptors> - <distribution>org.apache.karaf.features:framework</distribution> - <javase>1.8</javase> - <framework> - <feature>framework</feature> - </framework> - </configuration> - </execution> - </executions> - </plugin> + <plugin> + <groupId>org.apache.karaf.tooling</groupId> + <artifactId>karaf-maven-plugin</artifactId> + <configuration> + </configuration> + <executions> + <execution> + <id>verify</id> + <phase>process-resources</phase> + <goals> + <goal>verify</goal> + </goals> + <configuration> + <descriptors> + <descriptor>mvn:org.apache.karaf.features/framework/4.0.4/xml/features</descriptor> + <descriptor>file:${project.build.directory}/feature/feature.xml</descriptor> + </descriptors> + <distribution>org.apache.karaf.features:framework</distribution> + <javase>1.8</javase> + <framework> + <feature>framework</feature> + </framework> + </configuration> + </execution> + </executions> + </plugin> </plugins> </build> </project></pre> @@ -1170,6 +1178,16 @@ META-INF in the kar, without getting ins <td class="tableblock halign-left valign-top"><p class="tableblock"><code>File</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The target file to set as the project’s artifact. Default value: ${project.file}</p></td> </tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>archiveZip</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Switches creation of *.zip artifact on or off. Default value: true</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>archiveTarGz</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Switches creation of *.tar.gz artifact on or off. Default value: true</p></td> +</tr> </tbody> </table> </div> @@ -1198,7 +1216,7 @@ META-INF in the kar, without getting ins </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-11-22 15:12:31 +01:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/log.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/log.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/log.html (original) +++ karaf/site/production/manual/latest/log.html Wed Nov 22 14:52:25 2017 @@ -718,6 +718,88 @@ used by the log commands (see later).</p </div> </div> <div class="sect3"> +<h4 id="__code_karaf_log_console_code_property"><code>karaf.log.console</code> property</h4> +<div class="paragraph"> +<p>Before Karaf starts <em>proper</em> logging facilities (pax-logging), it may configure <code>java.util.logging</code>. Standard +Java logging is used initially by <code>Main</code> class and <code>org.apache.karaf.main.lock.Lock</code> implementations. +In order to configure logging level, please set system property <code>karaf.log.console</code> to one of standard JUL +levels:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>SEVERE</code> (highest value)</p> +</li> +<li> +<p><code>WARNING</code></p> +</li> +<li> +<p><code>INFO</code></p> +</li> +<li> +<p><code>CONFIG</code></p> +</li> +<li> +<p><code>FINE</code></p> +</li> +<li> +<p><code>FINER</code></p> +</li> +<li> +<p><code>FINEST</code> (lowest value)</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>Additionally, de-facto standard log4j(2) levels can be used:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>TRACE</code></p> +</li> +<li> +<p><code>DEBUG</code></p> +</li> +<li> +<p><code>INFO</code></p> +</li> +<li> +<p><code>WARN</code></p> +</li> +<li> +<p><code>ERROR</code></p> +</li> +<li> +<p><code>OFF</code></p> +</li> +<li> +<p><code>DEFAULT</code></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>And because <code>org.ops4j.pax.logging</code> PID uses <code>karaf.log.console</code> property, it’s in fact better to use log4j levels instead:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay highlight nowrap"><code>log4j2.rootLogger.appenderRef.Console.filter.threshold.level = ${karaf.log.console:-OFF}</code></pre> +</div> +</div> +<div class="paragraph"> +<p>For example, setting <code>karaf.log.console</code> to <code>INFO</code> (or lower) will turn on these logs when starting Karaf:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="CodeRay highlight nowrap"><code>Jul 04, 2017 7:53:18 AM org.apache.karaf.main.Main launch +INFO: Installing and starting initial bundles +Jul 04, 2017 7:53:18 AM org.apache.karaf.main.Main launch +INFO: All initial bundles installed and set to start +...</code></pre> +</div> +</div> +</div> +<div class="sect3"> <h4 id="_commands">Commands</h4> <div class="paragraph"> <p>Instead of changing the <code>etc/org.ops4j.pax.logging.cfg</code> file, Apache Karaf provides a set of commands allowing to @@ -1345,7 +1427,7 @@ You can now use your appender directly i </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-11-22 15:12:31 +01:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/monitoring.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/monitoring.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/monitoring.html (original) +++ karaf/site/production/manual/latest/monitoring.html Wed Nov 22 14:52:25 2017 @@ -913,7 +913,7 @@ Enter host password for user 'karaf': </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/obr.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/obr.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/obr.html (original) +++ karaf/site/production/manual/latest/obr.html Wed Nov 22 14:52:25 2017 @@ -997,7 +997,7 @@ by the OBR service (meaning installing m </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body> Added: karaf/site/production/manual/latest/os-integration.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/os-integration.html?rev=1816059&view=auto ============================================================================== --- karaf/site/production/manual/latest/os-integration.html (added) +++ karaf/site/production/manual/latest/os-integration.html Wed Nov 22 14:52:25 2017 @@ -0,0 +1,1291 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="UTF-8"> +<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<meta name="generator" content="Asciidoctor 1.5.2"> +<title>Integration in the operating system</title> +<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400"> +<style> +/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */ +/* Remove the comments around the @import statement below when using this as a custom stylesheet */ +/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400";*/ +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +script{display:none!important} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} +body{margin:0} +a{background:transparent} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:bold} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas img,.map_canvas embed,.map_canvas object{max-width:none!important} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +.antialiased,body{-webkit-font-smoothing:antialiased} +img{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:none} +p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} +ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} +ul.square{list-style-type:square} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ul.no-bullet{list-style:none} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} +abbr{text-transform:none} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} +blockquote cite:before{content:"\2014 \0020"} +blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}}table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} +table thead,table tfoot{background:#f7f8f7;font-weight:bold} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table} +.clearfix:after,.float-group:after{clear:both} +*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} +pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed} +.keyseq{color:rgba(51,51,51,.8)} +kbd{display:inline-block;color:rgba(0,0,0,.8);font-size:.75em;line-height:1.4;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:-.15em .15em 0 .15em;padding:.2em .6em .2em .5em;vertical-align:middle;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menu{color:rgba(0,0,0,.8)} +b.button:before,b.button:after{position:relative;top:-1px;font-weight:400} +b.button:before{content:"[";padding:0 3px 0 2px} +b.button:after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table} +#header:after,#content:after,#footnotes:after,#footer:after{clear:both} +#content{margin-top:1.25em} +#content:before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px} +#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span:before{content:"\00a0\2013\00a0"} +#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark:before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber:after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #efefed;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media only screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} +#toc.toc2 #toctitle{margin-top:0;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}@media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}}#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em} +#footer-text{color:rgba(255,255,255,.8);line-height:1.44} +.sect1{padding-bottom:.625em} +@media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}.sect1+.sect1{border-top:1px solid #efefed} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0} +.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)} +table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} +.exampleblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child{margin-bottom:0} +.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} +.sidebarblock>:first-child{margin-top:0} +.sidebarblock>:last-child{margin-bottom:0} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8} +.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1} +.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em} +.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal} +@media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}@media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.listingblock>.content{position:relative} +.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999} +.listingblock:hover code[data-lang]:before{display:block} +.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999} +.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"} +table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0} +table.pyhltable td.code{padding-left:.75em;padding-right:0} +pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8} +pre.pygments .lineno{display:inline-block;margin-right:.25em} +table.pyhltable .linenodiv{background:none!important;padding-right:0!important} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right} +.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)} +.quoteblock .quoteblock blockquote{padding:0 0 0 .75em} +.quoteblock .quoteblock blockquote:before{display:none} +.verseblock{margin:0 1em 1.25em 1em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.05em;color:rgba(0,0,0,.6)} +.quoteblock.abstract{margin:0 0 1.25em 0;display:block} +.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0} +.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none} +table.tableblock{max-width:100%;border-collapse:separate} +table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0} +table.spread{width:100%} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0} +table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0} +table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0} +table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0} +table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0} +table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0} +table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0} +table.frame-all{border-width:1px} +table.frame-sides{border-width:0 1px} +table.frame-topbot{border-width:1px 0} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +td>div.verse{white-space:pre} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none} +ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em} +ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em} +ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px} +ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden} +ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block} +ul.inline>li>*{display:block} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1{padding-right:.75em;font-weight:bold} +td.hdlist1,td.hdlist2{vertical-align:top} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1} +.colist>table tr>td:last-of-type{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} +.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0} +.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none} +span.footnote,span.footnoteref{vertical-align:super;font-size:.875em} +span.footnote a,span.footnoteref a{text-decoration:none} +span.footnote a:active,span.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0} +#footnotes .footnote{padding:0 .375em;line-height:1.3;font-size:.875em;margin-left:1.2em;text-indent:-1.2em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} +.gist .file-data>table td.line-data{width:99%} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background-color:#00fafa} +.black{color:#000} +.black-background{background-color:#000} +.blue{color:#0000bf} +.blue-background{background-color:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background-color:#fa00fa} +.gray{color:#606060} +.gray-background{background-color:#7d7d7d} +.green{color:#006000} +.green-background{background-color:#007d00} +.lime{color:#00bf00} +.lime-background{background-color:#00fa00} +.maroon{color:#600000} +.maroon-background{background-color:#7d0000} +.navy{color:#000060} +.navy-background{background-color:#00007d} +.olive{color:#606000} +.olive-background{background-color:#7d7d00} +.purple{color:#600060} +.purple-background{background-color:#7d007d} +.red{color:#bf0000} +.red-background{background-color:#fa0000} +.silver{color:#909090} +.silver-background{background-color:#bcbcbc} +.teal{color:#006060} +.teal-background{background-color:#007d7d} +.white{color:#bfbfbf} +.white-background{background-color:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background-color:#fafa00} +span.icon>.fa{cursor:default} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]:after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +h1,h2{letter-spacing:-.01em} +dt,th.tableblock,td.content{text-rendering:optimizeLegibility} +p,td.content{letter-spacing:-.01em} +p strong,td.content strong{letter-spacing:-.005em} +p,blockquote,dt,td.content{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@media print{@page{margin:1.25cm .75cm} +*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]:after{content:" (" attr(title) ")"} +pre,blockquote,tr,img{page-break-inside:avoid} +thead{display:table-header-group} +img{max-width:100%!important} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important} +.sect1{padding-bottom:0!important} +.sect1+.sect1{border:0!important} +#header>h1:first-child{margin-top:1.25rem} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span:before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]:before{display:block} +#footer{background:none!important;padding:0 .9375em} +#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} +</style> +<style> +/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */ +/*pre.CodeRay {background-color:#f7f7f8;}*/ +.CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em} +.CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)} +.CodeRay .line-numbers strong{font-weight: normal} +table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none} +table.CodeRay td{vertical-align: top} +table.CodeRay td.line-numbers{text-align:right} +table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)} +table.CodeRay td.code{padding:0 0 0 .5em} +table.CodeRay td.code>pre{padding:0} +.CodeRay .debug{color:#fff !important;background:#000080 !important} +.CodeRay .annotation{color:#007} +.CodeRay .attribute-name{color:#000080} +.CodeRay .attribute-value{color:#700} +.CodeRay .binary{color:#509} +.CodeRay .comment{color:#998;font-style:italic} +.CodeRay .char{color:#04d} +.CodeRay .char .content{color:#04d} +.CodeRay .char .delimiter{color:#039} +.CodeRay .class{color:#458;font-weight:bold} +.CodeRay .complex{color:#a08} +.CodeRay .constant,.CodeRay .predefined-constant{color:#008080} +.CodeRay .color{color:#099} +.CodeRay .class-variable{color:#369} +.CodeRay .decorator{color:#b0b} +.CodeRay .definition{color:#099} +.CodeRay .delimiter{color:#000} +.CodeRay .doc{color:#970} +.CodeRay .doctype{color:#34b} +.CodeRay .doc-string{color:#d42} +.CodeRay .escape{color:#666} +.CodeRay .entity{color:#800} +.CodeRay .error{color:#808} +.CodeRay .exception{color:inherit} +.CodeRay .filename{color:#099} +.CodeRay .function{color:#900;font-weight:bold} +.CodeRay .global-variable{color:#008080} +.CodeRay .hex{color:#058} +.CodeRay .integer,.CodeRay .float{color:#099} +.CodeRay .include{color:#555} +.CodeRay .inline{color:#00} +.CodeRay .inline .inline{background:#ccc} +.CodeRay .inline .inline .inline{background:#bbb} +.CodeRay .inline .inline-delimiter{color:#d14} +.CodeRay .inline-delimiter{color:#d14} +.CodeRay .important{color:#555;font-weight:bold} +.CodeRay .interpreted{color:#b2b} +.CodeRay .instance-variable{color:#008080} +.CodeRay .label{color:#970} +.CodeRay .local-variable{color:#963} +.CodeRay .octal{color:#40e} +.CodeRay .predefined{color:#369} +.CodeRay .preprocessor{color:#579} +.CodeRay .pseudo-class{color:#555} +.CodeRay .directive{font-weight:bold} +.CodeRay .type{font-weight:bold} +.CodeRay .predefined-type{color:inherit} +.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold} +.CodeRay .key{color:#808} +.CodeRay .key .delimiter{color:#606} +.CodeRay .key .char{color:#80f} +.CodeRay .value{color:#088} +.CodeRay .regexp .delimiter{color:#808} +.CodeRay .regexp .content{color:#808} +.CodeRay .regexp .modifier{color:#808} +.CodeRay .regexp .char{color:#d14} +.CodeRay .regexp .function{color:#404;font-weight:bold} +.CodeRay .string{color:#d20} +.CodeRay .string .string .string{background:#ffd0d0} +.CodeRay .string .content{color:#d14} +.CodeRay .string .char{color:#d14} +.CodeRay .string .delimiter{color:#d14} +.CodeRay .shell{color:#d14} +.CodeRay .shell .delimiter{color:#d14} +.CodeRay .symbol{color:#990073} +.CodeRay .symbol .content{color:#a60} +.CodeRay .symbol .delimiter{color:#630} +.CodeRay .tag{color:#008080} +.CodeRay .tag-special{color:#d70} +.CodeRay .variable{color:#036} +.CodeRay .insert{background:#afa} +.CodeRay .delete{background:#faa} +.CodeRay .change{color:#aaf;background:#007} +.CodeRay .head{color:#f8f;background:#505} +.CodeRay .insert .insert{color:#080} +.CodeRay .delete .delete{color:#800} +.CodeRay .change .change{color:#66f} +.CodeRay .head .head{color:#f4f} +</style> +</head> +<body class="article"> +<div id="header"> +<div id="toc" class="toc"> +<div id="toctitle">Table of Contents</div> +<ul class="sectlevel2"> +<li><a href="#_integration_in_the_operating_system">Integration in the operating system</a></li> +</ul> +</div> +</div> +<div id="content"> +<div class="sect2"> +<h3 id="_integration_in_the_operating_system">Integration in the operating system</h3> +<div class="paragraph"> +<p>In the previous chapter, we saw the different scripts and commands to start, stop, restart Apache Karaf.</p> +</div> +<div class="paragraph"> +<p>Instead of using these commands and scripts, you can integrate Apache Karaf directly in your operating system service control using:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#_service_wrapper">Service Wrapper</a></p> +</li> +<li> +<p><a href="#_service_script_templates">Service Script Templates</a></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>The above methods allow you to directly integrate Apache Karaf:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>like a native Windows Service</p> +</li> +<li> +<p>like a Unix daemon process</p> +</li> +</ul> +</div> +<div class="sect3"> +<h4 id="_service_wrapper">Service Wrapper</h4> +<div class="paragraph"> +<p>The "Service Wrapper" correctly handles "user’s log outs" under Windows, service dependencies, and the ability to run services which interact with the desktop.</p> +</div> +<div class="paragraph"> +<p>It also includes advanced fault detection software which monitors an application. +The "Service Wrapper" is able to detect crashes, freezes, out of memory and other exception events, then automatically react by restarting Apache Karaf with a minimum of delay. +It guarantees the maximum possible uptime of Apache Karaf.</p> +</div> +<div class="sect4"> +<h5 id="_supported_platforms">Supported platforms</h5> +<div class="ulist"> +<ul> +<li> +<p>Windows 8, 7, 2008 R2, 2003, Vista (32 and 64 bits architecture)</p> +</li> +<li> +<p>Linux RedHat Enterprise Linux, Debian, CentOS, Fedora, Ubuntu (32 and 64 bits architecture)</p> +</li> +<li> +<p>FreeBSD 9.x, 8.x</p> +</li> +<li> +<p>AIX 5.x, 6.x, 7.x (Power architecture)</p> +</li> +<li> +<p>Solaris 8, 9, 10 (x86/Sparc, 32 and 64 bits architecture)</p> +</li> +<li> +<p>HP-UX 10.x, 11.x (32 and 64 bits architecture)</p> +</li> +<li> +<p>SGI Irix</p> +</li> +<li> +<p>MacOS X</p> +</li> +</ul> +</div> +</div> +<div class="sect4"> +<h5 id="_installation">Installation</h5> +<div class="paragraph"> +<p>Apache Karaf Service Wrapper is an optional feature. You have to install the "Service Wrapper" installer first.</p> +</div> +<div class="paragraph"> +<p>In the console:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>karaf@root()> feature:install service-wrapper</pre> +</div> +</div> +<div class="paragraph"> +<p>Now, you have the <code>wrapper:install</code> command, to "register" Apache Karaf as service/daemon on your system:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>karaf@root()> wrapper:install --help +DESCRIPTION + wrapper:install + + Install the container as a system service in the OS. + +SYNTAX + wrapper:install [options] + +OPTIONS + -d, --display + The display name of the service. + (defaults to karaf) + --help + Display this help message + -s, --start-type + Mode in which the service is installed. AUTO_START or DEMAND_START (Default: AUTO_START) + (defaults to AUTO_START) + -n, --name + The service name that will be used when installing the service. (Default: karaf) + (defaults to karaf) + -D, --description + The description of the service. + (defaults to )</pre> +</div> +</div> +<div class="paragraph"> +<p>The <code>wrapper:install</code> command detects the running Operating Service and provide the service/daemon ready to be integrated in your system.</p> +</div> +<div class="paragraph"> +<p>For instance, on a Ubuntu/Debian Linux system:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>karaf@root()> wrapper:install +Creating file: /opt/apache-karaf-4.0.0/bin/karaf-wrapper +Creating file: /opt/apache-karaf-4.0.0/bin/karaf-service +Creating file: /opt/apache-karaf-4.0.0/etc/karaf-wrapper.conf +Creating missing directory: /opt/apache-karaf-4.0.0/lib/wrapper +Creating file: /opt/apache-karaf-4.0.0/lib/wrapper/libwrapper.so +Creating file: /opt/apache-karaf-4.0.0/lib/wrapper/karaf-wrapper.jar +Creating file: /opt/apache-karaf-4.0.0/lib/wrapper/karaf-wrapper-main.jar + +Setup complete. You may wish to tweak the JVM properties in the wrapper configuration file: + /opt/apache-karaf-4.0.0/etc/karaf-wrapper.conf +before installing and starting the service. + + +Ubuntu/Debian Linux system detected: + To install the service: + $ ln -s /opt/apache-karaf-4.0.0/bin/karaf-service /etc/init.d/ + + To start the service when the machine is rebooted: + $ update-rc.d karaf-service defaults + + To disable starting the service when the machine is rebooted: + $ update-rc.d -f karaf-service remove + + To start the service: + $ /etc/init.d/karaf-service start + + To stop the service: + $ /etc/init.d/karaf-service stop + + To uninstall the service : + $ rm /etc/init.d/karaf-service</pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<div class="title">Note</div> +</td> +<td class="content"> +<div class="paragraph"> +<p>You can install the wrapper without starting Karaf using bin/shell wrapper:install command.</p> +</div> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>You can note that <code>wrapper:install</code> command detected the running operating system ("Ubuntu/Debian Linux system detected").</p> +</div> +<div class="paragraph"> +<p>You have a complete explanation and list of system commands to perform to integrate Apache Karaf in your systemV:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>ln -s /opt/apache-karaf-4.0.0/bin/karaf-service /etc/init.d/ +update-rc.d karaf-service defaults</pre> +</div> +</div> +<div class="paragraph"> +<p>Karaf also supports systemd service, so you can use systemctl instead of SystemV based service:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>systemctl enable /opt/apache-karaf-4.0.2/bin/karaf.service</pre> +</div> +</div> +<div class="paragraph"> +<p>This will enable Karaf at system boot.</p> +</div> +</div> +<div class="sect4"> +<h5 id="_uninstall">Uninstall</h5> +<div class="paragraph"> +<p>The <code>wrapper:install</code> provides the system commands to perform to uninstall the service/daemon).</p> +</div> +<div class="paragraph"> +<p>For instance, on Ubuntu/Debian, to uninstall the Apache Karaf service, you have to remove the <code>karaf-service</code> script from the runlevel scripts:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>rm /etc/init.d/karaf-service</pre> +</div> +</div> +<div class="paragraph"> +<p>If you preferred the systemd service instead of systemV:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>systemctl disable karaf</pre> +</div> +</div> +<div class="paragraph"> +<p>You can remove the "Wrapper Service" installer after that:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>karaf@root()> feature:uninstall service-wrapper</pre> +</div> +</div> +</div> +<div class="sect4"> +<h5 id="_note_for_macos_users">Note for MacOS users</h5> +<div class="paragraph"> +<p>On MacOS you can install the service for an user or for the system.</p> +</div> +<div class="paragraph"> +<p>If you want to add <code>bin/org.apache.karaf.KARAF</code> as user service move this file into <code>~/Library/LaunchAgents/</code>:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>mv bin/org.apache.karaf.KARAF.plist ~/Library/LaunchAgents/</pre> +</div> +</div> +<div class="paragraph"> +<p>If you want to add org.apache.karaf.KARAF as system service move this into /Library/LaunchDaemons:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>sudo mv bin/org.apache.karaf.KARAF.plist /Library/LaunchDaemons/</pre> +</div> +</div> +<div class="paragraph"> +<p>Change owner and rights:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>sudo chown root:wheel /Library/LaunchDaemons/org.apache.karaf.KARAF.plist +sudo chmod u=rw,g=r,o=r /Library/LaunchDaemons/org.apache.karaf.KARAF.plist</pre> +</div> +</div> +<div class="paragraph"> +<p>You can test your service:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>launchctl load ~/Library/LaunchAgents/org.apache.karaf.KARAF.plist +launchctl start org.apache.karaf.KARAF +launchctl stop org.apache.karaf.KARAF</pre> +</div> +</div> +<div class="paragraph"> +<p>Finally, after restart your session or system you can use launchctl command to start and stop your service.</p> +</div> +<div class="paragraph"> +<p>If you want to remove the service call:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre>launchctl remove org.apache.karaf.KARAF</pre> +</div> +</div> +</div> +<div class="sect4"> +<h5 id="_configuration">Configuration</h5> +<div class="paragraph"> +<p>When using scripts in the Apache Karaf <code>bin</code> folder, you can using <code>bin/setenv</code> Unix script (<code>bin\setenv.bat</code> on Windows) as described in the [Start, stop, restart, connect|start-stop] section of the documentation.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<div class="title">Note</div> +</td> +<td class="content"> +<div class="paragraph"> +<p>The <code>bin/setenv</code> Unix script (<code>bin\setenv.bat</code> on Windows) is not used by the Apache Karaf Service Wrapper.</p> +</div> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>To configure Apache Karaf started by the Service Wrapper, you have to tune the <code>etc/karaf-wrapper.conf</code> file. If you provided the <code>name</code> option to the <code>wrapper:install</code> command, the file is <code>etc/karaf-yourname.conf</code>.</p> +</div> +<div class="paragraph"> +<p>In this file, you can configure the different environment variables used by Apache Karaf. The Service Wrapper installer automatically populate these variables for you during the installation (using <code>wrapper:install</code> command). +For instance:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><code>set.default.JAVA_HOME</code> is the <code>JAVA_HOME</code> used to start Apache Karaf (populated during Service Wrapper installation).</p> +</li> +<li> +<p><code>set.default.KARAF_HOME</code> is the location of your Apache Karaf installation (populated during Service Wrapper installation).</p> +</li> +<li> +<p><code>set.default.KARAF_BASE</code> is the location of your Apache Karaf installation (populated during Service Wrapper installation).</p> +</li> +<li> +<p><code>set.default.KARAF_DATA</code> is the location of the Apache Karaf data folder (populated during Service Wrapper installation).</p> +</li> +<li> +<p><code>set.default.KARAF_ETC</code> is the location of the Apache Karaf etc folder (populated during Service Wrapper installation).</p> +</li> +<li> +<p><code>wrapper.java.additional</code> is used to pass additional arguments to the Java command, indexed by the argument number. The next index to use is 11.</p> +</li> +<li> +<p><code>wrapper.java.initmemory</code> is the initial JVM memory size (the <code>-Xms</code>). It’s not set by default (JVM default).</p> +</li> +<li> +<p><code>wrapper.java.maxmemory</code> is the maximum JVM memory size (the <code>-Xmx</code>). It’s set to 512M by default.</p> +</li> +<li> +<p><code>wrapper.logfile</code> is the location of the Service Wrapper log file. It’s set to <code>%KARAF_DATA%/log/wrapper.log</code> by default.</p> +</li> +<li> +<p><code>wrapper.logfile.loglevel</code> is the Service Wrapper log level. It’s set to <code>INFO</code> by default.</p> +</li> +<li> +<p><code>wrapper.logfile.maxsize</code> is the Service Wrapper log file maximum size (before rotation). It’s set to <code>10m</code> (10MB) by default.</p> +</li> +<li> +<p><code>wrapper.logfile.maxfiles</code> is the number of Service Wrapper log files created (and rotated). It’s set to <code>5</code> by default.</p> +</li> +<li> +<p><code>wrapper.syslog.loglevel</code> is the integration with Unix syslog daemon. By default, it’s set to <code>none</code> meaning disabled.</p> +</li> +<li> +<p><code>wrapper.ntservice.name</code> is Windows service specific and defines the Windows service name. It’s set to the <code>name</code> option of the <code>wrapper:install</code> command, or <code>karaf</code> by default.</p> +</li> +<li> +<p><code>wrapper.ntservice.displayname</code> is Windows service specific and defines the Windows service display name. It’s set to the <code>display</code> option of the <code>wrapper:install</code> command, or <code>karaf</code> by default.</p> +</li> +<li> +<p><code>wrapper.ntservice.description</code> is Windows service specific and defines the Windows service description. It’s set to the <code>description</code> option of the <code>wrapper:install</code> command, or empty by default.</p> +</li> +<li> +<p><code>wrapper.ntservice.starttype</code> is Windows service specific and defines if the Windows service is started automatically with the service, or just on demand. It’s set to <code>AUTO_START</code> by default, and could be switch to <code>DEMAND_START</code>.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>This is a example of generated <code>etc/karaf-wrapper.conf</code> file:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre># ------------------------------------------------------------------------ +# 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. +# ------------------------------------------------------------------------ + +#******************************************************************** +# Wrapper Properties +#******************************************************************** +set.default.JAVA_HOME=/opt/jdk/1.7.0_21 +set.default.KARAF_HOME=/opt/apache-karaf-4.0.0 +set.default.KARAF_BASE=/opt/apache-karaf-4.0.0 +set.default.KARAF_DATA=/opt/apache-karaf-4.0.0/data +set.default.KARAF_ETC=/opt/apache-karaf-4.0.0/etc + +# Java Application +wrapper.working.dir=%KARAF_BASE% +wrapper.java.command=%JAVA_HOME%/bin/java +wrapper.java.mainclass=org.apache.karaf.wrapper.internal.Main +wrapper.java.classpath.1=%KARAF_HOME%/lib/karaf-wrapper.jar +wrapper.java.classpath.2=%KARAF_HOME%/lib/karaf.jar +wrapper.java.classpath.3=%KARAF_HOME%/lib/karaf-jaas-boot.jar +wrapper.java.classpath.4=%KARAF_HOME%/lib/karaf-wrapper-main.jar +wrapper.java.classpath.5=%KARAF_HOME%/lib/karaf-org.osgi.core.jar +wrapper.java.library.path.1=%KARAF_HOME%/lib/ + +# Application Parameters. Add parameters as needed starting from 1 +#wrapper.app.parameter.1= + +# JVM Parameters +# note that n is the parameter number starting from 1. +wrapper.java.additional.1=-Dkaraf.home=%KARAF_HOME% +wrapper.java.additional.2=-Dkaraf.base=%KARAF_BASE% +wrapper.java.additional.3=-Dkaraf.data=%KARAF_DATA% +wrapper.java.additional.4=-Dkaraf.etc=%KARAF_ETC% +wrapper.java.additional.5=-Dcom.sun.management.jmxremote +wrapper.java.additional.6=-Dkaraf.startLocalConsole=false +wrapper.java.additional.7=-Dkaraf.startRemoteShell=true + +# Uncomment to enable jmx +#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616 +#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false +#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false + +# Uncomment to enable YourKit profiling +#wrapper.java.additional.n=-Xrunyjpagent + +# Uncomment to enable remote debugging +#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE +#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 + +# Initial Java Heap Size (in MB) +#wrapper.java.initmemory=3 + +# Maximum Java Heap Size (in MB) +wrapper.java.maxmemory=512 + + +#******************************************************************** +# Wrapper Logging Properties +#******************************************************************** +# Format of output for the console. (See docs for formats) +wrapper.console.format=PM + +# Log Level for console output. (See docs for log levels) +wrapper.console.loglevel=INFO + +# Log file to use for wrapper output logging. +wrapper.logfile=%KARAF_DATA%/log/wrapper.log + +# Format of output for the log file. (See docs for formats) +wrapper.logfile.format=LPTM + +# Log Level for log file output. (See docs for log levels) +wrapper.logfile.loglevel=INFO + +# Maximum size that the log file will be allowed to grow to before +# the log is rolled. Size is specified in bytes. The default value +# of 0, disables log rolling. May abbreviate with the 'k' (kb) or +# 'm' (mb) suffix. For example: 10m = 10 megabytes. +wrapper.logfile.maxsize=10m + +# Maximum number of rolled log files which will be allowed before old +# files are deleted. The default value of 0 implies no limit. +wrapper.logfile.maxfiles=5 + +# Log Level for sys/event log output. (See docs for log levels) +wrapper.syslog.loglevel=NONE + +#******************************************************************** +# Wrapper Windows Properties +#******************************************************************** +# Title to use when running as a console +wrapper.console.title=karaf + +#******************************************************************** +# Wrapper Windows NT/2000/XP Service Properties +#******************************************************************** +# WARNING - Do not modify any of these properties when an application +# using this configuration file has been installed as a service. +# Please uninstall the service before modifying this section. The +# service can then be reinstalled. + +# Name of the service +wrapper.ntservice.name=karaf + +# Display name of the service +wrapper.ntservice.displayname=karaf + +# Description of the service +wrapper.ntservice.description= + +# Service dependencies. Add dependencies as needed starting from 1 +wrapper.ntservice.dependency.1= + +# Mode in which the service is installed. AUTO_START or DEMAND_START +wrapper.ntservice.starttype=AUTO_START + +# Allow the service to interact with the desktop. +wrapper.ntservice.interactive=false</pre> +</div> +</div> +</div> +</div> +<div class="sect3"> +<h4 id="_service_script_templates">Service Script Templates</h4> +<div class="paragraph"> +<p>By using the "Service Script Templates", you can run Apache Karaf with the help of operating system specific init scripts.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<div class="title">Note</div> +</td> +<td class="content"> +<div class="paragraph"> +<p>As opposite of Service Wrapper, the templates targeting Unix system do not rely on a 3th party binaries</p> +</div> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>You can find these templates under the bin/contrib directory.</p> +</div> +<div class="paragraph"> +<p> <br></p> +</div> +<div class="sect4"> +<h5 id="_unix">Unix</h5> +<div class="paragraph"> +<p>The karaf-service.sh utility helps you to generate ready to use scripts by automatically identify the operating system, the default init system and the template to use.</p> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<div class="title">Note</div> +</td> +<td class="content"> +<div class="paragraph"> +<p>You may still need to customize the generated files to adapt them to your environment.</p> +</div> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>The utility karaf-service.sh can be configured by defining environment variables or by passing command line options:</p> +</div> +<table class="tableblock frame-all grid-all spread"> +<colgroup> +<col style="width: 33%;"> +<col style="width: 33%;"> +<col style="width: 33%;"> +</colgroup> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">Command line option</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Environment variable</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-k</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_PATH</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf installation path (mandatory)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-d</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_DATA</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf data path (default to ${KARAF_SERVICE_PATH}/data)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-c</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_CONF</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf configuration file (default to ${KARAF_SERVICE_PATH/etc/${KARAF_SERVICE_NAME}.conf</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-t</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_ETC</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf etc path (default to ${KARAF_SERVICE_PATH/etc}</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-p</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_PIDFILE</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf pid path (default to ${KARAF_SERVICE_DATA}/${KARAF_SERVICE_NAME}.pid)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-n</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_NAME</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf service name (default karaf)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-e</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_ENV</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf environment variable (can be repeated)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-u</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_USER</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf user</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-g</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_GROUP</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf group (default ${KARAF_SERVICE_USER)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-l</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_LOG</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf console log (default to ${KARAF_SERVICE_DATA}/log/${KARAF_SERVICE_NAME}-console.log)</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-f</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_TEMPLATE</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Template file to use</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">-x</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">KARAF_SERVICE_EXECUTABLE</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Karaf executable name (defaul karaf</p></td> +</tr> +</tbody> +</table> +<div class="paragraph"> +<p> <br></p> +</div> +</div> +<div class="sect4"> +<h5 id="_systemd">Systemd</h5> +<div class="paragraph"> +<p>When karaf-service.sh detect Systemd, it generates three files:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>a systemd unit file to manage the root Apache Karaf container</p> +</li> +<li> +<p>a systemd environment file with variables used by the root Apache Karaf container</p> +</li> +<li> +<p>a systemd template unit file to manage Apache Karaf child containers</p> +</li> +</ul> +</div> +<div class="literalblock"> +<div class="title">Example</div> +<div class="content"> +<pre>$ ./karaf-service.sh -k /opt/karaf-4 -n karaf-4 +Writing service file "/opt/karaf-4/bin/contrib/karaf-4.service" +Writing service configuration file ""/opt/karaf-4/etc/karaf-4.conf" +Writing service file "/opt/karaf-4/bin/contrib/[email protected]" + +$ cp /opt/karaf-4/bin/contrib/karaf-4.service /etc/systemd/system +$ cp /opt/karaf-4/bin/contrib/[email protected] /etc/systemd/system + +$ systemctl enable karaf-4.service</pre> +</div> +</div> +<div class="paragraph"> +<p> <br></p> +</div> +</div> +<div class="sect4"> +<h5 id="_sysv">SysV</h5> +<div class="paragraph"> +<p>When karaf-service.sh detect a SysV system, it generates two files:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>an init script to manage the root Apache Karaf container</p> +</li> +<li> +<p>an environment file with variables used by the root Apache Karaf container</p> +</li> +</ul> +</div> +<div class="literalblock"> +<div class="title">Example</div> +<div class="content"> +<pre>$ ./karaf-service.sh -k /opt/karaf-4 -n karaf-4 +Writing service file "/opt/karaf-4/bin/contrib/karaf-4" +Writing service configuration file "/opt/karaf-4/etc/karaf-4.conf" + +$ ln -s /opt/karaf-4/bin/contrib/karaf-4 /etc/init.d/ +$ chkconfig karaf-4 on</pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<div class="title">Note</div> +</td> +<td class="content"> +<div class="paragraph"> +<p>To enable service startup upon boot, please consult your operating system init guide</p> +</div> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p> <br></p> +</div> +</div> +<div class="sect4"> +<h5 id="_solaris_smf">Solaris SMF</h5> +<div class="paragraph"> +<p>When karaf-service.sh detect a Solaris system, it generates a single file:</p> +</div> +<div class="literalblock"> +<div class="title">Example</div> +<div class="content"> +<pre>$ ./karaf-service.sh -k /opt/karaf-4 -n karaf-4 -u lburgazz -g lburgazz +Writing service file "/opt/karaf-4/bin/contrib/karaf-4.xml" + +$ svccfg validate /opt/karaf-4/bin/contrib/karaf-4.xml +$ svccfg import /opt/karaf-4/bin/contrib/karaf-4.xml</pre> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<div class="title">Note</div> +</td> +<td class="content"> +<div class="paragraph"> +<p>The generated SMF descriptor is defined as transient so the start method is executed once</p> +</div> +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p> <br></p> +</div> +</div> +<div class="sect4"> +<h5 id="_windows">Windows</h5> +<div class="paragraph"> +<p>Installation of Apache Karaf as windows service is supported through <a href="https://github.com/kohsuke/winsw">winsw</a>.</p> +</div> +<div class="paragraph"> +<p>Steps:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Rename karaf-service-win.exe to the service name i.e karaf-4.exe</p> +</li> +<li> +<p>Rename karaf-service-win.xml to match the service name i.e. karaf-4.xml</p> +</li> +<li> +<p>Customize the service descriptor to fit your needs</p> +</li> +<li> +<p>Use the service executable to install/star/stop the service</p> +</li> +</ul> +</div> +<div class="literalblock"> +<div class="title">Example</div> +<div class="content"> +<pre>C:\opt\apache-karaf-4\bin\contrib> karaf-4.exe install +C:\opt\apache-karaf-4\bin\contrib> karaf-4.exe start</pre> +</div> +</div> +</div> +</div> +</div> +</div> +<div id="footer"> +<div id="footer-text"> +Last updated 2017-11-22 15:12:31 +01:00 +</div> +</div> +</body> +</html> \ No newline at end of file Modified: karaf/site/production/manual/latest/overview.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/overview.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/overview.html (original) +++ karaf/site/production/manual/latest/overview.html Wed Nov 22 14:52:25 2017 @@ -590,7 +590,7 @@ Framework, but you can easily switch to </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-27 13:59:28 CEST +Last updated 2017-07-26 16:36:29 +02:00 </div> </div> </body> Modified: karaf/site/production/manual/latest/provisioning.html URL: http://svn.apache.org/viewvc/karaf/site/production/manual/latest/provisioning.html?rev=1816059&r1=1816058&r2=1816059&view=diff ============================================================================== --- karaf/site/production/manual/latest/provisioning.html (original) +++ karaf/site/production/manual/latest/provisioning.html Wed Nov 22 14:52:25 2017 @@ -687,10 +687,10 @@ not been previously installed using <cod <div class="ulist"> <ul> <li> -<p><code>featuresRepositories</code> contains a list (coma separated) of features repositories (features XML) URLs.</p> +<p><code>featuresRepositories</code> contains a list (comma-separated) of features repositories (features XML) URLs.</p> </li> <li> -<p><code>featuresBoot</code> contains a list (come separated) of features to install at boot.</p> +<p><code>featuresBoot</code> contains a list (comma-separated) of features to install at boot.</p> </li> </ul> </div> @@ -708,6 +708,21 @@ not been previously installed using <cod </div> </div> <div class="sect3"> +<h4 id="_overrides">Overrides</h4> +<div class="paragraph"> +<p>Bundles defined in features can be overridden by using a file etc/overrides.properties. +Each line in the file defines one override. The syntax is: +<bundle-uri>[;range="[min,max)"] +The given bundle will override all bundles in feature definitions with the same symbolic name if the version +of the override is greater than the version of the overridden bundle and the range matches. +If no range is given then compatibility on the micro version level is assumed.</p> +</div> +<div class="paragraph"> +<p>So for example the override mvn:org.ops4j.pax.logging/pax-logging-service/1.8.5 +would overide pax-logging-service 1.8.3 but not 1.8.6 or 1.7.0.</p> +</div> +</div> +<div class="sect3"> <h4 id="_feature_bundles">Feature bundles</h4> <div class="sect4"> <h5 id="_start_level">Start Level</h5> @@ -797,11 +812,14 @@ To do so, a feature can specify the <cod <p>The feature with the highest version available in the range will be installed.</p> </div> <div class="paragraph"> -<p>If a single version is specified, this version will be chosen.</p> +<p>If a single version is specified, the range will be considered open-ended.</p> </div> <div class="paragraph"> <p>If nothing is specified, the highest available will be installed.</p> </div> +<div class="paragraph"> +<p>To specify an exact version, use a closed range such as <code>[3.1,3.1]</code>.</p> +</div> <div class="sect4"> <h5 id="_feature_prerequisites">Feature prerequisites</h5> <div class="paragraph"> @@ -1466,7 +1484,7 @@ feature3 won’t be installed:</p> </div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-28 09:56:45 CEST +Last updated 2017-11-22 15:12:31 +01:00 </div> </div> </body>
