elestio / docker-desktop-vnc-knime

Knime desktop app in the browser
Apache License 2.0
1 stars 2 forks source link

Support for Knime Analytics Platform 4.7 & 5.1 #1

Open sstamatiadis-dlt opened 1 year ago

sstamatiadis-dlt commented 1 year ago

Dear Elestio,

Is there a plan to upgrade this docker image to support Knime's new Analytics Platform version 5.1 - https://docs.knime.com/?category=analytics_platform&version=5.1?

I tried myself on EKS:

  1. Updating the package version - It fails due to missing system libraries
RUN mkdir -p /opt/ && cd /opt && curl https://download.knime.org/analytics-platform/linux/knime_5.1.0.linux.gtk.x86_64.tar.gz > knime.tar.gz && tar -xzf knime.tar.gz && rm knime.tar.gz && mv knime_5.1.0 knime

image

See error log:

root@knime-1692867052-6bff589b75-mv7kt:~# cat /opt/knime/configuration/1692875209180.log 
!SESSION 2023-08-24 11:06:48.861 -----------------------------------------------
eclipse.buildId=unknown
java.version=17.0.5
java.vendor=Eclipse Adoptium
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Command-line arguments:  -os linux -ws gtk -arch x86_64

!ENTRY org.eclipse.osgi 4 0 2023-08-24 11:06:59.554
!MESSAGE Application error
!STACK 1
java.lang.UnsatisfiedLinkError: /opt/knime/plugins/com.equo.chromium.cef.gtk.linux.x86_64_106.0.10/chromium-5249/libequochro.so: libnss3.so: cannot open shared object file: No such file or directory
    at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
    at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(Unknown Source)
    at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
    at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(Unknown Source)
    at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.base/java.lang.Runtime.load0(Unknown Source)
    at java.base/java.lang.System.load(Unknown Source)
    at com.equo.chromium.internal.Engine$1.loadLibrary(Engine.java:80)
    at org.cef.SystemBootstrap.loadLibrary(SystemBootstrap.java:36)
    at org.cef.CefApp.startup(CefApp.java:569)
    at com.equo.chromium.internal.Engine.loadLib(Engine.java:87)
    at com.equo.chromium.internal.Engine.<clinit>(Engine.java:46)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Unknown Source)
    at com.equo.chromium.ChromiumBrowser.earlyInit(ChromiumBrowser.java:145)
    at org.knime.js.cef.CEFEarlyStartup.run(CEFEarlyStartup.java:71)
    at org.knime.core.util.IEarlyStartup.executeEarlyStartup(IEarlyStartup.java:106)
    at org.knime.product.rcp.KNIMEApplication.start(KNIMEApplication.java:129)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
  1. Based on this post and after installing some extra system libs it appears to work but then the driver seems to crash (see libva errors) and the IDE window becomes white/empty/blank. It is not really stable/usable.
# RUN apt-get install libnss
# RUN apt update \
#     && apt-get install -y libnss3-dev libgdk-pixbuf2.0-dev libgtk-3-dev libxss-dev

image

See error log:

root@knime-1692877958-75c5d74c8b-nqnzl:~# /opt/knime/knime 

(knime:1875): dbind-WARNING **: 12:12:28.777: AT-SPI: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
CompileCommand: exclude javax/swing/text/GlyphView.getBreakSpot bool exclude = true

(java:1891): dbind-WARNING **: 12:12:29.152: AT-SPI: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)

Sometimes it works:

image

Do you have any plans on update the image? Or at least do you have any recommendations as I am not really familiar on what exactly is required so that Knime runs smoothly. For now switching back to classic UI seems like the only way to use 5.1 but even that is not reliable as sometimes you cannot even reach the Preferences menu to switch the UI option. The problem seems to be related to the chrome/chromium driver.

Best regards

sstamatiadis-dlt commented 1 year ago

I am attaching the whole Dockerfile that I used:

# Built with arch: amd64 flavor: lxde image: ubuntu:20.04
#
################################################################################
# base system
################################################################################

FROM ubuntu:20.04 as system

RUN sed -i 's#http://archive.ubuntu.com/ubuntu/#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list;

RUN apt-get update \
    && apt-get install -y --no-install-recommends curl ca-certificates gnupg patch

# built-in packages
ENV DEBIAN_FRONTEND noninteractive
RUN apt update \
    && apt install -y --no-install-recommends software-properties-common curl apache2-utils ca-certificates \
    && apt update \
    && apt install -y --no-install-recommends --allow-unauthenticated \
        supervisor nginx sudo net-tools zenity xz-utils \
        dbus-x11 x11-utils alsa-utils \
        mesa-utils libgl1-mesa-dri \
    && apt autoclean -y \
    && apt autoremove -y \
    && rm -rf /var/lib/apt/lists/*
# install debs error if combine together
RUN apt update \
    && apt install -y --no-install-recommends --allow-unauthenticated \
        xvfb x11vnc \
        vim-tiny firefox ttf-ubuntu-font-family ttf-wqy-zenhei  \
    && apt autoclean -y \
    && apt autoremove -y \
    && rm -rf /var/lib/apt/lists/*

RUN apt update \
    && apt install -y --no-install-recommends --allow-unauthenticated \
        lxde gtk2-engines-murrine gnome-themes-standard gtk2-engines-pixbuf gtk2-engines-murrine arc-theme \
    && apt autoclean -y \
    && apt autoremove -y \
    && rm -rf /var/lib/apt/lists/*

# Install missing libs for Knime 5.1
RUN apt update \
    && apt install -y --no-install-recommends --allow-unauthenticated \
        libnss3

# Additional packages require ~600MB
# libreoffice  pinta language-pack-zh-hant language-pack-gnome-zh-hant firefox-locale-zh-hant libreoffice-l10n-zh-tw

# tini to fix subreap
ARG TINI_VERSION=v0.18.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /bin/tini
RUN chmod +x /bin/tini

# ffmpeg
RUN apt update \
    && apt install -y --no-install-recommends --allow-unauthenticated \
        ffmpeg \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir /usr/local/ffmpeg \
    && ln -s /usr/bin/ffmpeg /usr/local/ffmpeg/ffmpeg

# python library
COPY rootfs/usr/local/lib/web/backend/requirements.txt /tmp/
RUN apt-get update \
    && dpkg-query -W -f='${Package}\n' > /tmp/a.txt \
    && apt-get install -y python3-pip python3-dev build-essential \
    && pip3 install setuptools wheel && pip3 install -r /tmp/requirements.txt \
    && ln -s /usr/bin/python3 /usr/local/bin/python \
    && dpkg-query -W -f='${Package}\n' > /tmp/b.txt \
    && apt-get remove -y `diff --changed-group-format='%>' --unchanged-group-format='' /tmp/a.txt /tmp/b.txt | xargs` \
    && apt-get autoclean -y \
    && apt-get autoremove -y \
    && rm -rf /var/lib/apt/lists/* \
    && rm -rf /var/cache/apt/* /tmp/a.txt /tmp/b.txt

################################################################################
# builder
################################################################################
FROM ubuntu:20.04 as builder

RUN sed -i 's#http://archive.ubuntu.com/ubuntu/#mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list;

RUN apt-get update \
    && apt-get install -y --no-install-recommends curl ca-certificates gnupg patch

# nodejs
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - \
    && apt-get install -y nodejs

# yarn
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
    && apt-get update \
    && apt-get install -y yarn

# build frontend
COPY web /src/web
RUN cd /src/web \
    && yarn \
    && yarn build
RUN sed -i 's#app/locale/#novnc/app/locale/#' /src/web/dist/static/novnc/app/ui.js

################################################################################
# merge
################################################################################
FROM system
LABEL maintainer="support@elest.io"

COPY --from=builder /src/web/dist/ /usr/local/lib/web/frontend/
COPY rootfs /
RUN ln -sf /usr/local/lib/web/frontend/static/websockify /usr/local/lib/web/frontend/static/novnc/utils/websockify && \
    chmod +x /usr/local/lib/web/frontend/static/websockify/run

RUN mkdir -p /opt/ && cd /opt && curl https://download.knime.org/analytics-platform/linux/knime_5.1.0.linux.gtk.x86_64.tar.gz > knime.tar.gz && tar -xzf knime.tar.gz && rm knime.tar.gz && mv knime_5.1.0 knime

EXPOSE 80
WORKDIR /root
ENV HOME=/home/ubuntu \
    SHELL=/bin/bash
#HEALTHCHECK --interval=30s --timeout=5s CMD curl --fail http://127.0.0.1:6079/api/health
ENTRYPOINT ["/startup.sh"]
jbenguira commented 1 year ago

Hey @sstamatiadis-dlt, we have archived the base image for this. We want to rebuild it based on this one instead: https://github.com/elestio-examples/ubuntu-desktop

Should be done next week :)

sstamatiadis-dlt commented 1 year ago

Hello @jbenguira, that's some great news! Looking forward 😃

jbenguira commented 1 year ago

@sstamatiadis-dlt the new repository is ready: https://github.com/elestio-examples/knime