|
FROM ubuntu:18.04 |
|
|
|
ARG MYPATH=/usr/local/lobseg |
|
ARG MYLIBPATH=$MYPATH/lib |
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \ |
|
autotools-dev \ |
|
build-essential \ |
|
ca-certificates \ |
|
cmake \ |
|
git \ |
|
wget \ |
|
unzip \ |
|
libx11-dev \ |
|
vim-tiny \ |
|
software-properties-common && \ |
|
rm -rf /var/lib/apt/lists/* |
|
|
|
RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test && apt update && apt-get install -y gcc-4.8 g++-4.8 gcc-5 g++-5 |
|
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 3 |
|
RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 3 |
|
|
|
# attempting to fix linker error. |
|
# + set gcc to 5. |
|
# + added CMAKE_CXX_FLAGS -fPIC |
|
# + itk failed to compile |
|
# + upgrade itk to 4 |
|
ENV CMAKE_CXX_FLAGS -fPIC |
|
# abuse opt directory. |
|
WORKDIR /opt |
|
|
|
|
|
# install miniconda. |
|
# create and activate python virtual env with desired version |
|
RUN wget --quiet --no-check-certificate https://repo.continuum.io/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh --no-check-certificate -O ~/miniconda.sh && \ |
|
/bin/bash ~/miniconda.sh -b -p /opt/conda |
|
RUN /opt/conda/bin/conda create -n py python=3.7.2 |
|
RUN echo "source /opt/conda/bin/activate py" > ~/.bashrc |
|
ENV PATH /opt/conda/envs/py/bin:$PATH |
|
RUN /bin/bash -c "source /opt/conda/bin/activate py && conda install cython numpy -y && pip install scikit-build" |
|
|
|
|
|
# build zlib |
|
WORKDIR /opt/sources |
|
RUN wget --quiet https://zlib.net/zlib-1.2.11.tar.gz -O zlib.tar.gz && \ |
|
tar xfz zlib.tar.gz |
|
WORKDIR /opt/sources/zlib-1.2.11 |
|
RUN ./configure --prefix=$MYPATH && make -j"$(nproc)" && make install -j"$(nproc)" |
|
|
|
|
|
# build boost |
|
ENV BOOST_DOTTED_VERSION 1.60.0 |
|
ENV BOOST_ROOT /usr/local/boost-$BOOST_DOTTED_VERSION |
|
ENV BOOST_LIBRARYDIR /usr/local/boost-$BOOST_DOTTED_VERSION/lib |
|
ENV BOOST_INCLUDEDIR /usr/local/boost-$BOOST_DOTTED_VERSION/include/ |
|
ENV LD_LIBRARY_PATH $BOOST_LIBRARYDIR:$LD_LIBRARY_PATH |
|
|
|
WORKDIR /opt/sources |
|
RUN apt-get install -y --fix-missing --no-install-recommends \ |
|
libbz2-dev \ |
|
zlib1g-dev |
|
RUN wget --quiet http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz -O boost.tar.gz && \ |
|
tar xfz boost.tar.gz |
|
WORKDIR /opt/sources/boost_1_60_0 |
|
ENV CPLUS_INCLUDE_PATH /opt/conda/envs/py/include/python3.7m/ |
|
RUN ./bootstrap.sh --prefix=$BOOST_ROOT --with-python=python3.7 --with-libraries=python,filesystem,system,test,iostreams |
|
# PATCH for python 3.7 compliance - see https://github.com/boostorg/python/commit/660487c43fde76f3e64f1cb2e644500da92fe582 for detail |
|
RUN wget --quiet https://raw.githubusercontent.com/boostorg/python/660487c43fde76f3e64f1cb2e644500da92fe582/src/converter/builtin_converters.cpp |
|
RUN mv libs/python/src/converter/builtin_converters.cpp libs/python/src/converter/builtin_converters.BAK |
|
RUN mv builtin_converters.cpp libs/python/src/converter/builtin_converters.cpp |
|
RUN ./b2 install |
|
|
|
|
|
# build dcmtk |
|
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --fix-missing --no-install-recommends \ |
|
libtiff5-dev \ |
|
libpng-dev \ |
|
libjpeg-dev \ |
|
libgif-dev \ |
|
libxml2-dev \ |
|
libssl-dev \ |
|
zlib1g-dev \ |
|
libwrap0-dev \ |
|
libssl-dev |
|
WORKDIR /opt/sources |
|
RUN wget --quiet https://github.com/DCMTK/dcmtk/archive/DCMTK-3.6.2.tar.gz -O dcmtk.tar.gz && \ |
|
tar xfz dcmtk.tar.gz |
|
WORKDIR /opt/sources/dcmtk-DCMTK-3.6.2 |
|
RUN mkdir build |
|
WORKDIR /opt/sources/dcmtk-DCMTK-3.6.2/build |
|
ENV CXXFLAGS "-std=c++98 -Wno-error -fpermissive -DUCHAR_TYPE=uint16_t" |
|
RUN cmake .. -DCMAKE_INSTALL_PREFIX=$MYPATH -DCMAKE_LIBRARY_PATH=$MYLIBPATH \ |
|
-DDCMTK_FORCE_FPIC_ON_UNIX:BOOL=ON |
|
RUN make -j"$(nproc)" && make install -j"$(nproc)" |
|
|
|
|
|
WORKDIR /opt/sources |
|
RUN wget --quiet https://www.cs.umd.edu/~mount/ANN/Files/1.1.1/ann_1.1.1.tar.gz -O ann.tar.gz && \ |
|
tar xfz ann.tar.gz |
|
WORKDIR /opt/sources/ann_1.1.1 |
|
RUN sed -i '1 i\#include <stdlib.h>' src/ANN.cpp |
|
RUN sed -i '1 i\#include <stdlib.h>' src/kd_dump.cpp |
|
RUN sed -i '1 i\#include <stdlib.h>' ann2fig/ann2fig.cpp |
|
RUN sed -i '1 i\#include <string.h>' src/kd_dump.cpp |
|
RUN sed -i '1 i\#include <string.h>' ann2fig/ann2fig.cpp |
|
RUN sed -i '1 i\#include <string.h>' test/ann_test.cpp |
|
RUN make linux-g++ |
|
|
|
|
|
|
|
|
|
# build qt |
|
# https://doc.qt.io/qt-5/linux-requirements.html |
|
# https://doc.qt.io/archives/qt-4.8/requirements-x11.html |
|
# https://stackoverflow.com/questions/13220499/compiling-qt-4-8-3-on-ubuntu-12-failing/13622201 |
|
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --fix-missing --no-install-recommends \ |
|
libxt-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig-dev libncurses5-dev \ |
|
python python-dev \ |
|
mesa-utils libgl1-mesa-glx \ |
|
libxcursor-dev libxcursor1 libxcb-cursor-dev libxcb-cursor0 \ |
|
libfontconfig1-dev \ |
|
libfreetype6-dev \ |
|
libx11-dev \ |
|
libx11-xcb-dev \ |
|
libxext-dev \ |
|
libxfixes-dev \ |
|
libxi-dev \ |
|
libxrender-dev \ |
|
libxcb1-dev \ |
|
libxcb-glx0-dev \ |
|
libxcb-keysyms1-dev \ |
|
libxcb-image0-dev \ |
|
libxcb-shm0-dev \ |
|
libxcb-icccm4-dev \ |
|
libxcb-sync0-dev \ |
|
libxcb-xfixes0-dev \ |
|
libxcb-shape0-dev \ |
|
libxcb-randr0-dev \ |
|
libxcb-render-util0-dev \ |
|
libxkbcommon-dev \ |
|
libxkbcommon-x11-dev |
|
|
|
# libxcd-xinerama0-dev \ |
|
|
|
RUN mkdir /inst |
|
RUN mkdir -p /opt/sources/qt |
|
WORKDIR /inst |
|
RUN wget https://download.qt.io/new_archive/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.tar.xz -O qt.tar.xz && \ |
|
tar -xf qt.tar.xz -C /opt/sources/qt --strip-components 1 |
|
|
|
WORKDIR /opt/sources/qt |
|
RUN ./configure -platform linux-g++ \ |
|
-prefix /usr/local/qt -release -opensource -confirm-license \ |
|
-openssl -qt-xcb -opengl -nomake examples -nomake tests |
|
RUN apt-get install -yq libssl1.0-dev |
|
RUN make -j"$(nproc)" && make install |
|
|
|
# -static -no-qml-debug -qt-xcb -no-glib \ |
|
# -no-pulseaudio -no-alsa \ |
|
# -skip qtdeclarative \ |
|
# -skip qtscript \ |
|
# -skip qtmultimedia \ |
|
# -skip qtxmlpatterns \ |
|
# -skip qtsvg \ |
|
# -skip qtwebchannel \ |
|
|
|
# https://github.com/Kitware/VTK/releases?after=v8.0.0 |
|
# build vtk |
|
WORKDIR /opt/sources |
|
RUN wget https://github.com/Kitware/VTK/archive/refs/tags/v6.1.0.tar.gz -O vtk.tar.gz && \ |
|
tar xfz vtk.tar.gz |
|
|
|
WORKDIR /opt/sources/VTK-6.1.0 |
|
#RUN sed -i 's/\[345\]/[34567]/g' CMake/vtkCompilerExtras.cmake |
|
#RUN sed -i 's/\[345\]/[34567]/g' CMake/GenerateExportHeader.cmake |
|
RUN mkdir build |
|
WORKDIR /opt/sources/VTK-6.1.0/build |
|
ENV OPENGL_FLAG OpenGL |
|
RUN cmake .. -DCMAKE_INSTALL_PREFIX=$MYPATH \ |
|
-DCMAKE_BUILD_TYPE=Release \ |
|
-DBUILD_SHARED_LIBS:BOOL=OFF \ |
|
-DVTK_RENDERING_BACKEND=$OPENGL_FLAG \ |
|
-DCMAKE_C_FLAGS=-DGLX_GLXEXT_LEGACY \ |
|
-DCMAKE_CXX_FLAGS=-DGLX_GLXEXT_LEGACY \ |
|
-DVTK_Group_Qt:BOOL=OFF \ |
|
-DVTK_QT_VERSION:STRING=5 \ |
|
-DQT_QMAKE_EXECUTABLE:FILEPATH=/usr/local/qt/bin/qmake \ |
|
-DModule_vtkGUISupportQt:BOOL=ON \ |
|
-DModule_vtkGUISupportQtOpenGL:BOOL=ON \ |
|
-DQt5_DIR:PATH=/usr/local/qt/lib/cmake/Qt5 \ |
|
-DQt5Widgets_DIR=/usr/local/qt/lib/cmake/Qt5Widgets \ |
|
-DQt5OpenGL_DIR=/usr/local/qt/lib/cmake/Qt5OpenGL |
|
|
|
RUN make -j"$(nproc)" && make install -j"$(nproc)" |
|
|
|
# build gdcm |
|
# WORKDIR /opt/sources |
|
# RUN wget --quiet https://github.com/malaterre/GDCM/archive/v3.0.4.tar.gz -O gdcm.tar.gz && \ |
|
# tar -zxvf gdcm.tar.gz |
|
|
|
# WORKDIR /opt/sources/GDCM-3.0.4 |
|
# RUN mkdir build |
|
# WORKDIR /opt/sources/GDCM-3.0.4/build |
|
# RUN cmake .. \ |
|
# -DCMAKE_INSTALL_RPATH=/local/gdcm/lib \ |
|
# -DCMAKE_INSTALL_PREFIX=/local/gdcm \ |
|
# -DGDCM_BUILD_APPLICATIONS=1 \ |
|
# -DGDCM_BUILD_SHARED_LIBS=1 |
|
# RUN make -j"$(nproc)" install |
|
|
|
|
|
# https://github.com/Kitware/ITK/releases?after=v4.13.0 |
|
# build itk |
|
WORKDIR /opt/sources |
|
#RUN wget --quiet https://sourceforge.net/projects/itk/files/itk/3.20/InsightToolkit-3.20.1.tar.gz/download -O itk.tar.gz && \ |
|
# tar xfz itk.tar.gz |
|
#WORKDIR /opt/sources/InsightToolkit-3.20.1 |
|
#RUN mkdir build |
|
#WORKDIR /opt/sources/InsightToolkit-3.20.1/build |
|
|
|
RUN wget --quiet https://github.com/Kitware/ITK/archive/refs/tags/v4.12.2.tar.gz -O itk.tar.gz && \ |
|
tar xfz itk.tar.gz |
|
WORKDIR /opt/sources/ITK-4.12.2 |
|
RUN mkdir build |
|
WORKDIR /opt/sources/ITK-4.12.2/build |
|
RUN cmake .. \ |
|
-DCMAKE_INSTALL_PREFIX=$MYPATH \ |
|
-DCMAKE_LIBRARY_PATH=$MYLIBPATH \ |
|
-DCMAKE_BUILD_TYPE=Release \ |
|
-DBUILD_DOXYGEN=OFF \ |
|
-DBUILD_EXAMPLES=OFF \ |
|
-DBUILD_SHARED_LIBS=OFF \ |
|
-DITK_DYNAMIC_LOADING=OFF \ |
|
-DBUILD_TESTING=OFF \ |
|
-DCMAKE_BACKWARDS_COMPATIBILITY=3.1 \ |
|
-DITK_USE_KWSTYLE=OFF \ |
|
-DModule_ITKVtkGlue=ON \ |
|
-DITK_USE_REVIEW=ON \ |
|
-DITK_BUILD_ALL_MODULES=ON |
|
RUN make -j"$(nproc)" && make install -j"$(nproc)" |
|
|
|
# -DITK_USE_SYSTEM_GDCM=ON \ |
|
# -DGDCM_DIR=/opt/sources/GDCM-3.0.4/build |
|
|
|
ENV MAIN_LIBRARYDIR $MYPATH/lib |
|
ENV LD_LIBRARY_PATH $MAIN_LIBRARYDIR:$LD_LIBRARY_PATH |
|
ENV ITK_LIBRARYDIR $MYPATH/lib/InsightToolkit |
|
ENV LD_LIBRARY_PATH $ITK_LIBRARYDIR:$LD_LIBRARY_PATH |
|
ENV QT_LIBRARYDIR /usr/local/qt/lib |
|
ENV LD_LIBRARY_PATH $QT_LIBRARYDIR:$LD_LIBRARY_PATH |
|
#ENV GDCM_PATH /usr/local/gdcm |
|
#ENV LD_LIBRARY_PATH $GDCM_PATH:$LD_LIBRARY_PATH |
|
|
|
ENV LDFLAGS -L$MAIN_LIBRARYDIR:$LDFLAGS |
|
ENV LDFLAGS -L$ITK_LIBRARYDIR:$LDFLAGS |
|
ENV LDFLAGS -L$QT_LIBRARYDIR:$LDFLAGS |
|
|
|
|
|
ENV QT_GRAPHICSSYSTEM raster |
|
ENV LIBGL_ALWAYS_INDIRECT 1 |
|
ENV QT_XKB_CONFIG_ROOT /usr/share/X11/xkb: |
|
|
|
WORKDIR /opt |
|
|
|
# cd to workdir and build # TODO, move code (move LUNG_SEGMENTATION and PCL to within container??) |
|
#WORKDIR /medqia/LUNG_SEGMENTATION/dev |
|
#RUN rm -rf _skbuild; \ |
|
# python setup.py build |
|
|
|
|
|
|
|
RUN apt-get update \ |
|
&& apt-get install -y -qq --no-install-recommends \ |
|
libglvnd0 \ |
|
libgl1 \ |
|
libglx0 \ |
|
libegl1 \ |
|
libxext6 \ |
|
libx11-6 |
|
# Env vars for the nvidia-container-runtime. |
|
ENV NVIDIA_VISIBLE_DEVICES all |
|
ENV NVIDIA_DRIVER_CAPABILITIES graphics,utility,compute |
|
|
|
|
|
ENV Qt5_DIR /usr/local/qt/lib/cmake/Qt5 |
|
ENV ITK_DIR /opt/sources/ITK-4.12.2/build |
|
ENV VTK_DIR /opt/sources/VTK-6.1.0/build |
|
|
savior of the day. custom QSurfaceFormat for linux from below:
http://quaoar.su/blog/page/the-qvtkwidget-is-dead-long-live-the-qvtkwidget