-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathDockerfile
More file actions
187 lines (173 loc) · 6.57 KB
/
Dockerfile
File metadata and controls
187 lines (173 loc) · 6.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
FROM ubuntu:22.04
# Install APT packages
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -q && apt-get -y -q install --no-install-recommends \
bzip2 \
ca-certificates \
ccache \
clang \
cmake \
curl \
dbus \
doxygen \
file \
g++ \
gettext \
git \
graphviz \
libc++-dev \
libc++abi-dev \
libcups2 \
libegl1-mesa \
libfbclient2 \
libffi-dev \
libfontconfig1 \
libfreetype6 \
libglu1-mesa-dev \
libpq5 \
libssl-dev \
libxcb-cursor0 \
libxcb-glx0 \
libxcb-icccm4 \
libxcb-icccm4 \
libxcb-image0 \
libxcb-keysyms1 \
libxcb-randr0 \
libxcb-render-util0 \
libxcb-shape0 \
libxcb-shm0 \
libxcb-xfixes0 \
libxcb-xinerama0 \
libxcb1 \
libxkbcommon-x11-0 \
make \
ninja-build \
p7zip-full \
software-properties-common \
wget \
xvfb \
zlib1g \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Rust
# Make .cargo/ writable for everyone to allow running the container as non-root.
ARG RUST_VERSION="1.92.0"
ENV RUSTUP_HOME="/.rustup" \
CARGO_HOME="/.cargo" \
PATH="/.cargo/bin:$PATH"
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
| sh -s -- -y --default-toolchain $RUST_VERSION --profile minimal --no-modify-path \
&& chmod 777 $RUSTUP_HOME \
&& chmod 777 $CARGO_HOME
# Install OpenCascade
ARG OCC_VERSION="7_9_1"
ARG OCC_URL="https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V$OCC_VERSION.tar.gz"
RUN wget -c "${OCC_URL}" -O /tmp.tar.gz \
&& tar -xzf /tmp.tar.gz -C /opt \
&& rm /tmp.tar.gz \
&& cd "/opt/OCCT-$OCC_VERSION" \
&& cmake . -G "Ninja" \
-DCMAKE_BUILD_TYPE=Release \
-DINSTALL_DIR=/usr \
-DBUILD_LIBRARY_TYPE=Shared \
-DBUILD_DOC_Overview=0 \
-DBUILD_MODULE_ApplicationFramework=0 \
-DBUILD_MODULE_DataExchange=1 \
-DBUILD_MODULE_Draw=0 \
-DBUILD_MODULE_FoundationClasses=0 \
-DBUILD_MODULE_ModelingAlgorithms=0 \
-DBUILD_MODULE_ModelingData=0 \
-DBUILD_MODULE_Visualization=0 \
-DUSE_DRACO=0 \
-DUSE_FREEIMAGE=0 \
-DUSE_FREETYPE=0 \
-DUSE_GLES2=0 \
-DUSE_OPENGL=0 \
-DUSE_OPENVR=0 \
-DUSE_RAPIDJSON=0 \
-DUSE_TBB=0 \
-DUSE_TK=0 \
-DUSE_VTK=0 \
&& ninja && ninja install \
&& cd / && rm -rf "/opt/OCCT-$OCC_VERSION"
# Install Qt Tools
ARG QT_VERSION="6.10.1"
ARG QT_BASEURL="https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_6101/qt6_6101"
ARG QT_URL="$QT_BASEURL/qt.qt6.6101.linux_gcc_64/6.10.1-0-202511161843"
ENV QTDIR="/opt/qt" \
PATH="/opt/qt/bin:$PATH" \
LD_LIBRARY_PATH="/opt/qt/lib:$LD_LIBRARY_PATH" \
PKG_CONFIG_PATH="/opt/qt/lib/pkgconfig:$PKG_CONFIG_PATH"
RUN mkdir /opt/qt \
&& wget -c "${QT_URL}qttools-Linux-RHEL_9_4-GCC-Linux-RHEL_9_4-X86_64.7z" -O /tmp.7z \
&& 7za x /tmp.7z -o/opt/qt \
&& rm /tmp.7z \
# The AppImage deployment tools might read some paths from the Qt libraries,
# but they are wrong so let's create a symlink to make them working anyway:
&& mkdir -p "/home/qt/work" \
&& ln -s "/opt/qt" "/home/qt/work/install"
# Install Qt Base
RUN wget -c "${QT_URL}qtbase-Linux-RHEL_9_4-GCC-Linux-RHEL_9_4-X86_64.7z" -O /tmp.7z \
&& 7za x /tmp.7z -o/opt/qt \
# Allow removing unneeded SQL plugins during CI job to fix deployment issue:
# https://forum.qt.io/topic/151452/what-qt-specific-files-exactly-do-i-need-to-add-when-deploying
&& chmod 777 $QTDIR/plugins/sqldrivers \
&& rm /tmp.7z
# Install Qt SVG
RUN wget -c "${QT_URL}qtsvg-Linux-RHEL_9_4-GCC-Linux-RHEL_9_4-X86_64.7z" -O /tmp.7z \
&& 7za x /tmp.7z -o/opt/qt \
&& rm /tmp.7z
# Install Qt Translations
RUN wget -c "${QT_URL}qttranslations-Linux-RHEL_9_4-GCC-Linux-RHEL_9_4-X86_64.7z" -O /tmp.7z \
&& 7za x /tmp.7z -o/opt/qt \
&& rm /tmp.7z
# Install Qt Image Formats Plugin
RUN wget -c "${QT_BASEURL}/qt.qt6.6101.addons.qtimageformats.linux_gcc_64/6.10.1-0-202511161843qtimageformats-Linux-RHEL_9_4-GCC-Linux-RHEL_9_4-X86_64.7z" -O /tmp.7z \
&& 7za x /tmp.7z -o/opt/qt \
&& rm /tmp.7z
# Install libicu
RUN wget -c "${QT_URL}icu-linux-Rhel8.6-x86_64.7z" -O /tmp.7z \
&& 7za x /tmp.7z -o/opt/qt/lib \
&& rm /tmp.7z
# Install linuxdeploy
ARG LINUXDEPLOY_URL="https://github.com/linuxdeploy/linuxdeploy/releases/download/1-alpha-20250213-2/linuxdeploy-x86_64.AppImage"
ARG LINUXDEPLOY_PLUGIN_APPIMAGE_URL="https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/1-alpha-20250213-1/linuxdeploy-plugin-appimage-x86_64.AppImage"
ARG LINUXDEPLOY_PLUGIN_QT_URL="https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/1-alpha-20250213-1/linuxdeploy-plugin-qt-x86_64.AppImage"
ENV APPIMAGE_EXTRACT_AND_RUN=1
RUN wget -c "$LINUXDEPLOY_URL" -O /usr/local/bin/linuxdeploy-x86_64.AppImage \
&& chmod a+x /usr/local/bin/linuxdeploy-x86_64.AppImage \
&& wget -c "$LINUXDEPLOY_PLUGIN_APPIMAGE_URL" -O /usr/local/bin/linuxdeploy-plugin-appimage-x86_64.AppImage \
&& chmod a+x /usr/local/bin/linuxdeploy-plugin-appimage-x86_64.AppImage \
&& wget -c "$LINUXDEPLOY_PLUGIN_QT_URL" -O /usr/local/bin/linuxdeploy-plugin-qt-x86_64.AppImage \
&& chmod a+x /usr/local/bin/linuxdeploy-plugin-qt-x86_64.AppImage \
&& linuxdeploy-x86_64.AppImage --list-plugins
# Install UV
# Set its python directory to a known, user-writable path to allow accessing the
# python versions installed during docker build from within CI runs which are
# run as non-root.
ARG UV_VERSION="0.9.21"
ARG UV_URL="https://github.com/astral-sh/uv/releases/download/$UV_VERSION/uv-x86_64-unknown-linux-gnu.tar.gz"
ENV UV_PYTHON_INSTALL_DIR="/.uv/python"
RUN wget -c "${UV_URL}" -O /tmp.tar.gz \
&& tar -xzf /tmp.tar.gz --strip-components=1 -C /usr/local/bin/ \
&& rm /tmp.tar.gz \
&& mkdir -p $UV_PYTHON_INSTALL_DIR && chmod 777 $UV_PYTHON_INSTALL_DIR
# Pre-install a Python version
ARG PYTHON_VERSION="3.13"
RUN uv python install $PYTHON_VERSION
# Install latest OpenSSL to avoid possible issues if servers some day stop
# working with an old OpenSSL library (as already happened in the past).
ARG OPENSSL_VERSION="3.6.0"
ENV LD_LIBRARY_PATH="/opt/openssl/lib:$LD_LIBRARY_PATH"
RUN apt-get remove -y libssl-dev \
&& wget -c "https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz" -O /tmp.tar.gz \
&& tar -zxf /tmp.tar.gz \
&& cd "./openssl-$OPENSSL_VERSION" \
&& ./config --prefix=/opt/openssl --libdir=lib --openssldir=/opt/openssl/etc/ssl \
&& make -j8 \
&& make install_sw \
&& cd .. \
&& rm -rf "./openssl-$OPENSSL_VERSION" \
&& rm /tmp.tar.gz
# LibrePCB's unittests expect that there is a USERNAME environment variable
ENV USERNAME="root"