Custom docker Tappas installation

Hello everyone,

I’m currently working on a custom Docker container with Tappas installed. I managed to create one, but apparently it’s installing all Tappas Hailo operators except for hailonet. Do you know what could be the issue here?

FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

# Install python 3.8
RUN apt-get update && \
    apt-get install -y software-properties-common && \
    add-apt-repository ppa:deadsnakes/ppa && \
    apt-get update && \
    apt-get install -y python3.8 python3.8-venv python3.8-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1

COPY ./setup /tmp/setup

# Install Tappas

RUN apt-get update && apt-get install -y unzip && \
    unzip /tmp/setup/tappas_3.31.0_linux_installer.zip && \ 
    apt-get update && \
    apt-get install -y rsync ffmpeg x11-utils python3-dev python3-pip python3-setuptools python3-virtualenv python-gi-dev libgirepository1.0-dev gcc-12 g++-12 cmake git libzmq3-dev && \
    apt-get install -y libopencv-dev python3-opencv && \
    apt-get install -y libcairo2-dev libgirepository1.0-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio gcc-12 g++-12 python-gi-dev && \
    apt update && apt install -y python3-gi python3-gi-cairo gir1.2-gtk-3.0

RUN find /tappas_v3.31.0 -type f -name "*.sh" -exec sed -i -e 's/| sudo /| /g' -e 's/\bsudo //g' {} +

# Update the package list and install prerequisites
RUN apt-get update && apt-get install -y \
    curl \
    wget \
    build-essential \
    libssl-dev \
    zlib1g-dev \
    libbz2-dev \
    libreadline-dev \
    libsqlite3-dev \
    libffi-dev \
    liblzma-dev \
    libncurses5-dev \
    libgdbm-dev \
    tk-dev \
    uuid-dev \
    libnss3-dev \
    vim

# Install the pre-built HailoRT deb package (runtime only)
# Note dkpg will not work here, because the post-install scripts inside the .deb cannot run during Docker build.
# We are putting it here in a non-standard location
RUN mkdir -p /opt/hailo && dpkg-deb -x /tmp/setup/hailort_4.20.0_amd64.deb /opt/hailo

# Create symlinks for hailortcli and the library
RUN ln -s /opt/hailo/usr/bin/hailortcli /usr/bin/hailortcli && \
    ln -s /opt/hailo/usr/lib/libhailort.so.4.20.0 /usr/lib/libhailort.so

# Set environment variables so the Hailo SDK can find its shared libraries and binaries
ENV LD_LIBRARY_PATH=/opt/hailo/usr/lib
ENV PATH=$PATH:/opt/hailo/usr/bin
ENV CPLUS_INCLUDE_PATH=/opt/hailo/usr/include:/opt/hailo/usr/include/gstreamer-1.0/gst/hailo

RUN  cd /tappas_v3.31.0 && chmod +x install.sh && \
    /bin/bash ./install.sh --skip-hailort

# Install pylon 7.5

RUN apt-get install -y libgl1-mesa-dri libgl1-mesa-glx libxcb-xinerama0 libxcb-xinput0 && \
    apt-get install -y /tmp/setup/pylon_install/pylon_*.deb /tmp/setup/pylon_install/codemeter*.deb

ENV PYLON_ROOT=/opt/pylon

# Install gst-pylon-plugin

RUN apt remove meson ninja-build && pip install meson ninja --upgrade && \
    apt install -y gstreamer1.0-python3-plugin-loader && \
    cd /tmp && git clone https://github.com/basler/gst-plugin-pylon.git && cd gst-plugin-pylon && \
    meson setup builddir --prefix /usr/ && ninja -C builddir && ninja -C builddir test && ninja -C builddir install  && \
    gst-inspect-1.0 pylonsrc

RUN mv /tappas_v3.31.0/scripts/bash_completion.d/_python-argcomplete /tappas_v3.31.0/scripts/bash_completion.d/python-argcomplete

# Create workdir directoru
RUN mkdir /workspace

WORKDIR /workspace

Files I’m using in my setup:
hailort_4.20.0_amd64.deb (source: hailo.ai developer zone)
gst-plugin-pylon (source: GitHub - basler/gst-plugin-pylon: The official GStreamer plug-in for Basler cameras)
tappas_3.31.0_linux_installer (source: hailo.ai developer zone)
Pylon 7.5 install files (required for gst-plugin-pylon)

Is there something I’m missing in my setup? On my host machine I have installed HailoRT 4.20, HailoRT-PCIE-driver (4.20) and PyHailoRT

The issue is likely that the hailonet element is part of HailoRT and not Tappas.

GitHub - HailoRT

Also here you can see, there is just a placeholder for hailonet documentation in Tappas.

GitHub - Tappas - Elements - hailonet

For our Docker support we had HailoRT and Tappas in the same container and only the PCIe driver outside.

Oh yeah you are right. I also couldn’t install package during the container creation process so at the end of the file I added:

CMD bash -c "dpkg --install /tmp/setup/hailort_4.20.0_amd64.deb && /bin/bash"

And it worked :slight_smile: Thank you for the hint :slight_smile:

1 Like