Skip to content

Commit 15c79ca

Browse files
author
Fiorilla Angelo Emanuele
committed
Dockerfile upgrade
1 parent c54ac65 commit 15c79ca

File tree

3 files changed

+180
-21
lines changed

3 files changed

+180
-21
lines changed

.dockerignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.git
2+
.github
3+
.dockerignore
4+
Dockerfile
5+
docker-compose.yml

Dockerfile

Lines changed: 141 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,141 @@
1-
FROM ubuntu:16.04
2-
3-
RUN apt-get update && apt-get install -y curl openssl \
4-
&& curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | apt-key add - \
5-
&& echo "deb http://dl.bintray.com/jasonbeverage/pelicanmapping xenial main" | tee -a /etc/apt/sources.list \
6-
&& apt-get update -qq \
7-
&& apt-get install -y python-software-properties software-properties-common \
8-
&& add-apt-repository ppa:ubuntugis/ppa --yes \
9-
&& apt-get update -qq \
10-
&& apt-get install -y \
11-
cmake \
12-
openscenegraph=3.6.3 \
13-
gdal-bin \
14-
libgdal-dev \
15-
libgeos-dev \
16-
libsqlite3-dev \
17-
protobuf-compiler \
18-
libprotobuf-dev \
19-
libpoco-dev
20-
COPY . /code
21-
RUN cd /code && cmake -DCMAKE_BUILD_TYPE=Release . && make -j2 && make install && ldconfig
1+
# Build a Docker image to compile and build openscenegraph and osgearth with GL3
2+
3+
ARG UID=1000
4+
ARG GID=1000
5+
ARG HOME=/home/user
6+
7+
FROM ubuntu:focal AS devel
8+
9+
ARG DEBIAN_FRONTEND=noninteractive
10+
ARG HOME
11+
12+
# Install Dependencies
13+
RUN sed -i '/deb-src/s/^# //' /etc/apt/sources.list
14+
15+
RUN apt update && apt upgrade -y && \
16+
apt -y install software-properties-common apt-transport-https
17+
18+
RUN add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" && \
19+
apt update && apt upgrade -y
20+
21+
RUN apt install -y wget build-essential autoconf locate apt-file libspdlog-dev \
22+
git-all fuse libgl1-mesa-dev psmisc libpq-dev libssl-dev openssl libffi-dev \
23+
zlib1g-dev libdbus-1-3 desktop-file-utils \
24+
libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libilmbase-dev \
25+
libxcb-render-util0 libxcb-xinerama0 libxcb-composite0 libxcb-cursor0 \
26+
libxcb-damage0 libxcb-dpms0 libxcb-dri2-0 libxcb-dri3-0 libxcb-ewmh2 \
27+
libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-record0 libxcb-render0 \
28+
libxcb-res0 libxcb-screensaver0 libxcb-shape0 libxcb-shm0 libxcb-sync1 \
29+
libxcb-util1 libfontconfig libfontconfig1 libxcb-xkb1 libxkbcommon-x11-0 \
30+
libegl1-mesa-dev unixodbc-dev curl unzip tar libnss3 libxcomposite1 \
31+
libxcursor-dev libxtst-dev libxrandr-dev libgtk3.0-cil-dev libcurl4-openssl-dev \
32+
libomp-dev libstdc++6 ninja-build libboost-all-dev gdal-bin gdal-data \
33+
libgdal-dev libgeos-dev libgeos++-dev librocksdb-dev freeglut3-dev libglu1-mesa-dev \
34+
libx11-xcb-dev '^libxcb.*-dev' libxrender-dev libxi-dev libxkbcommon-dev \
35+
libxkbcommon-x11-dev libxinerama1 libxrandr2 protobuf-compiler libprotobuf-dev \
36+
ffmpeg libavformat-dev libavdevice-dev libavcodec-dev libavutil-dev libswscale-dev \
37+
libsdl1.2-dev libsdl2-dev libgtkgl2.0-dev libgtkglext1-dev libjasper-dev libasio-dev \
38+
dcmtk libvncserver-dev xfonts-scalable libocct-data-exchange-dev libocct-draw-dev \
39+
libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev \
40+
libocct-ocaf-dev libocct-visualization-dev libzip-dev libblosc-dev libpoco-dev \
41+
libgl-dev libsqlite3-dev nano libgstreamer1.0-0 gstreamer1.0-plugins-base \
42+
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev \
43+
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
44+
gstreamer1.0-libav gstreamer1.0-x gstreamer1.0-tools gstreamer1.0-gl gstreamer1.0-gtk3 \
45+
libgomp1 --fix-missing
46+
47+
# Update gcc for correct c++17 support
48+
ARG GCC=9
49+
RUN echo "Install GCC ${GCC}" && \
50+
apt -y install g++-${GCC} && \
51+
update-alternatives \
52+
--install /usr/bin/gcc gcc /usr/bin/gcc-${GCC} 60 \
53+
--slave /usr/bin/g++ g++ /usr/bin/g++-${GCC} \
54+
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-${GCC} \
55+
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-${GCC} \
56+
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${GCC} && \
57+
update-alternatives --config gcc
58+
59+
# Update cmake
60+
ARG CMAKE=3.26.3
61+
RUN wget -c -nv https://github.com/Kitware/CMake/releases/download/v${CMAKE}/cmake-${CMAKE}-Linux-x86_64.sh && \
62+
sh cmake-${CMAKE}-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir && \
63+
rm cmake-${CMAKE}-Linux-x86_64.sh
64+
65+
ENV LD_LIBRARY_PATH /usr/local/lib/:${LD_LIBRARY_PATH}
66+
67+
# Install Autodesk FBX
68+
RUN mkdir -p ${HOME}/Downloads && cd ${HOME}/Downloads && \
69+
wget -q --user-agent="Mozilla" https://damassets.autodesk.net/content/dam/autodesk/www/adn/fbx/2020-0-1/fbx202001_fbxsdk_linux.tar.gz && \
70+
tar xzvf fbx202001_fbxsdk_linux.tar.gz && \
71+
chmod a+x fbx202001_fbxsdk_linux
72+
73+
RUN mkdir -p /usr/fbx202001_fbxsdk_linux && \
74+
sh -c '/bin/echo -e "yes\nn" | ${HOME}/Downloads/fbx202001_fbxsdk_linux /usr/fbx202001_fbxsdk_linux' && \
75+
rm -rf ${HOME}/Downloads
76+
77+
ARG fbx_include="/usr/fbx202001_fbxsdk_linux/include"
78+
ARG fbx_lib_release="/usr/fbx202001_fbxsdk_linux/lib/gcc/x64/release/libfbxsdk.a"
79+
ARG fbx_lib_debug="/usr/fbx202001_fbxsdk_linux/lib/gcc/x64/debug/libfbxsdk.a"
80+
ARG fbx_xml_lib=libxml2.so
81+
ARG fbx_zlib_lib=libz.so
82+
83+
# Install OpenSceneGraph dependancies
84+
RUN apt update && apt upgrade -y && apt build-dep -y openscenegraph
85+
86+
ARG OSG_DIR=/opt/OpenSceneGraph
87+
ARG OSG_TAG=OpenSceneGraph-3.6.5
88+
WORKDIR ${HOME}/gitrepo
89+
RUN git clone -b ${OSG_TAG} https://github.com/openscenegraph/OpenSceneGraph.git && \
90+
mkdir OpenSceneGraph/build && cd OpenSceneGraph/build && \
91+
cmake -DOSG_GL3_AVAILABLE=ON -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF \
92+
-DOSG_GLES1_AVAILABLE=OFF -DOSG_GLES2_AVAILABLE=OFF -DOSG_GLES3_AVAILABLE=OFF \
93+
-DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DOSG_GL_FIXED_FUNCTION_AVAILABLE=OFF \
94+
-DOSG_GL_MATRICES_AVAILABLE=OFF -DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=OFF \
95+
-DOSG_GL_VERTEX_FUNCS_AVAILABLE=OFF -DOPENGL_PROFILE=GL3 \
96+
-DFBX_INCLUDE_DIR="$fbx_include" -DFBX_LIBRARY="$fbx_lib_release" \
97+
-DFBX_LIBRARY_DEBUG="$fbx_lib_debug" -DFBX_XML2_LIBRARY="$fbx_xml_lib" \
98+
-DFBX_ZLIB_LIBRARY="$fbx_zlib_lib" \
99+
-DCMAKE_INSTALL_PREFIX=${OSG_DIR} -DCMAKE_BUILD_TYPE=Release .. && \
100+
cmake --build . --parallel 4 --target install
101+
ENV LD_LIBRARY_PATH /opt/OpenSceneGraph/lib:$LD_LIBRARY_PATH
102+
103+
ARG OSGEARTH_DIR=/opt/osgearth
104+
COPY . ${HOME}/gitrepo/osgearth
105+
WORKDIR ${HOME}/gitrepo
106+
RUN sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_imgui/CMakeLists.txt && \
107+
sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_pick/CMakeLists.txt && \
108+
sed -i 's/OPENGL_gl_LIBRARY/OPENGL_LIBRARY/' ${HOME}/gitrepo/osgearth/src/applications/osgearth_collecttriangles/CMakeLists.txt
109+
110+
RUN mkdir -p ${HOME}/gitrepo/osgearth/build && cd ${HOME}/gitrepo/osgearth/build && \
111+
cmake -DOSG_DIR=${OSG_DIR} -DOpenGL_GL_PREFERENCE=GLVND \
112+
-DCMAKE_INSTALL_PREFIX=${OSGEARTH_DIR} -DCMAKE_BUILD_TYPE=Release .. && \
113+
cmake --build . --parallel 4 --target install
114+
115+
ENV OSG_DIR ${OSG_DIR}
116+
ENV OSGEARTH_DIR ${OSGEARTH_DIR}
117+
118+
# Delete all source files
119+
# RUN rm -rf ${HOME}/gitrepo
120+
121+
# Clean apt cache
122+
RUN apt clean && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
123+
124+
# Create user
125+
ARG UID
126+
ARG GID
127+
RUN groupadd -g "${GID}" user && \
128+
useradd --create-home --home-dir ${HOME} --no-log-init -u "${UID}" -g "${GID}" user &&\
129+
chown -R user:user ${HOME}
130+
131+
# Switch to user
132+
USER user
133+
134+
RUN mkdir -p ${HOME}/xdg
135+
ENV XDG_RUNTIME_DIR=${HOME}/xdg
136+
ENV __NV_PRIME_RENDER_OFFLOAD 1
137+
ENV __GLX_VENDOR_LIBRARY_NAME nvidia
138+
ENV LD_LIBRARY_PATH /usr/local/lib64:/opt/OpenSceneGraph/lib:/opt/osgearth/lib64:$LD_LIBRARY_PATH
139+
ENV PATH /usr/local/lib64:/opt/OpenSceneGraph/bin:/opt/osgearth/bin:$PATH
140+
141+
WORKDIR ${HOME}

docker-compose.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
services:
2+
OpenSceneGraph:
3+
image: 'osgearth:latest'
4+
container_name: osgearth
5+
runtime: nvidia
6+
cap_add:
7+
- SYS_ADMIN
8+
- SYS_RAWIO
9+
devices:
10+
- /dev/fuse:/dev/fuse
11+
security_opt:
12+
- apparmor:unconfined
13+
privileged: true
14+
volumes:
15+
- /tmp/.X11-unix:/tmp/.X11-unix
16+
environment:
17+
DISPLAY: $DISPLAY
18+
NVIDIA_DRIVER_CAPABILITIES: all
19+
HOSTNAME: osgearth
20+
stdin_open: true
21+
tty: true
22+
deploy:
23+
resources:
24+
reservations:
25+
devices:
26+
- driver: nvidia
27+
count: 1
28+
capabilities: [gpu]
29+
build:
30+
context: .
31+
dockerfile: Dockerfile
32+
args:
33+
- "UID=1000"
34+
- "GID=1000"

0 commit comments

Comments
 (0)