Skip to content
Snippets Groups Projects
Forked from lscsoft / GstLAL
2604 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Dockerfile.stretch 7.20 KiB
# Start with the lalsuite nightly container:
FROM containers.ligo.org/lscsoft/lalsuite/nightly:stretch

# Labeling/packaging stuff:
LABEL name="GstLAL Development Package, Debian" \
      maintainer="Alexander Pace <alexander.pace@ligo.org>" \
      date="20180625" \
      support="Reference Platform, Stretch"

# Set up the base user and build environment:
# Note that I've had to install the following packages to get things to
# work. Some duplication with the command line, but the list is clearer:
#   * build-essential (gcc, etc.)
#   * wget
#   * vim
#   * git
#   * flex (from gobject-introspection)
#   * bison (from gobject-introspection)
#   * libffi-dev (from gobject-introspection)

USER root

# Define MKL version variables:
ENV VERSION 2018
ENV UPDATE 3
ENV BUILD 051

RUN apt-get update && apt-get install -y build-essential wget vim git flex bison libffi-dev git-lfs

RUN wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB && \
    apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB && \
    sh -c 'echo deb https://apt.repos.intel.com/mkl all main > /etc/apt/sources.list.d/intel-mkl.list' && \
    apt-get update && \
    apt-get install -y intel-mkl-64bit-$VERSION.$UPDATE-$BUILD

# Install system dependencies:
RUN apt-get --assume-yes install gtk-doc-tools libfftw3-3 libfftw3-dev liborc-0.4-0 python-gobject-dev python-numpy python-scipy lscsoft-gds python-ligo-segments python3-ligo-segments

# Set some environment variables. Hopefully these propagate to the
# gitlab-ci environment. Possibly re-define and then just copy the stuff over.

ENV GSTLAL_DIR /usr
ENV PATH ${GSTLAL_DIR}/bin:${PATH}
ENV PKG_CONFIG_PATH ${GSTLAL_DIR}/lib/pkgconfig:${GSTLAL_DIR}/lib64/pkgconfig:${PKG_CONFIG_PATH}
ENV GI_TYPELIB_PATH ${GSTLAL_DIR}/lib/girepository-1.0:${GI_TYPELIB_PATH}
ENV GST_PLUGIN_PATH ${GSTLAL_DIR}/lib/gstreamer-1.0:${GST_PLUGIN_PATH}
ENV PYTHONPATH ${GSTLAL_DIR}/lib64/python2.7/site-packages:${GSTLAL_DIR}/lib/python2.7/site-packages:${PYTHONPATH}

ENV MKLROOT=/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl
ENV LIBRARY_PATH=/opt/intel/compilers_and_libraries_2018.3.222/linux/tbb/lib/intel64_lin/gcc4.7:/opt/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64_lin:/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl/lib/intel64_lin
ENV CPATH=/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl/include
ENV PATH=PATH=/opt/intel/compilers_and_libraries_2018.3.222/linux/bin/intel64:${PATH}
ENV PKG_CONFIG_PATH /opt/intel/compilers_and_libraries_2018.3.222/linux/mkl/bin/pkgconfig:${PKG_CONFIG_PATH}
ENV LD_LIBRARY_PATH /opt/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64:/opt/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64_lin:/opt/intel/compilers_and_libraries_2018.3.222/linux/tbb/lib/intel64_lin/gcc4.7:/opt/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64_lin:/opt/intel/compilers_and_libraries_2018.3.222/linux/mkl/lib/intel64_lin

# Set build variables:
ENV CC gcc
ENV CXX g++
ENV CFLAGS "-O3 -fPIC -DMKL_ILP64 -m64 -I${MKLROOT}/include -I${GSTLAL_DIR}/include"
ENV LDFLAGS "-L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl"

# These are the packages to download. Use the same nomenclature as the optimized Makefile.

ENV GSTPYTHON gst-python-1.4.0
ENV GSTPLUGINSGOOD gst-plugins-good-1.4.5
ENV GSTPLUGINSBASE gst-plugins-base-1.4.5
ENV GSTREAMER gstreamer-1.4.5
ENV PYGOBJECT pygobject-3.28.0
ENV GINTRO gobject-introspection-1.50.0
# Make a tar directory and download packages:
RUN mkdir /tars
RUN mkdir /src

RUN wget --no-check-certificate http://gstreamer.freedesktop.org/src/gst-python/${GSTPYTHON}.tar.xz --directory-prefix=/tars -nc
RUN wget --no-check-certificate http://gstreamer.freedesktop.org/src/gst-plugins-good/${GSTPLUGINSGOOD}.tar.xz --directory-prefix=/tars -nc
RUN wget --no-check-certificate http://gstreamer.freedesktop.org/src/gst-plugins-base/${GSTPLUGINSBASE}.tar.xz --directory-prefix=/tars -nc
RUN wget --no-check-certificate http://gstreamer.freedesktop.org/src/gstreamer/${GSTREAMER}.tar.xz --directory-prefix=/tars -nc
RUN wget --no-check-certificate http://ftp.gnome.org/pub/GNOME/sources/pygobject/3.28/${PYGOBJECT}.tar.xz --directory-prefix=/tars -nc
RUN wget --no-check-certificate http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/1.50/${GINTRO}.tar.xz --directory-prefix=/tars -nc

# Get glue git repo:
RUN cd /src && \
    git clone https://git.ligo.org/lscsoft/glue.git
#    cd glue && \
#    python setup.py install --prefix=${GSTLAL_DIR}

# Install gobject-introspection:
RUN tar -xf /tars/${GINTRO}.tar.xz -C /src && \
    cd /src/${GINTRO} && \
    ./configure --prefix=${GSTLAL_DIR} --disable-static --with-python=/usr/bin/python && \
    make && \
    make install

# Install pygobject:
RUN tar -xf /tars/${PYGOBJECT}.tar.xz -C /src && \
    cd /src/${PYGOBJECT} && \
    ./configure --prefix=${GSTLAL_DIR} --with-python=python2 --enable-cairo=no && \
    make && \
    make install

# Install gstreamer:
RUN tar -xf /tars/${GSTREAMER}.tar.xz -C /src && \
    cd /src/${GSTREAMER} && \
    ./configure --prefix=${GSTLAL_DIR}  && \
    make && \
    make install

# Install gst-plugins-base:
RUN tar -xf /tars/${GSTPLUGINSBASE}.tar.xz -C /src && \
    cd /src/${GSTPLUGINSBASE} && \
    ./configure --prefix=${GSTLAL_DIR}  && \
    make && \
    make install

# Install gst-plugins-good:
RUN tar -xf /tars/${GSTPLUGINSGOOD}.tar.xz -C /src && \
    cd /src/${GSTPLUGINSGOOD} && \
    ./configure --prefix=${GSTLAL_DIR}  && \
    make && \
    make install

# Install gst-python:
RUN tar -xf /tars/${GSTPYTHON}.tar.xz -C /src && \
    cd /src/${GSTPYTHON} && \
    #mkdir -p ${GSTLAL_DIR}/lib64/python2.7/site-packages/gi/overrides && \
    ./configure --prefix=${GSTLAL_DIR} --exec-prefix=${GSTLAL_DIR} --with-libpython-dir=/usr/lib/python2.7/config-x86_64-linux-gnu --with-pygi-overrides-dir=${GSTLAL_DIR}/lib/python2.7/dist-packages/gi/overrides && \
    make && \
    make install

# Install glue:
RUN cd /src/glue &&  \
    #python setup.py install
    python setup.py install --prefix=${GSTLAL_DIR}

# Install some stuff needed for documentation. I'm putting it as part of this
# container because it takes for-freaking-ever to install in CI:

RUN apt-get --assume-yes install doxygen graphviz python-matplotlib python3-matplotlib
# Dumb hack to get ligolw_segments from the python-pylal package. I can't just install
# python-pylal because it's been depreciated and because there are conflicts with files
# that are coming from lalapps.

RUN mkdir pylaltmp && \
    apt-get install --download-only -o=dir::cache=./pylaltmp python-pylal && \
    ls ./pylaltmp/* && \
    dpkg-deb -x pylaltmp/archives/python-pylal*.deb pylaltmp && \
    sed -i 's/pylal/glue/g' pylaltmp/usr/bin/ligolw_segments && \
    cp pylaltmp/usr/bin/ligolw_segments /usr/bin && \
    rm -r pylaltmp


# Set up a random uid for the avahi user before starting the daemon.

#RUN randuid=$(od -An -N1 -i /dev/random) && \
#    adduser --uid $randuid avahi
RUN apt-get --assume-yes install python-avahi avahi-daemon

# Clean up and close-out

RUN rm -rf /tars /src

# Build gstreamer registry cache:

RUN gst-inspect-1.0
#ENV GST_REGISTRY_UPDATE=no

ENTRYPOINT service dbus start && service avahi-daemon start && bash