From 20a8ba84504c2bb02763cf6836bf63ad14faf04a Mon Sep 17 00:00:00 2001
From: Giuliano Taffoni <giuliano.taffoni@inaf.it>
Date: Thu, 11 Feb 2021 15:26:49 +0100
Subject: [PATCH] vlbi pipeline

---
 vlbi/Dockerfile      | 305 +++++++++++++++++++++++++++++++++++++++++++
 vlbi/Dockerfile.base | 156 ++++++++++++++++++++++
 vlbi/build-base.sh   |  10 ++
 vlbi/build-sw.sh     |  10 ++
 vlbi/entrypoint.sh   | 103 +++++++++++++++
 vlbi/files/post_init |  26 ++++
 vlbi/files/sudoers   |  30 +++++
 7 files changed, 640 insertions(+)
 create mode 100644 vlbi/Dockerfile
 create mode 100644 vlbi/Dockerfile.base
 create mode 100644 vlbi/build-base.sh
 create mode 100644 vlbi/build-sw.sh
 create mode 100644 vlbi/entrypoint.sh
 create mode 100644 vlbi/files/post_init
 create mode 100644 vlbi/files/sudoers

diff --git a/vlbi/Dockerfile b/vlbi/Dockerfile
new file mode 100644
index 0000000..c761a16
--- /dev/null
+++ b/vlbi/Dockerfile
@@ -0,0 +1,305 @@
+FROM morgan1971/vlbi-base:0.0.1
+MAINTAINER Giuliano Taffoni <giuliano.taffoni@inaf.it>
+ENV CONTAINER_NAME='lovarVLBISoftware'
+
+USER root
+
+
+ENV J=40
+ENV INSTALLDIR=/opt/lofar
+ENV PYTHON_VERSION=2.7
+# Path to where the patch for python-casacore's setup is stored.
+ENV PYTHON_CASACORE_PATCH=$INSTALLDIR/python-casacore/python_casacore_setup_patch.patch
+ENV PATCH_LOFAR=$INSTALLDIR/lofar/lofar.patch
+# Settings relevant to the installed software.
+ENV AOFLAGGER_VERSION=v2.15.0
+ENV ARMADILLO_VERSION=9.900.3
+ENV BLAS_VERSION=3.8.0
+ENV BOOST_VERSION=1.69.0
+ENV CASACORE_VERSION=v2.4.1
+ENV # Leave at latest, release versions crash for some reason.
+ENV CASAREST_VERSION=latest
+ENV CFITSIO_VERSION=7.3.47
+ENV DPPP_VERSION=v4.2
+ENV DYSCO_VERSION=v1.2
+#export EVERYBEAM_VERSION=0cc64a81
+ENV EVERYBEAM_VERSION=master
+ENV FFTW_VERSION=3.5.8
+ENV HDF5_VERSION=1.10.5
+ENV IDG_VERSION=master
+ENV LAPACK_VERSION=3.8.0
+ENV LOFAR_VERSION=3_2_18
+# Don't change LOSOTO2_VERSION. This is the last commit that plays nice with Python 2.
+ENV LOSOTO2_VERSION=c8fbd61
+ENV LOSOTO3_VERSION=latest
+ENV LSMTOOL_VERSION=v1.4.2
+ENV OPENBLAS_VERSION=3.8.0
+ENV PYBDSF_VERSION=master
+ENV PYTHON_CASACORE_VERSION=v2.2.1
+ENV RMEXTRACT_VERSION=4c61232
+ENV SUPERLU_VERSION=5.2.1
+ENV WSCLEAN_VERSION=latest
+ENV WCSLIB_VERSION=6.4
+ENV HDF5_USE_FILE_LOCKING=FALSE
+
+# Symlinks required for Fedora 31
+RUN ln -s /usr/lib64/libboost_python37.so /usr/lib64/libboost_python3.so
+RUN ln -s /usr/lib64/libboost_numpy37.so /usr/lib64/libboost_numpy3.so
+RUN ln -s /usr/lib64/libboost_python27.so /usr/lib64/libboost_python.so
+RUN ln -s /usr/lib64/libboost_numpy27.so /usr/lib64/libboost_numpy.so
+RUN ln -s /usr/lib64/libnsl.so.2.0.0 /usr/lib64/libnsl.so
+
+#
+# Setup the compiliong enviroment 
+#
+
+#ARG CFLAGS="-mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512ifma -mno-avx512vbmi"
+#ARG CXXFLAGS="-std=c++11 -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512ifma -mno-avx512vbmi"
+# Use below to optimize for a specific architecture
+#export CFLAGS="-march=skylake-avx512 -mtune=skylake-avx512"
+#export CXXFLAGS="-march=skylake-avx512 -mtune=skylake-avx512"
+ARG CPLUS_INCLUDE_PATH="/usr/include/openmpi-x86_64:/usr/include/c++/9:$CPLUS_INCLUDE_PATH:/usr/include/python2.7:$INSTALLDIR/casacore/include:/usr/include/boost:/usr/include/cfitsio:$INSTALLDIR/EveryBeam/include"
+ARG CPATH="/usr/include/openmpi-x86_64/:/opt/intel/mkl/include:${INSTALLDIR}/casacore/include:$INSTALLDIR/LOFARBeam/include:$INSTALLDIR/idg/include:$INSTALLDIR/aoflagger/include:$INSTALLDIR/EveryBeam/include:$CPATH"
+ARG CMAKE_PREFIX_PATH="$INSTALLDIR/aoflagger:$INSTALLDIR/casacore:$INSTALLDIR/lofar:$INSTALLDIR/LOFARBeam:/usr/lib64/openmpi:$INSTALLDIR/EveryBeam"
+ARG LD_LIBRARY_PATH="$INSTALLDIR/aoflagger/lib:$INSTALLDIR/casacore/lib:$INSTALLDIR/idg/lib:$INSTALLDIR/LOFARBeam/lib:/usr/lib64/openmpi/lib/:$INSTALLDIR/EveryBeam/lib:LD_LIBRARY_PATH"
+ARG PATH="/usr/lib64/openmpi/bin:$PATH"
+#ARG  make=`which make`
+ARG OLD_PYTHONPATH=$PYTHONPATH
+
+
+#
+# Setup the Python environment.
+#
+RUN    wget https://raw.githubusercontent.com/tikk3r/lofar-grid-hpccloud/fedora/requirements.txt -O $INSTALLDIR/requirements.txt
+RUN    wget https://raw.githubusercontent.com/tikk3r/lofar-grid-hpccloud/fedora/requirements3.txt -O $INSTALLDIR/requirements3.txt
+RUN    pip install xmlrunner
+RUN    pip3 install xmlrunner
+RUN    echo lofar-h5plot >> $INSTALLDIR/requirements3.txt  
+RUN    pip --no-cache-dir install "virtualenv<20"
+RUN    virtualenv $INSTALLDIR/pyenv-py3 --python=python3
+RUN    source $INSTALLDIR/pyenv-py3/bin/activate && export HDF5_VERSION=1.10.5 && pip install numpy && pip install --no-binary h5py h5py && \
+       pip install -r $INSTALLDIR/requirements3.txt && deactivate
+RUN    virtualenv $INSTALLDIR/pyenv-py2 --python=python2
+RUN    source $INSTALLDIR/pyenv-py2/bin/activate && export HDF5_VERSION=1.10.5 && pip install numpy && pip install --no-binary h5py h5py && \
+       pip install -r $INSTALLDIR/requirements.txt && pip install --no-deps "reproject==0.5.1"
+
+
+#
+# Install Montage
+#
+RUN    mkdir -p /opt/montage && cd /opt/montage && wget https://github.com/Caltech-IPAC/Montage/archive/v6.0.tar.gz -O Montage_v6.0.tar.gz && \ 
+	tar xf Montage_v6.0.tar.gz && cd Montage-6.0 && make -j $J
+
+#
+# Install difmap
+#
+RUN mkdir -p $INSTALLDIR/difmap && cd $INSTALLDIR/difmap && wget ftp://ftp.astro.caltech.edu/pub/difmap/difmap2.5e.tar.gz && \
+    tar zxf difmap2.5e.tar.gz && cd uvf_difmap && \
+    wget https://raw.githubusercontent.com/nealjackson/loop3_difmap/master/corplt.c -O difmap_src/corplt.c && \
+    sed -i.bak -e '97d' configure && \
+    sed -i.bak -e '97 i PGPLOT_LIB=/usr/lib64/libpgplot.so.5' configure && \
+    ./configure linux-i486-gcc && export PGPLOT_LIB=/usr/lib64/libpgplot.so.5 && export CFLAGS="-L/usr/lib64/libpgplot.so.5" && \
+    ./makeall
+RUN rm -rf $INSTALLDIR/difmap/*.tar.gz
+
+#
+# Install PyBDSF
+#
+#ARG CFLAGS="-mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512ifma -mno-avx512vbmi"
+RUN  mkdir -p ${INSTALLDIR}/pybdsf && cd ${INSTALLDIR}/pybdsf && git clone https://github.com/lofar-astron/pybdsf pybdsf
+RUN  if [ "${PYBDSF_VERSION}" != "latest" ]; then cd ${INSTALLDIR}/pybdsf/pybdsf && git checkout ${PYBDSF_VERSION}; fi
+
+RUN cd ${INSTALLDIR}/pybdsf/pybdsf && python setup.py install
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/pybdsf/pybdsf
+
+
+#
+# Install CASAcore
+#
+# Casacore 2.4.1 does not seem to deal well with AVX512 instructions, so disable them if needed
+#export CFLAGS="-march=skylake -mtune=skylake -mno-avx512f"
+#export CXXFLAGS="-march=skylake -mtune=skylake -mno-avx512f"
+RUN mkdir -p ${INSTALLDIR}/casacore/build && mkdir -p ${INSTALLDIR}/casacore/data
+RUN cd $INSTALLDIR/casacore && git clone https://github.com/casacore/casacore.git src
+RUN if [ "${CASACORE_VERSION}" != "latest" ]; then cd ${INSTALLDIR}/casacore/src && git checkout tags/${CASACORE_VERSION}; fi
+# Backport patch UVFITS for LOFAR. This is fixed in recent versions > May 26 2020
+# wget https://patch-diff.githubusercontent.com/raw/casacore/casacore/pull/1033.patch -O $INSTALLDIR/casacore/1033.patch
+# cd $INSTALLDIR/casacore/src && patch --fuzz 3 -p1 < $INSTALLDIR/casacore/1033.patch
+RUN cd ${INSTALLDIR}/casacore/data && wget --retry-connrefused ftp://anonymous@ftp.astron.nl/outgoing/Measures/WSRT_Measures.ztar
+RUN cd ${INSTALLDIR}/casacore/data && tar xf WSRT_Measures.ztar && rm WSRT_Measures.ztar
+RUN cd ${INSTALLDIR}/casacore/build && cmake -DCMAKE_INSTALL_PREFIX=${INSTALLDIR}/casacore/ -DDATA_DIR=${INSTALLDIR}/casacore/data -DBUILD_PYTHON=True -DUSE_OPENMP=True -DUSE_FFTW3=TRUE -DUSE_HDF5=True -DBUILD_PYTHON3=False ../src/ 
+RUN cd ${INSTALLDIR}/casacore/build && make -s -j ${J} && make install
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/casacore/build && rm -rf $INSTALLDIR/casacore/src
+
+#
+# Install Python-CASAcore
+#
+
+RUN mkdir ${INSTALLDIR}/python-casacore && cd ${INSTALLDIR}/python-casacore && git clone https://github.com/casacore/python-casacore
+RUN if [ "$PYTHON_CASACORE_VERSION" != "latest" ]; then cd ${INSTALLDIR}/python-casacore/python-casacore && git checkout tags/${PYTHON_CASACORE_VERSION}; fi
+RUN source $INSTALLDIR/pyenv-py2/bin/activate && cd ${INSTALLDIR}/python-casacore/python-casacore && python setup.py build_ext -I${INSTALLDIR}/casacore/include/:/usr/include/python2.7:/usr/include/cfitsio -L${INSTALLDIR}/casacore/lib/:/usr/lib64/ && python setup.py install #--prefix=${INSTALLDIR}/python-casacore/
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/python-casacore/python-casacore 
+# and then reset the flags again if needed
+#export CFLAGS="-march=skylake-avx512 -mtune=skylake-avx512"
+#export CXXFLAGS="-march=skylake-avx512 -mtune=skylake-avx512"
+
+#
+# Install Dysco
+#
+RUN mkdir -p $INSTALLDIR/dysco/build
+RUN cd $INSTALLDIR/dysco && git clone https://github.com/aroffringa/dysco.git src && cd src
+RUN if [ "$DYSCO_VERSION" != "latest" ]; then cd $INSTALLDIR/dysco/src && git checkout $DYSCO_VERSION; fi
+RUN cd $INSTALLDIR/dysco/build && cmake -DCMAKE_INSTALL_PREFIX=$INSTALLDIR/dysco -DCASACORE_ROOT_DIR=$INSTALLDIR/casacore -DPORTABLE=True ../src && make -s -j $J && make install
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/dysco/build && rm -rf $INSTALLDIR/dysco/src
+
+#
+# Install AOFlagger
+#
+RUN mkdir -p ${INSTALLDIR}/aoflagger/build &&  cd ${INSTALLDIR}/aoflagger && git clone git://git.code.sf.net/p/aoflagger/code aoflagger && cd ${INSTALLDIR}/aoflagger/aoflagger
+RUN if [ "${AOFLAGGER_VERSION}" != "latest" ]; then cd ${INSTALLDIR}/aoflagger/aoflagger &&  git checkout tags/${AOFLAGGER_VERSION}; fi
+RUN source $INSTALLDIR/pyenv-py2/bin/activate && cd ${INSTALLDIR}/aoflagger/build && cmake -DCMAKE_INSTALL_PREFIX=${INSTALLDIR}/aoflagger/ -DCASACORE_ROOT_DIR=${INSTALLDIR}/casacore -DBUILD_SHARED_LIBS=ON -DPORTABLE=True ../aoflagger
+RUN source $INSTALLDIR/pyenv-py2/bin/activate && cd ${INSTALLDIR}/aoflagger/build && make -s -j ${J}  && make install
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/aoflagger/aoflagger && rm -rf $INSTALLDIR/aoflagger/build &&  rm -rf $INSTALLDIR/aoflagger/src
+
+#
+# Install LOFAR
+#
+RUN mkdir -p ${INSTALLDIR}/lofar/build/gnucxx11_opt 
+RUN if [ "${LOFAR_VERSION}" = "latest" ]; then cd ${INSTALLDIR}/lofar && svn checkout https://svn.astron.nl/LOFAR/trunk src; fi
+RUN if [ "${LOFAR_VERSION}" != "latest" ]; then cd ${INSTALLDIR}/lofar && svn checkout https://svn.astron.nl/LOFAR/tags/LOFAR-Release-${LOFAR_VERSION} src; fi
+RUN cd $INSTALLDIR/lofar && svn update --depth=infinity $INSTALLDIR/lofar/src/CMake
+RUN cd $INSTALLDIR/lofar/ && wget https://raw.githubusercontent.com/tikk3r/lofar-grid-hpccloud/master/patches/lofar.patch && \
+	patch $INSTALLDIR/lofar/src/CMake/variants/GNUCXX11.cmake $PATCH_LOFAR && \
+	cd ${INSTALLDIR}/lofar/build/gnucxx11_opt
+    #cmake -DCMAKE_PREFIX_PATH=$INSTALLDIR/aoflagger:$INSTALLDIR/casacore:$INSTALLDIR/dysco -DBUILD_PACKAGES="StationResponse pystationresponse ParmDB pyparmdb Pipeline MS" -DCMAKE_INSTALL_PREFIX=$INSTALLDIR/lofar/ -DUSE_LOG4CPLUS=OFF -DUSE_OPENMP=True ${INSTALLDIR}/lofar/src/
+ARG CMAKE_C_COMPILER=/usr/bin/gcc
+ARG CMAKE_CXX_COMPILER=/usr/bin/g++
+ARG CC=/usr/bin/gcc
+ARG CXX=/usr/bin/g++
+RUN source $INSTALLDIR/pyenv-py2/bin/activate && cd ${INSTALLDIR}/lofar/build/gnucxx11_opt && CC=/usr/bin/gcc && CXX=/usr/bin/g++ && cmake -DCMAKE_PREFIX_PATH=$INSTALLDIR/aoflagger:$INSTALLDIR/casacore:$INSTALLDIR/dysco -DBUILD_PACKAGES="Pipeline" -DCMAKE_INSTALL_PREFIX=$INSTALLDIR/lofar/ -DUSE_LOG4CPLUS=OFF -DUSE_OPENMP=True -DBUILD_PYTHON3=OFF ${INSTALLDIR}/lofar/src/ && make -s -j $J && make install
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/lofar/build && rm -rf $INSTALLDIR/lofar/src
+
+#
+# Install msoverview separately
+#
+RUN    mkdir -p $INSTALLDIR/msoverview/src
+RUN    cd $INSTALLDIR/msoverview/src && svn export https://svn.astron.nl/LOFAR/tags/LOFAR-Release-3_2_18/CEP/MS/src/msoverview.cc && \
+       source $INSTALLDIR/pyenv-py2/bin/activate && gcc -I/opt/lofar/casacore/include/casacore/ -L/opt/lofar/casacore/lib msoverview.cc \
+        -o $INSTALLDIR/lofar/bin/msoverview -lcasa_casa -lcasa_ms -lcasa_tables -lstdc++
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/msoverview
+    
+#
+# Install the standalone StationResponse libraries.
+#   
+RUN mkdir -p $INSTALLDIR/LOFARBeam/build && cd $INSTALLDIR/LOFARBeam && git clone https://github.com/lofar-astron/LOFARBeam.git src
+RUN source $INSTALLDIR/pyenv-py2/bin/activate && cd $INSTALLDIR/LOFARBeam/build && cmake -DCMAKE_INSTALL_PREFIX=$INSTALLDIR/lofar ../src && make -j $J && make install
+RUN touch /opt/lofar/lofar/lib64/python2.7/site-packages/lofar/__init__.py
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/LOFARBeam/build && rm -rf $INSTALLDIR/LOFARBeam/src
+
+#
+# Install EveryBeam library
+#
+RUN mkdir -p $INSTALLDIR/EveryBeam/build && cd $INSTALLDIR/EveryBeam && git clone https://git.astron.nl/RD/EveryBeam.git src && \ 
+    cd src && git checkout $EVERYBEAM_VERSION && \
+    cd $INSTALLDIR/EveryBeam/build && \
+    cmake -DCMAKE_INSTALL_PREFIX=$INSTALLDIR/EveryBeam ../src && \
+    make -j $J && make install
+
+#
+# Install DPPP
+#
+RUN mkdir -p $INSTALLDIR/DPPP/build && git clone https://github.com/lofar-astron/DP3.git $INSTALLDIR/DPPP/src && \ 
+    cd $INSTALLDIR/DPPP/src && git checkout tags/${DPPP_VERSION}
+RUN cd $INSTALLDIR/DPPP/build && cmake3 -DCMAKE_CXX_FLAGS="-D_GLIB_USE_CXX_ABI=1 -DBOOST_NO_CXX11_SCOPED_ENUMS" -DCMAKE_INSTALL_PREFIX:PATH=$INSTALLDIR/DPPP -DLOFAR_STATION_RESPONSE_DIR:PATH=$INSTALLDIR/lofar/include -DLOFAR_STATION_RESPONSE_LIB:FILEPATH=$INSTALLDIR/lofar/lib/libstationresponse.so -DIDGAPI_LIBRARIES=$INSTALLDIR/idg/lib/libidg-api.so -DIDGAPI_INCLUDE_DIRS=$INSTALLDIR/idg/include -DAOFLAGGER_INCLUDE_DIR=$INSTALLDIR/aoflagger/include -DAOFLAGGER_LIB=$INSTALLDIR/aoflagger/lib/libaoflagger.so ../src && make -s -j $J && make install
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/DPPP/build && rm -rf $INSTALLDIR/DPPP/src
+
+############################################
+# Install Python packages for Python 2 now #
+############################################
+#
+# Install RMextract
+#
+RUN mkdir -p $INSTALLDIR/RMextract/build && cd $INSTALLDIR/RMextract/build && git clone https://github.com/lofar-astron/RMextract.git src && \
+    cd src && if [ "$RMEXTRACT_VERSION" != "latest" ]; then git checkout $RMEXTRACT_VERSION; fi
+RUN source $INSTALLDIR/pyenv-py2/bin/activate &&  cd $INSTALLDIR/RMextract/build/src &&  python setup.py build --add-lofar-utils && \
+    python setup.py install --add-lofar-utils && deactivate
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/RMextract
+
+#
+# Install LoSoTo
+#
+RUN mkdir -p $INSTALLDIR/losoto/build && cd ${INSTALLDIR}/losoto/build && \
+    git clone https://github.com/revoltek/losoto.git src && \
+    cd src && if [ "$LOSOTO2_VERSION" != "latest" ]; then git checkout $LOSOTO2_VERSION; fi
+RUN source $INSTALLDIR/pyenv-py2/bin/activate &&  cd ${INSTALLDIR}/losoto/build/src &&  python setup.py build && \
+    python setup.py install  && deactivate
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/losoto
+
+#
+# Install LSMTool.
+#
+RUN mkdir -p $INSTALLDIR/lsmtool && cd $INSTALLDIR/lsmtool && \
+    git clone https://github.com/darafferty/LSMTool.git lsmtool && \ 
+    cd $INSTALLDIR/lsmtool/lsmtool && \
+    if [ "$LSMTOOL_VERSION" != "latest" ]; then git checkout $LSMTOOL_VERSION; fi
+RUN source $INSTALLDIR/pyenv-py2/bin/activate && cd $INSTALLDIR/lsmtool/lsmtool &&  python setup.py install  && deactivate
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/lsmtool
+
+############################################
+# Install Python packages for Python 3 now #
+############################################
+#
+# Install LoSoTo
+#
+RUN mkdir -p $INSTALLDIR/losoto/build && \
+    cd $INSTALLDIR/losoto/build && \
+    git clone https://github.com/revoltek/losoto.git src 
+RUN cd $INSTALLDIR/losoto/build/src && source $INSTALLDIR/pyenv-py3/bin/activate && \
+    python setup.py build && \
+    python setup.py install && deactivate
+RUN cd $INSTALLDIR && rm -rf $INSTALLDIR/losoto
+
+# Switch back to py2 to wrap up installation
+#
+# Install-WSClean
+#
+RUN mkdir $INSTALLDIR/wsclean && cd ${INSTALLDIR}/wsclean && git clone https://gitlab.com/aroffringa/wsclean.git && \ 
+    if [ "$WSCLEAN_VERSION" != "latest" ]; then cd ${INSTALLDIR}/wsclean/wsclean && git checkout $WSCLEAN_VERSION; fi
+RUN cd ${INSTALLDIR}/wsclean/wsclean &&  mkdir build && cd build
+ARG CC=/usr/lib64/openmpi/bin/mpicc
+ARG CXX=/usr/lib64/openmpi/bin/mpic++
+RUN source $INSTALLDIR/pyenv-py2/bin/activate  && cd ${INSTALLDIR}/wsclean/wsclean/build &&  cmake -DCMAKE_INSTALL_PREFIX=$INSTALLDIR/wsclean -DPORTABLE=True -DIDGAPI_LIBRARIES=$INSTALLDIR/idg/lib/libidg-api.so -DIDGAPI_INCLUDE_DIRS=$INSTALLDIR/idg/include .. && \
+    make -j ${J} && \
+    make install && \
+    cd $INSTALLDIR && rm -rf $INSTALLDIR/wsclean/wsclean
+#
+# Switch back to normal compilers
+ARG CC=/usr/bin/gcc
+ARG CXX=/usr/bin/g++
+#
+#
+# Install DS9
+#
+RUN mkdir -p $INSTALLDIR/ds9/bin && cd $INSTALLDIR/ds9 && \
+    wget http://ds9.si.edu/download/fedora30/ds9.fedora30.8.2.tar.gz && \
+    tar xf ds9*.tar.gz -C $INSTALLDIR/ds9/bin && \
+    rm ds9*.tar.gz
+#
+# Finaly cleanup of unnecessary stuff
+# 
+ENV  PYTHONPATH=$OLD_PYTHONPATH
+RUN rm -rf /var/cache/dnf/* && \
+    rm -rf /var/cache/yum/* && \
+    rm -rf /var/log/* && \
+    dnf -y clean all 
+
+#
+# init-lofar
+#
+RUN    ln -s /opt/lofar/DPPP/bin/DPPP /opt/lofar/lofar/bin/NDPPP && \
+       ln -s /opt/lofar/DPPP/bin/makesourcedb /opt/lofar/lofar/bin/makesourcedb &&\
+       ln -s $INSTALLDIR/pyenv-py3/bin/h5plot /usr/bin/h5plot
+COPY files/post_init /tmp/post_init
+RUN  cat /tmp/post_init >> $INSTALLDIR/init.sh
+RUN  sed -e 's/\\\$/\$/g' /opt/lofar/init.sh
+USER metauser
diff --git a/vlbi/Dockerfile.base b/vlbi/Dockerfile.base
new file mode 100644
index 0000000..0ce9bfd
--- /dev/null
+++ b/vlbi/Dockerfile.base
@@ -0,0 +1,156 @@
+FROM fedora:31
+MAINTAINER Giuliano Taffoni <giuliano.taffoni@inaf.it>
+ENV CONTAINER_NAME='lovarVLBIbase'
+USER root
+
+#
+# Set enviroment
+#
+
+ENV J=4
+ENV INSTALLDIR=/opt/lofar
+ENV PYTHON_VERSION=2.7
+
+# Settings relevant to the installed software.
+ENV ARMADILLO_VERSION=9.900.3
+ENV BLAS_VERSION=3.8.0
+ENV BOOST_DOT_VERSION=1.69.0
+ENV BOOST_VERSION=1_69_0
+ENV CFITSIO_VERSION=7.3.47
+ENV FFTW_VERSION=3.5.8
+ENV HDF5_VERSION=1.10.5
+ENV LAPACK_VERSION=3.8.0
+ENV OPENBLAS_VERSION=3.8.0
+ENV SUPERLU_VERSION=5.2.1
+ENV WCSLIB_VERSION=6.4
+ENV DEBIAN_FRONTEND=noninteractive
+
+#
+# System installs
+#
+RUN dnf -y update
+RUN dnf -y install dnf-plugins-core
+RUN dnf -y install patch sudo yum-utils git svn wget vim nano emacs
+RUN dnf -y install automake autoconf cmake cmake3 make gcc gcc-c++ gcc-gfortran 
+RUN dnf -y install arpack-devel python-devel python3-devel lapack-devel libpng-devel libxml2-devel readline-devel ncurses-devel f2py bzip2-devel libicu-devel python3-scipy python-setuptools gsl gsl-devel gdal gdal-devel libpqxx libpqxx-devel
+RUN dnf -y install bison flex ncurses tar bzip2 which gettext hdf5 hdf5-devel
+RUN dnf -y install python python3-devel python-pip python2-tkinter python3-tkinter
+RUN dnf -y install libsigc++20-devel gtkmm30-devel
+RUN dnf -y install lua lua-devel
+RUN dnf -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
+RUN dnf -y install pgplot python3-numpy-f2py perf qt5
+#
+# Install Boost
+#
+RUN  dnf -y install boost boost-devel boost-python2 boost-python2-devel boost-python3 boost-python3-devel
+
+#
+# Install FFTW
+#
+RUN dnf -y install fftw-devel fftw-libs
+
+# Install OpenBLAS
+#
+RUN dnf -y install blas-devel
+
+#
+# Install SuperLU
+#
+RUN dnf -y install SuperLU SuperLU-devel
+
+#
+# Install Armadillo
+#
+RUN dnf -y install armadillo armadillo-devel
+
+#
+# Install cfitsio
+#
+RUN dnf -y install cfitsio cfitsio-devel
+
+#
+# Install wcslib
+#
+RUN dnf -y install wcslib wcslib-devel 
+#
+# Fedora packages to install
+#
+RUN  dnf -y install rsync
+RUN  dnf -y install openmpi openmpi-devel
+RUN  dnf -y install htop mariadb-devel
+RUN  dnf -y install python3-pybind11 pybind11-devel
+###################
+# Source installs #
+###################
+RUN mkdir -p $INSTALLDIR
+#
+# Install Image Domain Gridder (IDG)
+#
+RUN mkdir -p $INSTALLDIR/idg && cd $INSTALLDIR/idg
+# Use these flags instead for an architecture optimized build.
+#export CFLAGS="-march=skylake-avx512 -mtune=skylake-avx512"
+#export CXXFLAGS="-march=skylake-avx512 -mtune=skylake-avx512"
+# Disable AVX512 instructions and build a generic architecture.
+#export CFLAGS="-mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512ifma -mno-avx512vbmi"
+#export CXXFLAGS="-mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512ifma -mno-avx512vbmi"
+RUN export CC=`which gcc` && export CXX=`which g++` && export make=`which make` && \
+       export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/opt/intel/mkl/lib/intel64:$LD_LIBRARY_PATH && \
+       export CMAKE_PREFIX_PATH=/usr/local/cuda/lib64:/opt/intel/mkl/lib/intel64:$CMAKE_PREFIX_PATH && \
+       export CPATH=/usr/local/cuda/include:/opt/intel/mkl/include:$CPATH && \
+       git clone https://gitlab.com/astron-idg/idg.git src && cd src && git checkout $IDG_VERSION && mkdir build && cd build && \
+       cmake -DCMAKE_INSTALL_PREFIX=$INSTALLDIR/idg .. && make -j $J && make install
+
+RUN rm -rf $INSTALLDIR/idg/src
+#
+# Wrap up installation, remove unnecessary stuff.
+RUN  dnf -y autoremove
+RUN  dnf -y clean all
+
+#
+# init-lofar
+#
+RUN echo export INSTALLDIR=$INSTALLDIR > $INSTALLDIR/init.sh
+RUN echo export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64/:\$LD_LIBRARY_PATH >> $INSTALLDIR/init.sh
+
+#------------------------
+# Local User
+#------------------------
+
+# Add group. We chose GID 65527 to try avoiding conflicts.
+RUN groupadd -g 65527 metagroup
+
+# Add user. We chose UID 65527 to try avoiding conflicts.
+RUN useradd metauser -d /home/metauser -u 65527 -g 65527 -m -s /bin/bash
+
+# Add metuaser user to sudoers
+RUN usermod -a -G wheel metauser
+
+RUN sed -i 's/^%wheel/#%wheel/' /etc/sudoers 
+RUN sed -i 's/^# %wheel/%wheel/'  /etc/sudoers
+# Rename user home folder as a "vanilla" home folder
+RUN mv /home/metauser /metauser_home_vanilla
+
+RUN   echo "export PATH=/usr/local/cuda/bin:\$PATH" >> $INSTALLDIR/init.sh
+RUN   echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/opt/intel/mkl/lib/intel64/:\$LD_LIBRARY_PATH" >> $INSTALLDIR/init.sh
+
+# Give write access to anyone to the home folder so the entrypoint will be able
+# to copy over the /home/matauser_vanilla into /home/metauser (for Singularity)
+RUN chmod 777 /home
+
+
+#----------------------
+# Entrypoint
+#----------------------
+
+# Copy entrypoint
+COPY entrypoint.sh /
+
+# Give right permissions
+RUN chmod 755 /entrypoint.sh
+
+# Set entrypoint
+ENTRYPOINT ["/entrypoint.sh"]
+
+# Set user lofar
+USER metauser
+
diff --git a/vlbi/build-base.sh b/vlbi/build-base.sh
new file mode 100644
index 0000000..5411b69
--- /dev/null
+++ b/vlbi/build-base.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+if [ 'xxx${VERSION}' == 'xxx' ]; then
+   VERSION='latest'
+fi
+
+
+
+docker build -t morgan1971/vlbi-base:${VERSION} -f Dockerfile.base .
+
diff --git a/vlbi/build-sw.sh b/vlbi/build-sw.sh
new file mode 100644
index 0000000..485d235
--- /dev/null
+++ b/vlbi/build-sw.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+if [ 'xxx${VERSION}' == 'xxx' ]; then
+   VERSION='latest'
+fi
+
+
+
+docker build -t morgan1971/skadc-software:${VERSION} -f Dockerfile .
+
diff --git a/vlbi/entrypoint.sh b/vlbi/entrypoint.sh
new file mode 100644
index 0000000..661cdb9
--- /dev/null
+++ b/vlbi/entrypoint.sh
@@ -0,0 +1,103 @@
+#!/bin/bash
+
+# Exit on any error. More complex stuff could be done in future
+# (see https://stackoverflow.com/questions/4381618/exit-a-script-on-error)
+set -e
+
+
+if [ "x$SAFE_MODE" == "xTrue" ]; then
+
+    echo ""
+    echo "[INFO] Not executing entrypoint as we are in safe mode, just opening a Bash shell."
+    exec /bin/bash
+
+else
+
+    #---------------------
+    #   Setup home
+    #---------------------
+
+    if [ ! -f "/home/metauser/.initialized" ]; then
+        echo "[INFO] Setting up home"
+        [ ! -d "/home/metauser" ] &&  mkdir -p /home/metauser
+        # Copy over vanilla home contents
+        for x in /metauser_home_vanilla/* /metauser_home_vanilla/.[!.]* /metauser_home_vanilla/..?*; do
+            if [ -e "$x" ]; then cp -a "$x" /home/metauser/; fi
+        done
+	echo source $INSTALLDIR/init.sh >> $HOME/.bashrc
+        # Mark as initialized
+        [ ! -f "/home/metauser/.initialized" ] && touch /home/metauser/.initialized
+    fi
+    #---------------------
+    #   Save env
+    #---------------------
+    echo "[INFO] Dumping env"
+
+    # Save env vars for later usage (e.g. ssh)
+
+    env | \
+    while read env_var; do
+      if [[ $env_var == HOME\=* ]]; then
+          : # Skip HOME var
+      elif [[ $env_var == PWD\=* ]]; then
+          : # Skip PWD var
+      else
+          echo "export $env_var" >> /tmp/env.sh
+      fi
+    done
+
+    echo ""
+    echo "[INFO] Executing entrypoint..."
+
+    if [ "xxx$@"  == "xxx" ]; then
+        COMMAND="/bin/bash"
+    else
+            COMMAND="$@"
+    fi
+
+
+    # Start!
+        echo -n "[INFO] Will execute entrypoint command: "
+        echo $COMMAND
+        echo ""
+        echo "=============================================================="
+        echo ""
+        echo "      Welcome to the LOFAR  $CONTAINER_NAME container!"
+        echo ""
+        echo "=============================================================="
+        echo ""
+        echo "You are now in /home/metauser with write access as user \"$(whoami)\"."
+        echo ""
+        echo "Remember that contents inside this container, unless stored"
+        echo "on a persistent volume mounted from you host machine, will"
+        echo "be wiped out when exiting the container."
+        echo ""
+	echo "This image acts as a base for the LOFAR installationi."
+	echo "It has Fedora 31 setup, with the required dependencies installed:"
+	echo "    * Armadillo 9.900.3"
+	echo "    * Boost 1.69.0"
+	echo "    * Armadillo 9.900.3"
+	echo "    * Boost 1.69.0"
+	echo "    * CFITSIO 7.3.47"
+	echo "    * FFTW 3.5.8"
+	echo "    * HDF5 1.10.5"
+	echo "    * LAPACK 3.8.0"
+	echo "    * OpenBLAS 3.8.0"
+	echo "    * SuperLU 5.2.1"
+	echo "    * WCSLIB 6.4"
+	echo "    * Armadillo 9.900.3"
+	echo "    * Boost 1.69.0"
+	echo "    * Armadillo 9.900.3"
+	echo "    * Boost 1.69.0"
+	echo "    * CFITSIO 7.3.47"
+	echo "    * FFTW 3.5.8"
+	echo "    * HDF5 1.10.5"
+	echo "    * LAPACK 3.8.0"
+	echo "    * OpenBLAS 3.8.0"
+	echo "    * SuperLU 5.2.1"
+	echo "    * WCSLIB 6.4"
+        echo ""
+        cd /home/metauser
+        $COMMAND
+fi
+
diff --git a/vlbi/files/post_init b/vlbi/files/post_init
new file mode 100644
index 0000000..9b174a9
--- /dev/null
+++ b/vlbi/files/post_init
@@ -0,0 +1,26 @@
+export INSTALLDIR=$INSTALLDIR
+export HDF5_USE_FILE_LOCKING=FALSE
+source $INSTALLDIR/lofar/lofarinit.sh
+export PYTHONPATH=$INSTALLDIR/dppp:$INSTALLDIR/lofar/lib64/python2.7/site-packages
+export PATH=/opt/montage/Montage-6.0/bin:$PATH
+export PATH=$INSTALLDIR/aoflagger/bin:$PATH
+export PATH=$INSTALLDIR/casacore/bin:$PATH
+export PATH=$INSTALLDIR/ds9/bin:$PATH
+export PATH=$INSTALLDIR/DPPP/bin:$PATH
+export PATH=$INSTALLDIR/difmap/uvf_difmap:$PATH
+export PATH=$INSTALLDIR/dysco/bin:$PATH
+export PATH=$INSTALLDIR/lofar/bin:$PATH
+export PATH=$INSTALLDIR/wsclean/bin:$PATH
+export PATH=/usr/lib64/openmpi/bin:$PATH
+export LD_LIBRARY_PATH=$INSTALLDIR/aoflagger/lib:$INSTALLDIR/casacore/lib:$INSTALLDIR/DPPP/lib:$INSTALLDIR/dysco/lib:$INSTALLDIR/EveryBeam/lib:$INSTALLDIR/idg/lib:$INSTALLDIR/lofar/lib:$INSTALLDIR/lofar/lib64:$INSTALLDIR/LOFARBeam/lib:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib/:$LD_LIBRARY_PATH
+export OPENBLAS_NUM_THREADS=64
+export OPENBLAS_MAX_THREADS=64
+export OMP_NUM_THREADS=64
+export OMP_MAX_THREADS=64
+
+export PYTHONPATH=$INSTALLDIR/dppp:$INSTALLDIR/lofar/lib64/python2.7/site-packages:$PYTHONPATH
+source $INSTALLDIR/pyenv-py2/bin/activate
+measures.directory: $INSTALLDIR/casacore/data
+export CASARCFILES=$INSTALLDIR/.casarc
diff --git a/vlbi/files/sudoers b/vlbi/files/sudoers
new file mode 100644
index 0000000..47ab37c
--- /dev/null
+++ b/vlbi/files/sudoers
@@ -0,0 +1,30 @@
+#
+# This file MUST be edited with the 'visudo' command as root.
+#
+# Please consider adding local content in /etc/sudoers.d/ instead of
+# directly modifying this file.
+#
+# See the man page for details on how to write a sudoers file.
+#
+Defaults        env_reset
+Defaults        mail_badpass
+Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+
+# Host alias specification
+
+# User alias specification
+
+# Cmnd alias specification
+
+# User privilege specification
+root    ALL=(ALL:ALL) ALL
+
+# Members of the admin group may gain root privileges
+%admin ALL=(ALL) ALL
+
+# Allow members of group sudo to execute any command
+%sudo   ALL=(ALL:ALL) NOPASSWD:ALL
+
+# See sudoers(5) for more information on "#include" directives:
+
+#includedir /etc/sudoers.d
-- 
GitLab