openhab-docker icon indicating copy to clipboard operation
openhab-docker copied to clipboard

doorbell binding not working due to lacking libsodium23

Open schroepf opened this issue 1 year ago • 2 comments

Summary

I'm user of the openhab/openhab docker image. For my doorbell I require the doorbird binding which seems to require libsodium23 to be installed on the system.

Expected Behavior

With a properly installed and setup doorbird binding the items provided through that binding should update as expected (esp. when ringing the doorbell).

Current Behavior

  • when everything is setup as it should be everything looks ok at a first glance (the thing and all items are displayed as ONLINE in the OpenHAB UI)
  • but the items are not updated as expected when I ring the doorbell
  • in the logs there is an error about missing libsodium crypto library:
19:53:11.205 [INFO ] [er.DoorbirdEvent$LazySodiumJavaHolder] - Failed to load libsodium crypto library!!
java.lang.UnsatisfiedLinkError: Unable to load library 'sodium':
libsodium.so: cannot open shared object file: No such file or directory
libsodium.so: cannot open shared object file: No such file or directory
Native library (linux-aarch64/libsodium.so) not found in resource path (/openhab/runtime/lib/boot/org.apache.karaf.diagnostic.boot-4.4.3.jar:/openhab/runtime/lib/boot/org.apache.karaf.jaas.boot-4.4.3.jar:/openhab/runtime/lib/boot/org.apache.karaf.main-4.4.3.jar:/openhab/runtime/lib/boot/org.apache.karaf.specs.activator-4.4.3.jar:/openhab/runtime/lib/boot/osgi.core-8.0.0.jar:/openhab/runtime/lib/jdk9plus/istack-commons-runtime-3.0.10.jar:/openhab/runtime/lib/jdk9plus/jakarta.xml.bind-api-2.3.3.jar:/openhab/runtime/lib/jdk9plus/javax.annotation-api-1.3.2.jar:/openhab/runtime/lib/jdk9plus/jaxb-runtime-2.3.3.jar:/openhab/runtime/lib/jdk9plus/org.apache.servicemix.specs.activation-api-1.2.1-1.2.1_3.jar:/openhab/runtime/lib/jdk9plus/txw2-2.3.3.jar)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:307) ~[?:?]
        at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:467) ~[?:?]
        at com.sun.jna.Native.register(Native.java:1774) ~[?:?]
        at co.libly.resourceloader.SharedLibraryLoader.registerLibraryWithClasses(SharedLibraryLoader.java:74) ~[?:?]
        at co.libly.resourceloader.SharedLibraryLoader.loadSystemLibrary(SharedLibraryLoader.java:42) ~[?:?]
        at com.goterl.lazycode.lazysodium.utils.LibraryLoader.loadAbsolutePath(LibraryLoader.java:103) ~[?:?]
        at com.goterl.lazycode.lazysodium.SodiumJava.<init>(SodiumJava.java:39) ~[?:?]
        at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent$LazySodiumJavaHolder.loadLazySodiumJava(DoorbirdEvent.java:89) ~[?:?]
        at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent$LazySodiumJavaHolder.<clinit>(DoorbirdEvent.java:78) ~[?:?]
        at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.getLazySodiumJavaInstance(DoorbirdEvent.java:101) ~[?:?]
        at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.decryptV1(DoorbirdEvent.java:182) ~[?:?]
        at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.decrypt(DoorbirdEvent.java:160) ~[?:?]
        at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.processPacket(DoorbirdUdpListener.java:122) ~[?:?]
        at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.receivePackets(DoorbirdUdpListener.java:95) ~[?:?]
        at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.run(DoorbirdUdpListener.java:65) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
        Suppressed: java.lang.UnsatisfiedLinkError: libsodium.so: cannot open shared object file: No such file or directory
                at com.sun.jna.Native.open(Native Method) ~[?:?]
                at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:197) ~[?:?]
                at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:467) ~[?:?]
                at com.sun.jna.Native.register(Native.java:1774) ~[?:?]
                at co.libly.resourceloader.SharedLibraryLoader.registerLibraryWithClasses(SharedLibraryLoader.java:74) ~[?:?]
                at co.libly.resourceloader.SharedLibraryLoader.loadSystemLibrary(SharedLibraryLoader.java:42) ~[?:?]
                at com.goterl.lazycode.lazysodium.utils.LibraryLoader.loadAbsolutePath(LibraryLoader.java:103) ~[?:?]
                at com.goterl.lazycode.lazysodium.SodiumJava.<init>(SodiumJava.java:39) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent$LazySodiumJavaHolder.loadLazySodiumJava(DoorbirdEvent.java:89) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent$LazySodiumJavaHolder.<clinit>(DoorbirdEvent.java:78) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.getLazySodiumJavaInstance(DoorbirdEvent.java:101) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.decryptV1(DoorbirdEvent.java:182) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.decrypt(DoorbirdEvent.java:160) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.processPacket(DoorbirdUdpListener.java:122) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.receivePackets(DoorbirdUdpListener.java:95) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.run(DoorbirdUdpListener.java:65) ~[?:?]
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
                                at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
                at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
                at java.lang.Thread.run(Thread.java:833) ~[?:?]
        Suppressed: java.lang.UnsatisfiedLinkError: libsodium.so: cannot open shared object file: No such file or directory
                at com.sun.jna.Native.open(Native Method) ~[?:?]
                at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:210) ~[?:?]
                at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:467) ~[?:?]
                at com.sun.jna.Native.register(Native.java:1774) ~[?:?]
                at co.libly.resourceloader.SharedLibraryLoader.registerLibraryWithClasses(SharedLibraryLoader.java:74) ~[?:?]
                at co.libly.resourceloader.SharedLibraryLoader.loadSystemLibrary(SharedLibraryLoader.java:42) ~[?:?]
                at com.goterl.lazycode.lazysodium.utils.LibraryLoader.loadAbsolutePath(LibraryLoader.java:103) ~[?:?]
                at com.goterl.lazycode.lazysodium.SodiumJava.<init>(SodiumJava.java:39) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent$LazySodiumJavaHolder.loadLazySodiumJava(DoorbirdEvent.java:89) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent$LazySodiumJavaHolder.<clinit>(DoorbirdEvent.java:78) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.getLazySodiumJavaInstance(DoorbirdEvent.java:101) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.decryptV1(DoorbirdEvent.java:182) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.decrypt(DoorbirdEvent.java:160) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.processPacket(DoorbirdUdpListener.java:122) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.receivePackets(DoorbirdUdpListener.java:95) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.run(DoorbirdUdpListener.java:65) ~[?:?]
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
                at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
                at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
                at java.lang.Thread.run(Thread.java:833) ~[?:?]
        Suppressed: java.io.IOException: Native library (linux-aarch64/libsodium.so) not found in resource path (/openhab/runtime/lib/boot/org.apache.karaf.diagnostic.boot-4.4.3.jar:/openhab/runtime/lib/boot/org.apache.karaf.jaas.boot-4.4.3.jar:/openhab/runtime/lib/boot/org.apache.karaf.main-4.4.3.jar:/openhab/runtime/lib/boot/org.apache.karaf.specs.activator-4.4.3.jar:/openhab/runtime/lib/boot/osgi.core-8.0.0.jar:/openhab/runtime/lib/jdk9plus/istack-commons-runtime-3.0.10.jar:/openhab/runtime/lib/jdk9plus/jakarta.xml.bind-api-2.3.3.jar:/openhab/runtime/lib/jdk9plus/javax.annotation-api-1.3.2.jar:/openhab/runtime/lib/jdk9plus/jaxb-runtime-2.3.3.jar:/openhab/runtime/lib/jdk9plus/org.apache.servicemix.specs.activation-api-1.2.1-1.2.1_3.jar:/openhab/runtime/lib/jdk9plus/txw2-2.3.3.jar)
                at com.sun.jna.Native.extractFromResourcePath(Native.java:1145) ~[?:?]
                at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:281) ~[?:?]
                at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:467) ~[?:?]
                at com.sun.jna.Native.register(Native.java:1774) ~[?:?]
                at co.libly.resourceloader.SharedLibraryLoader.registerLibraryWithClasses(SharedLibraryLoader.java:74) ~[?:?]
                at co.libly.resourceloader.SharedLibraryLoader.loadSystemLibrary(SharedLibraryLoader.java:42) ~[?:?]
                at com.goterl.lazycode.lazysodium.utils.LibraryLoader.loadAbsolutePath(LibraryLoader.java:103) ~[?:?]
                at com.goterl.lazycode.lazysodium.SodiumJava.<init>(SodiumJava.java:39) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent$LazySodiumJavaHolder.loadLazySodiumJava(DoorbirdEvent.java:89) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent$LazySodiumJavaHolder.<clinit>(DoorbirdEvent.java:78) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.getLazySodiumJavaInstance(DoorbirdEvent.java:101) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.decryptV1(DoorbirdEvent.java:182) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdEvent.decrypt(DoorbirdEvent.java:160) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.processPacket(DoorbirdUdpListener.java:122) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.receivePackets(DoorbirdUdpListener.java:95) ~[?:?]
                at org.openhab.binding.doorbird.internal.listener.DoorbirdUdpListener.run(DoorbirdUdpListener.java:65) ~[?:?]

Possible Solution

  • installing the libsodium23 packge in the docker container solves that issue
  • my temporary fix is to use a custom Dockerfile to install this additional dependency:
FROM openhab/openhab:4.0.4

# libsodium required by doorbird binding
RUN apt-get update
RUN apt-get install -y libsodium23

Steps to Reproduce

  • create a openhab/openhab:4.0.4 docker instance
  • install doorbird binding
  • create doorbird thing:
Thing doorbird:d210x:DoorbellWe2 "Doorbird Doorbell D210FV" [
    doorbirdHost="doorbird",
    userId="ghpwvc0002",
    userPassword="xxxxxxxxx",
    doorbellOffDelay=3,
    imageRefreshRate=30
]
  • add some doorbird items:
Switch doorbell_pressed_we2 "Doorbell Pressed [%s]" <switch> ["Switch"] { channel="doorbird:d210x:DoorbellWe2:doorbell" [profile="rawbutton-on-off-switch"] }
DateTime doorbell_pressed_timestamp_we2 "Doorbell Pressed Timestamp [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> { channel=" doorbird:d210x:DoorbellWe2:doorbellTimestamp" }
Image doorbell_pressed_image_we2 "Doorbell Pressed Image [%s]" { channel="doorbird:d210x:DoorbellWe2:doorbellImage" }
Switch doorbell_motion_we2 "Doorbell Motion [%s]" <switch> ["Switch"] { channel="doorbird:d210x:DoorbellWe2:motion" }
DateTime doorbell_motion_timestamp_we2 "Doorbell Motion Timestamp [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> { channel="doorbird:d210x:DoorbellWe2:motionTimestamp" }
Image doorbell_motion_detected_image_we2 "Motion Detected Image [%s]" { channel="doorbird:d210x:DoorbellWe2:motionImage" }
Switch doorbell_light_we2 "Doorbell Light [%s]" <switch> ["Switch"] { channel="doorbird:d210x:DoorbellWe2:light", expire="5s,command=OFF" }
Switch doorbell_open_door1_we2 "Doorbell Open Door 1 [%s]" <switch> ["Switch"] { channel="doorbird:d210x:DoorbellWe2:openDoor1", expire="5s,command=OFF" }
Image doorbell_image_we2 "Doorbell Image [%s]" { channel="doorbird:d210x:DoorbellWe2:image" }
Number doorbell_doorbell_history_index_we2 "Doorbell History Index [%.0f]" <none> { channel="doorbird:d210x:DoorbellWe2:doorbellHistoryIndex" }
DateTime doorbell_doorbell_history_timestamp_we2 "Doorbell History Timestamp [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> { channel="doorbird:d210x:DoorbellWe2:doorbellHistoryTimestamp" }
Image doorbell_doorbell_history_image_we2 "Doorbell History Image [%s]" { channel="doorbird:d210x:DoorbellWe2:doorbellHistoryImage" }
Number doorbell_motion_history_index_we2 "Motion History Index [%.0f]" <none> { channel="doorbird:d210x:DoorbellWe2:motionHistoryIndex" }
DateTime doorbell_motion_history_timestamp_we2 "Motion History Timestamp [%1$tA, %1$tm/%1$td/%1$tY %1$tl:%1$tM %1$tp]" <time> { channel="doorbird:d210x:DoorbellWe2:motionHistoryTimestamp" }
Image doorbell_motion_history_image_we2 "Motion History Image [%s]" { channel="doorbird:d210x:DoorbellWe2:motionHistoryImage" }
Image doorbell_doorbell_montage_we2 "Doorbell History Montage [%s]" { channel="doorbird:d210x:DoorbellWe2:doorbellMontage" }
Image doorbell_motion_montage_we2 "Motion History Montage [%s]" { channel="doorbird:d210x:DoorbellWe2:motionMontage" }
  • ring the doorbird doorbell device (in my case a D210FV)
  • check the openhab logs and the item states

Context

I was able to fix that issue by creating a custom Dockerfile which installs the libsodium23 package.

Your Environment

  • doorbird D210FV device connected via LAN (reachable via doorbird hostname in my LAN)
  • openhab docker container running on raspberry pi
  • I experienced the same issue already with the 3.0.3 version of the image

Image

  • openHAB version: 4.0.4
  • Image tag used: 4.0.4

Docker Host

  • Operating System: Debian GNU/Linux 12 (bookworm) (Raspian Lite image)
  • Docker Version: 24.0.7
  • Kernel Version: 6.1.0-rpi7-rpi-v8
  • Architecture: aarch64

Configuration

  • compose.yaml:
openhab_wohnung_2:
    #image: openhab/openhab:4.0.4
    build: openhab_wohnung_2
    container_name: openhab_wohnung_2
    environment:
      - TZ=Europe/Berlin
      - CRYPTO_POLICY=unlimited
      - EXTRA_JAVA_OPTS=-Duser.timezone=Europe/Berlin
    network_mode: "host"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./openhab_wohnung_2/openhab_conf:/openhab/conf
      - openhab_we2_addons:/openhab/addons
      - openhab_we2_userdata:/openhab/userdata
    profiles:
      - openhab_wohnung_2
    restart: always

volumes::
  openhab_we2_addons:
  openhab_we2_userdata:
  • openhab_wohnung_2/Dockerfile:
  FROM openhab/openhab:4.0.4
  
  # libsodium required by doorbird binding
  RUN apt-get update
  RUN apt-get install -y libsodium23

schroepf avatar Jan 09 '24 23:01 schroepf

Did you already have a look at this?

https://github.com/openhab/openhab-docker/tree/main#missing-some-preinstalled-package

wborn avatar Jan 10 '24 21:01 wborn

Ah ok... then this is probably a feature, not a bug :)

schroepf avatar Jan 10 '24 22:01 schroepf