Skip to content

Commit 08d850f

Browse files
authored
Merge pull request #710 from nextcloud/feature/client-alma8
add Dockerfile for building Qt6.8 on EL8 (AlmaLinux)
2 parents 6da068c + 360740e commit 08d850f

File tree

1 file changed

+268
-0
lines changed

1 file changed

+268
-0
lines changed

client-appimage-qt6/Dockerfile.el8

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
FROM almalinux/8-base
2+
3+
MAINTAINER Desktop Team <desktop@nextcloud.com>
4+
5+
# Run 'docker build' with '--build-arg BUILD_QT=1' to build Qt from source (default: not set)
6+
ARG BUILD_QT
7+
8+
ENV VER_QT 6.8.1
9+
ENV VER_QT_DATE 2025-01-21
10+
ENV VER_OPENSSL 3.4.0
11+
ENV VER_LIBP11 libp11-0.4.12
12+
ENV VER_KFRAMEWORKS 6.10.0
13+
ENV VER_SQLITE 3460100
14+
ENV VER_SQLITE_YEAR 2024
15+
ENV VER_QTKEYCHAIN 0.14.3
16+
17+
ENV QT_ROOT /opt/qt
18+
19+
RUN dnf update -y && \
20+
dnf install -y epel-release && \
21+
dnf config-manager --set-enabled powertools && \
22+
dnf update -y && \
23+
dnf install -y \
24+
'@Development Tools' \
25+
alsa-lib-devel \
26+
at-spi2-core-devel \
27+
clang \
28+
clang-devel \
29+
cmake \
30+
cups-devel \
31+
curl \
32+
dbus-devel \
33+
dbus-x11 \
34+
desktop-file-utils \
35+
expat-devel \
36+
fontconfig-devel \
37+
freetype-devel \
38+
gcc-toolset-11 \
39+
gcc-toolset-11-libatomic-devel \
40+
git \
41+
glib2-devel \
42+
glx-utils \
43+
gperf \
44+
gstreamer1-devel \
45+
gstreamer1-plugins-bad-free-devel \
46+
gstreamer1-plugins-base-devel \
47+
gtk3-devel \
48+
harfbuzz-devel \
49+
inkscape \
50+
jsoncpp-devel \
51+
krb5-devel \
52+
lcms2-devel \
53+
libICE-devel \
54+
libSM-devel \
55+
libX11-devel \
56+
libXScrnSaver-devel \
57+
libXcomposite-devel \
58+
libXcursor-devel \
59+
libXdamage-devel \
60+
libXext-devel \
61+
libXfixes-devel \
62+
libXi-devel \
63+
libXinerama-devel \
64+
libXrandr-devel \
65+
libXrender-devel \
66+
libXtst-devel \
67+
libXv-devel \
68+
libcap-devel \
69+
libcmocka-devel \
70+
libdrm-devel \
71+
libevent-devel \
72+
libglvnd-devel \
73+
libinput-devel \
74+
libjpeg-turbo-devel \
75+
libmng-devel \
76+
libpng-devel \
77+
libpq-devel \
78+
libproxy-devel \
79+
libsecret-devel \
80+
libstdc++-static \
81+
libtiff-devel \
82+
libwebp-devel \
83+
libxcb-devel \
84+
libxkbcommon-devel \
85+
libxkbcommon-x11-devel \
86+
libxkbfile-devel \
87+
libxshmfence-devel \
88+
llvm-devel \
89+
mariadb-connector-c-devel \
90+
mesa-dri-drivers \
91+
mesa-libEGL-devel \
92+
mesa-libGL-devel \
93+
mesa-libgbm-devel \
94+
ninja-build \
95+
nss-devel \
96+
openal-soft-devel \
97+
opus-devel \
98+
pciutils-devel \
99+
perl \
100+
poppler-cpp-devel \
101+
pulseaudio-libs-devel \
102+
python3-sphinx \
103+
python3.12 \
104+
python3.12-pip \
105+
qt5-rpm-macros \
106+
re2-devel \
107+
systemd-devel \
108+
tar \
109+
time \
110+
unixODBC-devel \
111+
unzip \
112+
wayland-devel \
113+
wget \
114+
xcb-util-cursor-devel \
115+
xcb-util-devel \
116+
xcb-util-image-devel \
117+
xcb-util-keysyms-devel \
118+
xcb-util-renderutil-devel \
119+
xcb-util-wm-devel \
120+
xkeyboard-config-devel \
121+
xorg-x11-server-Xvfb \
122+
xorg-x11-xkb-utils-devel \
123+
xz \
124+
xz-devel \
125+
zlib-devel && \
126+
alternatives --set python /usr/bin/python3.12 && \
127+
alternatives --set python3 /usr/bin/python3.12 && \
128+
echo $'/usr/local/lib\n/usr/local/lib64' > /etc/ld.so.conf.d/local-lib.conf && ldconfig
129+
130+
ENV PKG_CONFIG_PATH="/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
131+
132+
###########################################################################
133+
134+
# Install openssl
135+
RUN cd /tmp && \
136+
wget https://www.openssl.org/source/openssl-${VER_OPENSSL}.tar.gz && \
137+
tar -xvf openssl-${VER_OPENSSL}.tar.gz && \
138+
cd openssl-${VER_OPENSSL} && \
139+
scl run gcc-toolset-11 -- ./config && \
140+
scl run gcc-toolset-11 -- make -j$(nproc) && \
141+
scl run gcc-toolset-11 -- make -j$(nproc) install && \
142+
cd .. && \
143+
rm -rf openssl*
144+
145+
# Install libp11 for PKCS#11 encryption
146+
RUN cd /tmp && \
147+
wget https://github.com/OpenSC/libp11/releases/download/${VER_LIBP11}/${VER_LIBP11}.tar.gz && \
148+
tar xvf ${VER_LIBP11}.tar.gz && \
149+
cd ${VER_LIBP11} && \
150+
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig && \
151+
scl run gcc-toolset-11 -- ./configure && \
152+
scl run gcc-toolset-11 -- make && \
153+
scl run gcc-toolset-11 -- make install && \
154+
cd .. && \
155+
rm -rf ${VER_LIBP11}
156+
157+
# Install sqlite3 from https://www.sqlite.org/amalgamation.html
158+
# https://www3.sqlite.org/src/dir?ci=tip&name=autoconf
159+
RUN cd /tmp && \
160+
wget https://www.sqlite.org/${VER_SQLITE_YEAR}/sqlite-autoconf-${VER_SQLITE}.tar.gz && \
161+
tar xvf sqlite-autoconf-${VER_SQLITE}.tar.gz && \
162+
cd sqlite-autoconf-${VER_SQLITE} && \
163+
scl run gcc-toolset-11 -- ./configure && \
164+
scl run gcc-toolset-11 -- make && \
165+
scl run gcc-toolset-11 -- make install && \
166+
cd .. && \
167+
rm -rf sqlite-autoconf-${VER_SQLITE}
168+
169+
# Ensure ld cache is up-to-date after building openssl/libp11/sqlite
170+
RUN ldconfig
171+
172+
###########################################################################
173+
174+
# Download Qt sources
175+
RUN if [ "$BUILD_QT" = "1" ] ; then echo Build Qt from source. && \
176+
git clone --depth=1 --recurse-submodules --shallow-submodules --branch=v${VER_QT} https://code.qt.io/qt/qt5.git qt6 \
177+
; fi
178+
179+
RUN if [ "$BUILD_QT" = "1" ] ; then \
180+
wget https://nodejs.org/dist/v18.20.1/node-v18.20.1-linux-x64.tar.xz && \
181+
tar xf node-v18.20.1-linux-x64.tar.xz \
182+
; fi
183+
184+
RUN if [ "$BUILD_QT" = "1" ]; then \
185+
pip3.12 install html5lib \
186+
; fi
187+
188+
# Build Qt
189+
RUN if [ "$BUILD_QT" = "1" ] ; then \
190+
mkdir qt6-${VER_QT}-linux-release && \
191+
cd qt6-${VER_QT}-linux-release && \
192+
export PATH=${PATH}:/node-v18.20.1-linux-x64/bin && \
193+
scl run gcc-toolset-11 -- /qt6/configure -release -nomake examples -nomake tests -opensource -confirm-license -openssl-linked -skip qt3d -- \
194+
-DCMAKE_INSTALL_PREFIX=${QT_ROOT} -DOPENSSL_ROOT_DIR=/usr/local/lib64 -DQT_BUILD_TESTS=OFF -DQT_BUILD_EXAMPLES=ON -DQT_FEATURE_thread=ON -DQT_FEATURE_xcb=ON -DQT_FEATURE_openssl_runtime=OFF -DQT_FEATURE_openssl_linked=ON && \
195+
scl run gcc-toolset-11 -- cmake --build . --parallel && \
196+
scl run gcc-toolset-11 -- cmake --install . \
197+
; fi
198+
199+
# Build Qt
200+
RUN if [ "$BUILD_QT" = "1" ] ; then \
201+
tar cfJ /qt-bin-${VER_QT}-openssl-${VER_OPENSSL}-linux-x86_64-$(date +"%Y-%m-%d").tar.xz ${QT_ROOT} \
202+
; fi
203+
204+
#
205+
# The following precompiled Qt package has been built with the commands above, using this Dockerfile.
206+
#
207+
# Since it takes a very long time to compile, the build on Docker Hub fails due to a timeout.
208+
#
209+
# This is why we're going to use our own precompiled version here.
210+
#
211+
# Run 'docker build' with '--build-arg BUILD_QT=1' to build Qt from source (default: not set)
212+
# on a dedicated build machine:
213+
#
214+
# docker build . -t client-5.15 . --build-arg BUILD_QT=1
215+
#
216+
217+
# Download Qt precompiled
218+
ENV QT_TARBALL qt-bin-${VER_QT}-openssl-${VER_OPENSSL}-linux-x86_64-${VER_QT_DATE}.tar.xz
219+
220+
RUN if [ "$BUILD_QT" != "1" ] ; then \
221+
wget https://download.nextcloud.com/desktop/development/qt/${QT_TARBALL} && \
222+
tar -xvf ${QT_TARBALL} && \
223+
rm ${QT_TARBALL} \
224+
; fi
225+
226+
###########################################################################
227+
228+
# Install QtKeychain
229+
RUN if [ "$BUILD_QT" != "1" ] ; then \
230+
cd /tmp && \
231+
git clone https://github.com/frankosterfeld/qtkeychain.git --depth 1 -b ${VER_QTKEYCHAIN} && \
232+
cd qtkeychain && \
233+
mkdir build && \
234+
cd build && \
235+
scl run gcc-toolset-11 -- cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_WITH_QT6=ON -DCMAKE_PREFIX_PATH=${QT_ROOT} .. && \
236+
scl run gcc-toolset-11 -- cmake --build . --parallel && \
237+
scl run gcc-toolset-11 -- cmake --install . && \
238+
cd .. && \
239+
rm -rf qtkeychain \
240+
; fi
241+
242+
# Install extra-cmake-modules
243+
RUN \
244+
cd /tmp && \
245+
git clone https://invent.kde.org/frameworks/extra-cmake-modules.git --depth 1 -b v${VER_KFRAMEWORKS} && \
246+
cd extra-cmake-modules && \
247+
mkdir build && \
248+
cd build && \
249+
scl run gcc-toolset-11 -- cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DQT_MAJOR_VERSION=6 -DCMAKE_PREFIX_PATH=${QT_ROOT} .. && \
250+
scl run gcc-toolset-11 -- cmake --build . --parallel && \
251+
scl run gcc-toolset-11 -- cmake --install . && \
252+
cd .. && \
253+
rm -rf extra-cmake-modules \
254+
;
255+
256+
# Install KArchive
257+
RUN \
258+
cd /tmp && \
259+
git clone https://invent.kde.org/frameworks/karchive.git --depth 1 -b v${VER_KFRAMEWORKS} && \
260+
cd karchive && \
261+
mkdir build && \
262+
cd build && \
263+
scl run gcc-toolset-11 -- cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DQT_MAJOR_VERSION=6 -DCMAKE_PREFIX_PATH=${QT_ROOT} .. && \
264+
scl run gcc-toolset-11 -- cmake --build . --parallel && \
265+
scl run gcc-toolset-11 -- cmake --install . && \
266+
cd .. && \
267+
rm -rf karchive \
268+
;

0 commit comments

Comments
 (0)