Hello, I wrote this tutorial because I spent a lot of hours trying to find why OpenHAB didn’t even start on my NetBSD server, so I hope the text below will save an hours for someone.
TLDR: the default Java Native Access JAR file, shipped with OpenHAB4, doesn’t know anything about NetBSD, so some hacks are necessary to launch OpenHAB with the proper java-jna package from NetBSD repository.
First steps are almost similar to the official instructions:
- Install OpenJDK 17 and
java-jnapackage, which works only with this JDK version (for now):pkgin install openjdk17 java-jna. - Install some necessary dependencies:
pkgin install curl unzip. - Create
/optcatalog for OpenHAB installation:mkdir /opt. - Add group for OpenHAB:
groupadd openhab. - Add user for OpenHAB:
useradd -s /bin/sh -g openhab -b /opt/ -m openhab. The $HOME catalog for this user will be/opt/openhab. - Setup Java-related environment variables for
openhabuser:echo ‘JAVA_HOME=/usr/pkg/java/openjdk17’ >> /opt/openhab/.profile && echo 'export JAVA_HOME’ >> /opt/openhab/.profile && echo ‘PATH=$PATH:/usr/pkg/java/openjdk17/bin’ >> /opt/openhab/.profile && echo ‘export PATH’ >> /opt/openhab/.profile - Download OpenHAB 4.3.8. This (the latest for now) version is used because Java 17 is supported only by 4.x.x versions:
curl -L --output /tmp/openhab-download.zip https://github.com/openhab/openhab-distro/releases/download/4.3.8/openhab-4.3.8.zip - Unpack the archive:
unzip /tmp/openhab-download.zip -d /opt/openhab && rm -vf /tmp/openhab-download.zip. - Download addons to the proper catalog:
curl -L --output /opt/openhab/addons/openhab-addons-4.3.8.kar https://github.com/openhab/openhab-distro/releases/download/4.3.8/openhab-addons-4.3.8.kar. - Set proper access rights:
chown -hR openhab:openhab /opt/openhab.
But the OpenHAB will not start after the 10th item in the list above. Instead, the line No service was found. will appear in the browser at http://localhost:8080. And these lines will be in the OpenHAB console and in the /opt/openhab/userdata/logs/openhab.log:
2025-11-04 17:00:41.761 [ERROR] [ternal.service.BootFeaturesInstaller] - Error installing boot features
org.apache.karaf.features.internal.util.MultiException: Error restarting bundles:
Could not resolve module: com.sun.jna [41]
Unresolved requirement: Require-Capability: osgi.native; native.paths.8:List<String>="com/sun/jna/sunos-x86-64/libjnidispatch.so"; native.paths.17:List<String>="com/sun/jna/linux-x86-64/libjnidispatch.so"; native.paths.7:List<String>="com/sun/jna/sunos-x86/libjnidispatch.so"; native.paths.16:List<String>="com/sun/jna/linux-x86/libjnidispatch.so"; native.paths.19:List<String>="com/sun/jna/linux-arm/libjnidispatch.so"; native.paths.9:List<String>="com/sun/jna/sunos-sparc/libjnidispatch.so"; native.paths.18:List<String>="com/sun/jna/linux-arm/libjnidispatch.so"; native.paths.13:List<String>="com/sun/jna/linux-ppc/libjnidispatch.so"; native.paths.35:List<String>="com/sun/jna/darwin-aarch64/libjnidispatch.jnilib"; native.paths.12:List<String>="com/sun/jna/aix-ppc64/libjnidispatch.a"; native.paths.34:List<String>="com/sun/jna/darwin-x86-64/libjnidispatch.jnilib"; native.paths.15:List<String>="com/sun/jna/linux-ppc64le/libjnidispatch.so"; native.paths.14:List<String>="com/sun/jna/linux-ppc64/libjnidispatch.so"; native.paths.31:List<String>="com/sun/jna/darwin-ppc/libjnidispatch.jnilib"; native.paths.30:List<String>="com/sun/jna/openbsd-x86-64/libjnidispatch.so"; native.paths.11:List<String>="com/sun/jna/aix-ppc/libjnidispatch.a"; native.paths.33:List<String>="com/sun/jna/darwin-x86/libjnidispatch.jnilib"; native.paths.10:List<String>="com/sun/jna/sunos-sparcv9/libjnidispatch.so"; native.paths.32:List<String>="com/sun/jna/darwin-ppc64/libjnidispatch.jnilib"; native.paths.28:List<String>="com/sun/jna/freebsd-x86-64/libjnidispatch.so"; native.paths.27:List<String>="com/sun/jna/freebsd-x86/libjnidispatch.so"; native.paths.29:List<String>="com/sun/jna/openbsd-x86/libjnidispatch.so"; native.paths.24:List<String>="com/sun/jna/linux-mips64el/libjnidispatch.so"; native.paths.23:List<String>="com/sun/jna/linux-sparcv9/libjnidispatch.so"; native.paths.26:List<String>="com/sun/jna/linux-loongarch64/libjnidispatch.so"; native.paths.25:List<String>="com/sun/jna/linux-s390x/libjnidispatch.so"; native.paths.20:List<String>="com/sun/jna/linux-armel/libjnidispatch.so"; native.paths.22:List<String>="com/sun/jna/linux-ia64/libjnidispatch.so"; native.paths.21:List<String>="com/sun/jna/linux-aarch64/libjnidispatch.so"; native.paths.0:List<String>="com/sun/jna/win32-x86/jnidispatch.dll"; native.paths.2:List<String>="com/sun/jna/win32-aarch64/jnidispatch.dll"; native.paths.1:List<String>="com/sun/jna/win32-x86-64/jnidispatch.dll"; native.paths.4:List<String>="com/sun/jna/win32-x86-64/jnidispatch.dll"; native.paths.3:List<String>="com/sun/jna/win32-x86/jnidispatch.dll"; native.paths.6:List<String>="com/sun/jna/w32ce-arm/jnidispatch.dll"; native.paths.5:List<String>="com/sun/jna/win32-aarch64/jnidispatch.dll"; filter:="(|(&(osgi.native.osname~=win32)(osgi.native.processor~=x86))(&(osgi.native.osname~=win32)(osgi.native.processor~=x86-64))(&(osgi.native.osname~=win32)(osgi.native.processor~=aarch64))(&(osgi.native.osname~=win)(osgi.native.processor~=x86))(&(osgi.native.osname~=win)(osgi.native.processor~=x86-64))(&(osgi.native.osname~=win)(osgi.native.processor~=aarch64))(&(osgi.native.osname~=wince)(osgi.native.processor~=arm))(&(osgi.native.osname~=sunos)(osgi.native.processor~=x86))(&(osgi.native.osname~=sunos)(osgi.native.processor~=x86-64))(&(osgi.native.osname~=sunos)(osgi.native.processor~=sparc))(&(osgi.native.osname~=sunos)(osgi.native.processor~=sparcv9))(&(osgi.native.osname~=aix)(osgi.native.processor~=ppc))(&(osgi.native.osname~=aix)(osgi.native.processor~=ppc64))(&(osgi.native.osname~=linux)(osgi.native.processor~=ppc))(&(osgi.native.osname~=linux)(osgi.native.processor~=ppc64))(&(osgi.native.osname~=linux)(osgi.native.processor~=ppc64le))(&(osgi.native.osname~=linux)(osgi.native.processor~=x86))(&(osgi.native.osname~=linux)(osgi.native.processor~=x86-64))(&(osgi.native.osname~=linux)(osgi.native.processor~=arm))(&(osgi.native.osname~=linux)(osgi.native.processor~=arm_le))(&(osgi.native.osname~=linux)(osgi.native.processor~=armel))(&(osgi.native.osname~=linux)(osgi.native.processor~=aarch64))(&(osgi.native.osname~=linux)(osgi.native.processor~=ia64))(&(osgi.native.osname~=linux)(osgi.native.processor~=sparcv9))(&(osgi.native.osname~=linux)(osgi.native.processor~=mips64el))(&(osgi.native.osname~=linux)(osgi.native.processor~=S390x))(&(osgi.native.osname~=linux)(osgi.native.processor~=loongarch64))(&(osgi.native.osname~=freebsd)(osgi.native.processor~=x86))(&(osgi.native.osname~=freebsd)(osgi.native.processor~=x86-64))(&(osgi.native.osname~=openbsd)(osgi.native.processor~=x86))(&(osgi.native.osname~=openbsd)(osgi.native.processor~=x86-64))(&(osgi.native.osname~=macosx)(osgi.native.processor~=ppc))(&(osgi.native.osname~=macosx)(osgi.native.processor~=ppc64))(&(osgi.native.osname~=macosx)(osgi.native.processor~=x86))(&(osgi.native.osname~=macosx)(osgi.native.processor~=x86-64))(&(osgi.native.osname~=macosx)(osgi.native.processor~=aarch64)))"
Could not resolve module: io.methvin.directory-watcher [46]
Unresolved requirement: Import-Package: com.sun.nio.file; resolution:="optional"
Unresolved requirement: Import-Package: com.sun.jna.ptr
-> Export-Package: com.sun.jna.ptr; bundle-symbolic-name="com.sun.jna"; bundle-version="5.14.0"; version="5.14.0"; uses:="com.sun.jna"
com.sun.jna [41]
Unresolved requirement: Require-Capability: osgi.native; native.paths.8:List<String>="com/sun/jna/sunos-x86-64/libjnidispatch.so"; native.paths.17
According to the log, it tries to use bundled JNA 5.14.0, which doesn’t hear about NetBSD. And to force OpenHAB to use JNA 5.15.0 from repositories, which obviously should know something about NetBSD, the next steps should be performed in the OpenHAB console:
- Start console with
/opt/openhab/start.sh openhabunder theopenhabuser. - Remove
jnabundle - Install JAR files (
jna.jarandjna-platform.jar) from filesystem - Start it
openhab> bundle:list | grep jna
41 │ Installed │ 80 │ 5.14.0 │ jna
openhab> bundle:uninstall 41
openhab> bundle:install file:///usr/pkg/lib/java/jna/jna.jar
openhab> bundle:install file:///usr/pkg/lib/java/jna/jna-platform.jar
openhab> bundle:list | grep jna
254 │ Installed │ 80 │ 5.15.0 │ jna
270 │ Resolved │ 80 │ 5.15.0 │ jna-platform
openhab> bundle:start 254
openhab> bundle:start 270
Done! For now web-interface will start successfully and become accessible at http://localhost:8080.
