We're interested in using FME Desktop for automated ETL processes on Kubernetes cloud infrastructure. We intend to use it on "Job" type because it allows us to use our clusters for the shortest possible time, taking only the resources it needs to complete the job, and nothing else. This is why our interest lies in FME desktop for parameterized ETL jobs much more than with FME Server, which requires costly dedicated services that run unused for most of the time.
However, we have some trouble Dockerized installs of FME Desktop on newer versions of Ubuntu.
This is all fine:
ARG UBUNTU_VERSION=16.04
FROM ubuntu:${UBUNTU_VERSION}
# After FROM all ARGs are wiped, so we need to set again
ARG UBUNTU_VERSION=16.04
# Installing required packages
RUN apt-get update && \
apt-get -y install \
curl
# Frontent must be disabled during install
ARG DEBIAN_FRONTEND=noninteractive
# I'm not using the docker ADD command to be able to use cache.
ARG FME_MAJOR=2019
ARG FME_MINOR=1.2.0.19630
RUN curl --fail --location --show-error \
https://downloads.safe.com/fme/${FME_MAJOR}/fme-desktop-${FME_MAJOR}_${FME_MAJOR}.${FME_MINOR}~ubuntu.${UBUNTU_VERSION}_amd64.deb \
--output /tmp/fme_install.deb && \
apt-get install -y /tmp/fme_install.deb && \
# cleaning up afterwards to reduce image size
rm /tmp/fme_install.deb
ENV PATH="/opt/fme-desktop-${FME_MAJOR}/bin:${PATH}"
# Test for working runtime:
RUN fme --version
This is all fine. However, Ubuntu 16.04 is getting a little old, so we've switched to 18.04 for quite some time. Many packages that come from Canonical with 18.04 have to be installed from other sources (such as a recent Python version), or even compiled. But, if we try to install using Ubuntu 18.04 (using a recent FME Desktop version, there is no Ubuntu Xenial version of recent FME Desktop versions):
# Not working for 18.04
ARG UBUNTU_VERSION=18.04
FROM ubuntu:${UBUNTU_VERSION}
# After FROM all ARGs are wiped, so we need to set again
ARG UBUNTU_VERSION=18.04
# installing required packages, note libbson and libmongoc (!)
RUN apt-get update && \
apt-get -y install \
curl \
libbson-1.0-0 \
libmongoc-1.0-0
#Frontent must be disabled during install
ARG DEBIAN_FRONTEND=noninteractive
# I'm not using the docker ADD command to be able to use cache.
ARG FME_MAJOR=2020
ARG FME_MINOR=0.1.0.20218
RUN curl --fail --location --show-error \
https://downloads.safe.com/fme/${FME_MAJOR}/fme-desktop-${FME_MAJOR}_${FME_MAJOR}.${FME_MINOR}~ubuntu.${UBUNTU_VERSION}_amd64.deb \
--output /tmp/fme_install.deb && \
apt-get install -y /tmp/fme_install.deb && \
# cleaning up afterwards to reduce image size
rm /tmp/fme_install.deb
ENV PATH="/opt/fme-desktop-${FME_MAJOR}/bin:${PATH}"
# Check for working runtime
RUN fme --version
Note that we have to specify installing libbson and libmongoc. Otherwise FME Desktop will fail runtime with:
fme: error while loading shared libraries: libbson-1.0.so.0: cannot open shared object file: No such file or directory
resp.
fme: error while loading shared libraries: libmongoc-1.0.so.0: cannot open shared object file: No such file or directory
It seems like some dependencies got mixed up in different versions of FME.
However, when we do install these dependencies (as shown in the Dockerfile example), FME Desktop fails runtime with:
fme: symbol lookup error: /opt/fme-desktop-2020/bin/../fmecore/././libmongocxx.so._noabi: undefined symbol: mongoc_transaction_opts_destroy
Can you please help us out with this to figure out the Docker recipe for FME Desktop on Ubuntu 18.04? Many thanks.