Install openHAB 2 in Windows 10 as Windows Service

Hi,

I have installed openHAB 2 with no problem to boot up with start.bat.

However I install the karaf service wrapper follow the link below:
https://karaf.apache.org/manual/latest/wrapper

I am not able to start OH2 via the service.

Is I miss out anything ?

Supported platforms under your link does not list Windows10, that seems to be the reason why it is not working.

After service is started, the following can be found in the log:

2016-12-18 13:56:57.846 [WARN ] [org.apache.felix.fileinstall ] - \addons does not exist, please create it.
2016-12-18 13:56:57.852 [WARN ] [org.apache.felix.fileinstall ] - Root path does not exist: D:\addons

at the same time, if navigate to localhost:8080, 404 is displayed. Seems there is some configuration missing…

what about the logging?
Does it find all the JAVA (or other) defines and variables at startup of the service?
Check your event logger and windows event viewer…

– Jan

openhab.log only display the following:
2016-12-18 13:56:57.846 [WARN ] [org.apache.felix.fileinstall ] - \addons does not exist, please create it.
2016-12-18 13:56:57.852 [WARN ] [org.apache.felix.fileinstall ] - Root path does not exist: D:\addons

There is no error logged in event viewer.

Below are the setting found on karaf-wrapper.conf

#********************************************************************
# Wrapper Properties
#********************************************************************
set.default.JAVA_HOME=C:\Program Files\Java\jdk1.8.0_51
set.default.KARAF_HOME=D:\openhab2\runtime\karaf
set.default.KARAF_BASE=D:\openhab2\userdata
#set.default.KARAF_BASE=D:\openhab2\runtime\karaf
set.default.KARAF_DATA=D:\openhab2\userdata
set.default.KARAF_ETC=D:\openhab2\runtime\karaf\etc

# Java Application
wrapper.working.dir=%KARAF_BASE%
wrapper.java.command=%JAVA_HOME%/bin/java
wrapper.java.mainclass=org.apache.karaf.wrapper.internal.service.Main
wrapper.java.classpath.1=%KARAF_HOME%/lib/boot/*.jar
wrapper.java.classpath.2=%KARAF_HOME%/lib/wrapper/*.jar
wrapper.java.classpath.3=%KARAF_DATA%/lib/wrapper/*.jar
#wrapper.java.library.path.1=%KARAF_HOME%/lib/wrapper/
wrapper.java.library.path.1=%KARAF_DATA%/lib/wrapper/

# 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
wrapper.java.additional.8=-Djava.endorsed.dirs="%JAVA_HOME%/jre/lib/endorsed;%JAVA_HOME%/lib/endorsed;%KARAF_HOME%/lib/endorsed"
wrapper.java.additional.9=-Djava.ext.dirs="%JAVA_HOME%/jre/lib/ext;%JAVA_HOME%/lib/ext;%KARAF_HOME%/lib/ext"

# 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

Were you able to get this working for you? I’m trying to do the same thing with OH2 beta 3 (will try 4 soon). I’m getting a different error though. Here’s what wrapper.log spews:

STATUS | wrapper | 2016/12/21 08:16:44 | → Wrapper Started as Service
STATUS | wrapper | 2016/12/21 08:16:44 | Launching a JVM…
INFO | jvm 1 | 2016/12/21 08:16:45 | Error: Could not find or load main class org.apache.karaf.wrapper.internal.service.Main
ERROR | wrapper | 2016/12/21 08:16:45 | JVM exited while loading the application.

The only different I can see from your karaf-wrapper.conf above is the java_home:

set.default.JAVA_HOME=C:\Program Files\Java\jdk1.8.0_111

Anyone have any ideas?

Thanks,
Drew

It seems we need to make significant change in karaf-wrapper.conf in order to get it work.

Currently I am trying the 3rd party service wrapper AlwaysUp to launch the bat file as windows service after windows boot up, hope everything is working fine.

Yep, you’re right. I did finally manage to get the karaf wrapper to work with quite a few changes. I added a line to the karaf.bat within the :Execute clause to echo the java.exe command so I could replicate all of the arguments within karaf-wrapper.conf. There may be a more elegant solution to this, but I added each of the openhab arguments as wrapper.java.additional lines. Here is my complete karaf-wrapper.conf which seems to work fairly well

# ------------------------------------------------------------------------
# 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=C:\Program Files\Java\jdk1.8.0_111
set.default.KARAF_HOME=C:\openhab2_b4\runtime\karaf
set.default.KARAF_BASE=C:\openhab2_b4\userdata
set.default.KARAF_DATA=C:\openhab2_b4\userdata
set.default.KARAF_ETC=C:\openhab2_b4\runtime\karaf\etc

set.default.OPENHAB_HOME=C:\openhab2_b4
set.default.OPENHAB_CONF=%OPENHAB_HOME%\conf
set.default.OPENHAB_RUNTIME=%OPENHAB_HOME%\runtime
set.default.OPENHAB_USERDATA=%OPENHAB_HOME%\userdata
set.default.OPENHAB_LOGDIR=%OPENHAB_USERDATA%\logs
set.default.PATH=%PATH%;%KARAF_BASE%\lib;%KARAF_HOME%\lib

# Java Application
wrapper.working.dir=%KARAF_BASE%
wrapper.java.command=%JAVA_HOME%/bin/java
wrapper.java.mainclass=org.apache.karaf.wrapper.internal.service.Main
wrapper.java.classpath.1=%KARAF_HOME%/lib/boot/*.jar
wrapper.java.classpath.2=%KARAF_HOME%/lib/wrapper/*.jar
wrapper.java.classpath.3=%KARAF_BASE%/lib/wrapper/*.jar
wrapper.java.library.path.1=%KARAF_HOME%/lib/wrapper/
wrapper.java.library.path.2=%KARAF_BASE%/lib/wrapper/

# 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
wrapper.java.additional.8=-Djava.endorsed.dirs="%JAVA_HOME%/jre/lib/endorsed;%JAVA_HOME%/lib/endorsed;%KARAF_HOME%/lib/endorsed"
wrapper.java.additional.9=-Djava.ext.dirs="%JAVA_HOME%/jre/lib/ext;%JAVA_HOME%/lib/ext;%KARAF_HOME%/lib/ext"
wrapper.java.additional.10=-Djava.util.logging.config.file="C:\OPENHA~1\userdata\etc\java.util.logging.properties"
wrapper.java.additional.11=-Dopenhab.home=C:\OPENHA~1
wrapper.java.additional.12=-Dopenhab.conf=C:\OPENHA~1\conf
wrapper.java.additional.13=-Dopenhab.runtime=C:\OPENHA~1\runtime
wrapper.java.additional.14=-Dopenhab.userdata=C:\OPENHA~1\userdata
wrapper.java.additional.15=-Dopenhab.logdir=C:\OPENHA~1\userdata\logs
wrapper.java.additional.16=-Dorg.osgi.service.http.port=8080
wrapper.java.additional.17=-Dorg.osgi.service.http.port.secure=8443

# 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=openhabb4

#********************************************************************
# 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=openhabb4

# Display name of the service
wrapper.ntservice.displayname=OpenHabB4

# Description of the service
wrapper.ntservice.description=OpenHab_B4_Service

# 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

2 Likes

Hi ScoobyDrew, I tried the same setting, confirmed it works! Thanks for sharing your karaf-wrapper.conf

Thanx @ScoobyDrew for the wrapper config fixes!

I used this and it works. I had to adopt it to the openHAB 2.0.0 Release (some paths are different)

See also here:

I bumped in to this issue aswell when switching to the release of OH2. This was on a *nix-machine but i think it could be the same issue.
Comparing the wrapper conf from a earlier nightly build the conf differs on line 31,32,33.

The working conf (old)
wrapper.java.classpath.1=%KARAF_HOME%/lib/boot/.jar
wrapper.java.classpath.2=%KARAF_HOME%/lib/wrapper/
.jar
wrapper.java.library.path.1=%KARAF_HOME%/lib/wrapper/

The one that fails (new, the release version of oh2)
wrapper.java.classpath.1=%KARAF_BASE%/lib/boot/.jar
wrapper.java.classpath.2=%KARAF_BASE%/lib/wrapper/
.jar
wrapper.java.library.path.1=%KARAF_BASE%/lib/wrapper/

The conf for KARAF_HOME and KARAF_BASE are the same and home points to runtime, and base to userdata. so it seems like it is trying to load the jars from the userdata folder instead of runtim. Adjusting this solved the problem for me.

I changed KARAF_BASE in the file. I had to do it a while ago too. I wonder why this isn’t fixed yet. Or if this really is the fix…

set.default.KARAF_BASE=C:\OpenHAB\runtime

How do you guys manage to get the Console if the OH2 is running as a service?

You can always use a SSH client (I reccomend Xshell 5) on the same host and connect to the console using:
Host: localhost
Port: 8101
Username: openhab
Password: habopen

Note: to connect from a remote IP, you will need to modify the console security settings (by default, only local connections are allowed)

… you know what to do :smiley:

3 Likes

Are these still the modifications required? And the modifications I’m talking about are the parms 10-17.

Are there any other changes needed?

@ThomDietrich I tried a new PR: Documenting openHAB 2 - #159 by Dim

:slight_smile:

2 Likes