[Topic updated on 02/May/2017 to include Zulu Linux APT Repositories]
Introduction
To run openHAB 2 (OH2) on a Raspberry Pi 3 (rPi3) with the standard Raspbian image, you need a working Java Runtime Environment installed on your system.
Oops No… .I didn’t see it…
I will do some github stuff today. I have now some free time that the weekend is here
By the way: I don’t know if we should recommend to remove any existing Java deployment (after installing Zulu) on the rPi3
Like: apt packages of: oracle-java7-jdk, oracle-java8-jdk, openjdk-8-jdk, openjdk-7-jdk, sun-java7-jdk etc etc.
What do you think?
Thanks for the guide. But isn’t it easier to add the apt repository and work from there?
I would uninstall not used packages. But it’s my opinion ad I just get there pi running and don’t look after it until something’s wrong or when I need some extra features. Hence I want to avoid confusion having unused packages on my system.
I didn’t find any apt repo that includes the Zulu Embedded (for ARM) package… Is there one out there?
I also prefer uninstalling old stuff from my system but it’s not mandatory (and maybe not very linux beginner friendly) since they shouldn’t interfere with the new Java installation (after someone uses with update-alternatives --config java the new Java binary)
I thought I would give this a test as I was just installing Raspian lite on my spare Raspberry pi 3. I carried out the above instructions followed by a package repository installation of Openhab using the latest snapshot.
Please to report everything went well. I then copied my live files across and all is ok except charts. None of these work and I get errors on my Habpanel charts (default or RRD4j) and the default chart that is still in the sitemap from the demo files.
2017-02-11 14:44:21.370 [WARN ] [eclipse.jetty.servlet.ServletHandler] - Error for /rrdchart.png
java.lang.NoClassDefFoundError: Could not initialize class org.rrd4j.graph.RrdGraphConstants
at org.rrd4j.graph.RrdGraphDef.<init>(Unknown Source)[187:org.openhab.persistence.rrd4j:1.10.0.201702080211]
at org.openhab.persistence.rrd4j.internal.charts.RRD4jChartServlet.createChart(RRD4jChartServlet.java:257)[187:org.openhab.persistence.rrd4j:1.10.0.201702080211]
at org.openhab.persistence.rrd4j.internal.charts.RRD4jChartServlet.service(RRD4jChartServlet.java:157)[187:org.openhab.persistence.rrd4j:1.10.0.201702080211]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)[81:org.eclipse.jetty.servlet:9.2.19.v20160908]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)[81:org.eclipse.jetty.servlet:9.2.19.v20160908]
at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71)[172:org.ops4j.pax.web.pax-web-jetty:4.3.0]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)[79:org.eclipse.jetty.security:9.2.19.v20160908]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:287)[172:org.ops4j.pax.web.pax-web-jetty:4.3.0]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)[81:org.eclipse.jetty.servlet:9.2.19.v20160908]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)[172:org.ops4j.pax.web.pax-web-jetty:4.3.0]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.eclipse.jetty.server.Server.handle(Server.java:499)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)[80:org.eclipse.jetty.server:9.2.19.v20160908]
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)[72:org.eclipse.jetty.io:9.2.19.v20160908]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)[83:org.eclipse.jetty.util:9.2.19.v20160908]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)[83:org.eclipse.jetty.util:9.2.19.v20160908]
at java.lang.Thread.run(Thread.java:745)[:1.8.0_112]
I then tried to uninstall rrd4j and re-install it and got the following:
2017-02-11 15:23:37.494 [INFO ] [core.karaf.internal.FeatureInstaller] - Uninstalled 'openhab-persistence-rrd4j'
2017-02-11 15:24:07.630 [INFO ] [.eclipse.smarthome.model.script.Demo] - Status: 0 Thermostat: 19.5 Lounge: 19.30 Hall: 19.70
2017-02-11 15:24:18.836 [INFO ] [.eclipse.smarthome.model.script.Demo] - Status: 0 H/W Thermostat: 0 Hot Water: 48.31
2017-02-11 15:25:00.046 [INFO ] [.eclipse.smarthome.model.script.Demo] - ESP 4 Error
2017-02-11 15:25:49.166 [INFO ] [basic.internal.servlet.WebAppServlet] - Stopped Basic UI
2017-02-11 15:25:50.703 [ERROR] [org.eclipse.smarthome.io.rest.sse ] - FrameworkEvent ERROR - org.eclipse.smarthome.io.rest.sse
org.osgi.framework.BundleException: Exception in org.eclipse.smarthome.io.rest.sse.internal.SseActivator.start() of bundle org.eclipse.smarthome.io.rest.sse.
at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:792)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:721)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:941)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:318)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.container.Module.doStart(Module.java:571)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.container.Module.start(Module.java:439)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:454)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.java:717)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.container.ModuleContainer.resolveAndApply(ModuleContainer.java:491)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:437)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.container.ModuleContainer.refresh(ModuleContainer.java:955)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.container.ModuleContainer$ContainerWiring.dispatchEvent(ModuleContainer.java:1336)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.container.ModuleContainer$ContainerWiring.dispatchEvent(ModuleContainer.java:1)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
Caused by: java.lang.LinkageError: ClassCastException: attempting to castbundleresource://22.fwk2402365/javax/ws/rs/ext/RuntimeDelegate.class to bundleresource://22.fwk2402365/javax/ws/rs/ext/RuntimeDelegate.class
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:146)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:120)
at javax.ws.rs.core.MediaType.valueOf(MediaType.java:179)
at org.glassfish.jersey.media.sse.SseFeature.<clinit>(SseFeature.java:62)
at org.eclipse.smarthome.io.rest.sse.internal.SseActivator.start(SseActivator.java:44)
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:771)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
at java.security.AccessController.doPrivileged(Native Method)[:1.8.0_112]
at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:764)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
... 14 more
2017-02-11 15:25:51.124 [INFO ] [basic.internal.servlet.WebAppServlet] - Started Basic UI at /basicui/app
2017-02-11 15:25:51.473 [ERROR] [core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-persistence-rrd4j': Error restarting bundles
Thanks for the prompt response. Being a ‘user’ the conversation on the github link doesn’t mean much to me. I hadn’t heard of Zulu Java until this thread but now I can see that whilst it is the preferred Java platform for Openhab, it doesn’t work on perhaps the most widely used hardware, the Raspberry Pi?
Thankfully this isn’t my live system. What do you suggest I do? Start again and use Oracle? I was actually doing this because I wanted to try the new ‘timeline’ widget in HABPanel.
The link was for the packages installation command (sorry… I replied from my Discourse (forum) client on the smart phone and couldn’t type up a proper reply)
I didn’t see a clear benefit of Zulu over Oracle JDK in that link - were there some sort of performance stats in favour of Zulu over Oracle JDK on ARM?
To clarify, you can still use Oracle Java. It’s just the official recommendation by the openHAB maintainers. Let me quote what was previously said by @Kai:
The main reason is that there are “no license fees or field of use restrictions”.
Oracle JDK is (at lease on embedded systems) always subject to certain restrictions. You are actually only allowed to use it for development, but not for production. And a “pure” openHAB user probably does not really qualify as doing active development work. See https://blog.takipi.com/running-java-on-docker-youre-breaking-the-law
Besides that, we have done performance comparisons and there are no measurable differences (to the better or the worse). In the end, there was no downside to use and recommend a open source / free Java runtime, which is by the way also easier to install (looking at the soon to be available repository for arm).
I must say that you are right: Oracle asks for money for each and every embedded device legally (or not) sold. The free Java runtime available is I must say (after all the missing sleep nights) a very good alternative for DIY solutions.
Not to be confusing to the openhab users: it does not in any way influence your openhab experience!