Skip to content

Commit

Permalink
Merge branch 'master' of github.com:gwaldron/osgearth
Browse files Browse the repository at this point in the history
  • Loading branch information
gwaldron committed Dec 1, 2023
2 parents 5be3971 + 6add176 commit cabeb05
Show file tree
Hide file tree
Showing 3 changed files with 190 additions and 21 deletions.
5 changes: 5 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.git
.github
.dockerignore
Dockerfile
docker-compose.yml
172 changes: 151 additions & 21 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,151 @@
FROM ubuntu:16.04

RUN apt-get update && apt-get install -y curl openssl \
&& curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | apt-key add - \
&& echo "deb http://dl.bintray.com/jasonbeverage/pelicanmapping xenial main" | tee -a /etc/apt/sources.list \
&& apt-get update -qq \
&& apt-get install -y python-software-properties software-properties-common \
&& add-apt-repository ppa:ubuntugis/ppa --yes \
&& apt-get update -qq \
&& apt-get install -y \
cmake \
openscenegraph=3.6.3 \
gdal-bin \
libgdal-dev \
libgeos-dev \
libsqlite3-dev \
protobuf-compiler \
libprotobuf-dev \
libpoco-dev
COPY . /code
RUN cd /code && cmake -DCMAKE_BUILD_TYPE=Release . && make -j2 && make install && ldconfig
# Build a Docker image to compile and build openscenegraph and osgearth with GL3

ARG UID=1000
ARG GID=1000
ARG HOME=/home/user

FROM ubuntu:focal AS devel

ARG DEBIAN_FRONTEND=noninteractive
ARG HOME

# Install Dependencies
RUN sed -i '/deb-src/s/^# //' /etc/apt/sources.list

RUN apt update && apt upgrade -y && \
apt -y install software-properties-common apt-transport-https

RUN add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" && \
apt update && apt upgrade -y

RUN apt install -y wget build-essential autoconf locate apt-file libspdlog-dev \
git-all fuse libgl1-mesa-dev psmisc libpq-dev libssl-dev openssl libffi-dev \
zlib1g-dev libdbus-1-3 desktop-file-utils \
libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libilmbase-dev \
libxcb-render-util0 libxcb-xinerama0 libxcb-composite0 libxcb-cursor0 \
libxcb-damage0 libxcb-dpms0 libxcb-dri2-0 libxcb-dri3-0 libxcb-ewmh2 \
libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-record0 libxcb-render0 \
libxcb-res0 libxcb-screensaver0 libxcb-shape0 libxcb-shm0 libxcb-sync1 \
libxcb-util1 libfontconfig libfontconfig1 libxcb-xkb1 libxkbcommon-x11-0 \
libegl1-mesa-dev unixodbc-dev curl unzip tar libnss3 libxcomposite1 \
libxcursor-dev libxtst-dev libxrandr-dev libgtk3.0-cil-dev libcurl4-openssl-dev \
libomp-dev libstdc++6 ninja-build libboost-all-dev gdal-bin gdal-data \
libgdal-dev libgeos-dev libgeos++-dev librocksdb-dev freeglut3-dev libglu1-mesa-dev \
libx11-xcb-dev '^libxcb.*-dev' libxrender-dev libxi-dev libxkbcommon-dev libglew-dev \
libxkbcommon-x11-dev libxinerama1 libxrandr2 protobuf-compiler libprotobuf-dev \
ffmpeg libavformat-dev libavdevice-dev libavcodec-dev libavutil-dev libswscale-dev \
libsdl1.2-dev libsdl2-dev libgtkgl2.0-dev libgtkglext1-dev libjasper-dev libasio-dev \
dcmtk libvncserver-dev xfonts-scalable libocct-data-exchange-dev libocct-draw-dev \
libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev \
libocct-ocaf-dev libocct-visualization-dev libzip-dev libblosc-dev libpoco-dev \
libgl-dev libsqlite3-dev nano libgstreamer1.0-0 gstreamer1.0-plugins-base \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
gstreamer1.0-libav gstreamer1.0-x gstreamer1.0-tools gstreamer1.0-gl gstreamer1.0-gtk3 \
libgomp1 --fix-missing

# Update gcc for correct c++17 support
ARG GCC=9
RUN echo "Install GCC ${GCC}" && \
apt -y install g++-${GCC} && \
update-alternatives \
--install /usr/bin/gcc gcc /usr/bin/gcc-${GCC} 60 \
--slave /usr/bin/g++ g++ /usr/bin/g++-${GCC} \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-${GCC} \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-${GCC} \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${GCC} && \
update-alternatives --config gcc

# Update cmake
ARG CMAKE=3.26.3
RUN wget -c -nv https://github.com/Kitware/CMake/releases/download/v${CMAKE}/cmake-${CMAKE}-Linux-x86_64.sh && \
sh cmake-${CMAKE}-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir && \
rm cmake-${CMAKE}-Linux-x86_64.sh

ENV LD_LIBRARY_PATH /usr/local/lib/:${LD_LIBRARY_PATH}

# Install Autodesk FBX
RUN mkdir -p ${HOME}/Downloads && cd ${HOME}/Downloads && \
wget -q --user-agent="Mozilla" https://damassets.autodesk.net/content/dam/autodesk/www/adn/fbx/2020-0-1/fbx202001_fbxsdk_linux.tar.gz && \
tar xzvf fbx202001_fbxsdk_linux.tar.gz && \
chmod a+x fbx202001_fbxsdk_linux

RUN mkdir -p /usr/fbx202001_fbxsdk_linux && \
sh -c '/bin/echo -e "yes\nn" | ${HOME}/Downloads/fbx202001_fbxsdk_linux /usr/fbx202001_fbxsdk_linux' && \
rm -rf ${HOME}/Downloads

ARG fbx_include="/usr/fbx202001_fbxsdk_linux/include"
ARG fbx_lib_release="/usr/fbx202001_fbxsdk_linux/lib/gcc/x64/release/libfbxsdk.a"
ARG fbx_lib_debug="/usr/fbx202001_fbxsdk_linux/lib/gcc/x64/debug/libfbxsdk.a"
ARG fbx_xml_lib=libxml2.so
ARG fbx_zlib_lib=libz.so

# Install OpenSceneGraph dependancies
RUN apt update && apt upgrade -y && apt build-dep -y openscenegraph

ARG OSG_DIR=/opt/OpenSceneGraph
WORKDIR ${HOME}/gitrepo
RUN git clone https://github.com/openscenegraph/OpenSceneGraph.git && \
mkdir OpenSceneGraph/build && cd OpenSceneGraph/build && \
cmake -DOSG_GL3_AVAILABLE=ON -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF \
-DOSG_GLES1_AVAILABLE=OFF -DOSG_GLES2_AVAILABLE=OFF -DOSG_GLES3_AVAILABLE=OFF \
-DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DOSG_GL_FIXED_FUNCTION_AVAILABLE=OFF \
-DOSG_GL_MATRICES_AVAILABLE=OFF -DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=OFF \
-DOSG_GL_VERTEX_FUNCS_AVAILABLE=OFF -DOPENGL_PROFILE=GL3 \
-DOSG_GL_CONTEXT_VERSION=4.6 \
-DFBX_INCLUDE_DIR="$fbx_include" -DFBX_LIBRARY="$fbx_lib_release" \
-DFBX_LIBRARY_DEBUG="$fbx_lib_debug" -DFBX_XML2_LIBRARY="$fbx_xml_lib" \
-DFBX_ZLIB_LIBRARY="$fbx_zlib_lib" \
-DCMAKE_INSTALL_PREFIX=${OSG_DIR} -DCMAKE_BUILD_TYPE=Release .. && \
cmake --build . --parallel 4 --target install
ENV LD_LIBRARY_PATH /opt/OpenSceneGraph/lib:$LD_LIBRARY_PATH

# Install Draco
ARG DRACO_DIR=/opt/Draco
WORKDIR ${HOME}/gitrepo
RUN git clone https://github.com/google/draco.git && \
mkdir draco/build && cd draco/build && \
cmake -DCMAKE_INSTALL_PREFIX=${DRACO_DIR} -DCMAKE_BUILD_TYPE=Release .. && \
cmake --build . --parallel 4 --target install
ENV LD_LIBRARY_PATH ${DRACO_DIR}/lib:$LD_LIBRARY_PATH

# Install OsgEarth
ARG OSGEARTH_DIR=/opt/osgearth
COPY . ${HOME}/gitrepo/osgearth
WORKDIR ${HOME}/gitrepo
RUN sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_imgui/CMakeLists.txt && \
sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_pick/CMakeLists.txt && \
sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_collecttriangles/CMakeLists.txt

RUN mkdir -p ${HOME}/gitrepo/osgearth/build && cd ${HOME}/gitrepo/osgearth/build && \
cmake -DOSG_DIR=${OSG_DIR} -DOpenGL_GL_PREFERENCE=GLVND \
-DCMAKE_INSTALL_PREFIX=${OSGEARTH_DIR} -DCMAKE_BUILD_TYPE=Release .. && \
cmake --build . --parallel 4 --target install

ENV OSG_DIR ${OSG_DIR}
ENV OSGEARTH_DIR ${OSGEARTH_DIR}

# Delete all source files
# RUN rm -rf ${HOME}/gitrepo

# Clean apt cache
RUN apt clean && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*

# Create user
ARG UID
ARG GID
RUN groupadd -g "${GID}" user && \
useradd --create-home --home-dir ${HOME} --no-log-init -u "${UID}" -g "${GID}" user &&\
chown -R user:user ${HOME}

# Switch to user
USER user

RUN mkdir -p ${HOME}/xdg
ENV XDG_RUNTIME_DIR=${HOME}/xdg
ENV __NV_PRIME_RENDER_OFFLOAD 1
ENV __GLX_VENDOR_LIBRARY_NAME nvidia
ENV LD_LIBRARY_PATH /usr/local/lib64:/opt/OpenSceneGraph/lib:/opt/osgearth/lib64:$LD_LIBRARY_PATH
ENV PATH /usr/local/lib64:/opt/OpenSceneGraph/bin:/opt/osgearth/bin:$PATH

WORKDIR ${HOME}
34 changes: 34 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
services:
OpenSceneGraph:
image: 'osgearth:latest'
container_name: osgearth
runtime: nvidia
cap_add:
- SYS_ADMIN
- SYS_RAWIO
devices:
- /dev/fuse:/dev/fuse
security_opt:
- apparmor:unconfined
privileged: true
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
environment:
DISPLAY: $DISPLAY
NVIDIA_DRIVER_CAPABILITIES: all
HOSTNAME: osgearth
stdin_open: true
tty: true
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
build:
context: .
dockerfile: Dockerfile
args:
- "UID=1000"
- "GID=1000"

0 comments on commit cabeb05

Please sign in to comment.