diff --git a/docker/Dockerfile_debian_10 b/docker/Dockerfile_debian_10
index a96b009b769197a95e448747843ed1ac50c7cfe1..bded38b4e988e7bd5596424d74c0d5283dd2bf97 100644
--- a/docker/Dockerfile_debian_10
+++ b/docker/Dockerfile_debian_10
@@ -5,29 +5,21 @@ ENV DEBIAN_FRONTEND=noninteractive
 RUN apt-get clean
 RUN apt-get update && \
     apt-get install -y -o Acquire::Retries=10 \
-        ca-certificates \
         devscripts \
-        dirmngr \
-        gnupg \
+        equivs \
         wget
 
-RUN wget -O - https://dl.jami.net/public-key.gpg | \
-    tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
-RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/debian_10_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list"
-
 # add deb-src entries (needed for next step)
 RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
 RUN apt-get clean && apt-get update
 
+ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
+
+COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
+RUN /opt/prebuild-package-debian.sh qt-deps
+
 COPY packaging/rules/debian/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
+RUN /opt/prebuild-package-debian.sh jami-deps
 
 ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
-
 CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_debian_10_qt b/docker/Dockerfile_debian_10_qt
deleted file mode 100644
index 54e6b082072c2728eb26050b2bfe4118f6036f68..0000000000000000000000000000000000000000
--- a/docker/Dockerfile_debian_10_qt
+++ /dev/null
@@ -1,26 +0,0 @@
-FROM debian:buster
-
-ENV DEBIAN_FRONTEND=noninteractive
-
-RUN apt-get clean
-RUN apt-get update && \
-    apt-get install -y -o Acquire::Retries=10 \
-        devscripts \
-        wget
-
-# add/enable src repos (needed for next step)
-RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
-
-RUN apt-get clean && apt-get update
-COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
-
-ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh
-
-CMD /opt/build-package-debian-qt.sh
diff --git a/docker/Dockerfile_debian_testing b/docker/Dockerfile_debian_testing
index 9ddb8efed616babe032b1ff5055bdfed0e8a4325..3afff6ffa489572efd4a5169a74f63fad93f6524 100644
--- a/docker/Dockerfile_debian_testing
+++ b/docker/Dockerfile_debian_testing
@@ -5,29 +5,21 @@ ENV DEBIAN_FRONTEND=noninteractive
 RUN apt-get clean
 RUN apt-get update && \
     apt-get install -y -o Acquire::Retries=10 \
-        ca-certificates \
         devscripts \
-        dirmngr \
-        gnupg \
+        equivs \
         wget
 
-RUN wget -O - https://dl.jami.net/public-key.gpg | \
-    tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
-RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/debian_testing_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list"
-
 # add deb-src entries (needed for next step)
 RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
 RUN apt-get clean && apt-get update
 
+ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
+
+COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
+RUN /opt/prebuild-package-debian.sh qt-deps
+
 COPY packaging/rules/debian/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
+RUN /opt/prebuild-package-debian.sh jami-deps
 
 ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
-
 CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_debian_testing_qt b/docker/Dockerfile_debian_testing_qt
deleted file mode 100644
index e06d03da21c636e75f39d0fc5dab3f6dd7426fa2..0000000000000000000000000000000000000000
--- a/docker/Dockerfile_debian_testing_qt
+++ /dev/null
@@ -1,26 +0,0 @@
-FROM debian:testing
-
-ENV DEBIAN_FRONTEND=noninteractive
-
-RUN apt-get clean
-RUN apt-get update && \
-    apt-get install -y -o Acquire::Retries=10 \
-        devscripts \
-        wget
-
-# add/enable src repos (needed for next step)
-RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
-
-RUN apt-get clean && apt-get update
-COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
-
-ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh
-
-CMD /opt/build-package-debian-qt.sh
diff --git a/docker/Dockerfile_debian_unstable b/docker/Dockerfile_debian_unstable
index d7c23b4c701be3a2856abf8a3cbc1b427f913fff..2cd24427509a69aeb72f6445a1b7f24fc0d41a6d 100644
--- a/docker/Dockerfile_debian_unstable
+++ b/docker/Dockerfile_debian_unstable
@@ -5,29 +5,21 @@ ENV DEBIAN_FRONTEND=noninteractive
 RUN apt-get clean
 RUN apt-get update && \
     apt-get install -y -o Acquire::Retries=10 \
-        ca-certificates \
         devscripts \
-        dirmngr \
-        gnupg \
+        equivs \
         wget
 
-RUN wget -O - https://dl.jami.net/public-key.gpg | \
-    tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
-RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/debian_unstable_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list"
-
 # add deb-src entries (needed for next step)
 RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
 RUN apt-get clean && apt-get update
 
+ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
+
+COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
+RUN /opt/prebuild-package-debian.sh qt-deps
+
 COPY packaging/rules/debian/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
+RUN /opt/prebuild-package-debian.sh jami-deps
 
 ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
-
 CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_debian_unstable_qt b/docker/Dockerfile_debian_unstable_qt
deleted file mode 100644
index 0412961dc4ecf8efd4362f3409f2ff478c589f10..0000000000000000000000000000000000000000
--- a/docker/Dockerfile_debian_unstable_qt
+++ /dev/null
@@ -1,26 +0,0 @@
-FROM debian:unstable
-
-ENV DEBIAN_FRONTEND=noninteractive
-
-RUN apt-get clean
-RUN apt-get update && \
-    apt-get install -y -o Acquire::Retries=10 \
-        devscripts \
-        wget
-
-# add/enable src repos (needed for next step)
-RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
-
-RUN apt-get clean && apt-get update
-COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
-
-ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh
-
-CMD /opt/build-package-debian-qt.sh
diff --git a/docker/Dockerfile_ubuntu_18.04 b/docker/Dockerfile_ubuntu_18.04
index b7d2ede170ebb5bb412f38ef92da6d13d77b9f6a..2c26aeab2794037e0a152bbc069f9cd6399785f0 100644
--- a/docker/Dockerfile_ubuntu_18.04
+++ b/docker/Dockerfile_ubuntu_18.04
@@ -5,35 +5,26 @@ ENV DEBIAN_FRONTEND=noninteractive
 RUN apt-get clean
 RUN apt-get update && \
     apt-get install -y -o Acquire::Retries=10 \
-        ca-certificates \
         devscripts \
-        dirmngr \
         equivs \
         gcc-8 \
         g++-8 \
-        gnupg \
         wget
 
-RUN wget -O - https://dl.jami.net/public-key.gpg | \
-    tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
-RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/ubuntu_18.04_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list"
-
 # add deb-src entries (needed for next step)
 RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
 RUN apt-get clean && apt-get update
 
+ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
+
+COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
+RUN /opt/prebuild-package-debian.sh qt-deps
+
 COPY packaging/rules/debian/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
+RUN /opt/prebuild-package-debian.sh jami-deps
 
 RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50
 RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50
 
 ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
-
 CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_ubuntu_18.04_qt b/docker/Dockerfile_ubuntu_18.04_qt
deleted file mode 100644
index 774f56f3afb4efe02501d98c272cf9c6b599e49c..0000000000000000000000000000000000000000
--- a/docker/Dockerfile_ubuntu_18.04_qt
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM ubuntu:18.04
-
-ENV DEBIAN_FRONTEND=noninteractive
-
-RUN apt-get clean
-RUN apt-get update && \
-    apt-get install -y -o Acquire::Retries=10 \
-        devscripts \
-        equivs \
-        wget
-
-# add/enable src repos (needed for next step)
-RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
-
-RUN apt-get clean && apt-get update
-COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
-
-ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh
-
-CMD /opt/build-package-debian-qt.sh
diff --git a/docker/Dockerfile_ubuntu_20.04 b/docker/Dockerfile_ubuntu_20.04
index e3adb9b7453b5b021ef81a9e86c9bda7a863a13c..30ef21ddfaa282d2ffc089ffdb7df2a8931ffd72 100644
--- a/docker/Dockerfile_ubuntu_20.04
+++ b/docker/Dockerfile_ubuntu_20.04
@@ -5,30 +5,21 @@ ENV DEBIAN_FRONTEND=noninteractive
 RUN apt-get clean
 RUN apt-get update && \
     apt-get install -y -o Acquire::Retries=10 \
-        ca-certificates \
         devscripts \
-        dirmngr \
         equivs \
-        gnupg \
         wget
 
-RUN wget -O - https://dl.jami.net/public-key.gpg | \
-    tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
-RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/ubuntu_20.04_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list"
-
 # add deb-src entries (needed for next step)
 RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
 RUN apt-get clean && apt-get update
 
+ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
+
+COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
+RUN /opt/prebuild-package-debian.sh qt-deps
+
 COPY packaging/rules/debian/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
+RUN /opt/prebuild-package-debian.sh jami-deps
 
 ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
-
 CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_ubuntu_20.04_qt b/docker/Dockerfile_ubuntu_20.04_qt
deleted file mode 100644
index 12b5fc510b7ddce6ec9a88935e65ae886e4d0957..0000000000000000000000000000000000000000
--- a/docker/Dockerfile_ubuntu_20.04_qt
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM ubuntu:20.04
-
-ENV DEBIAN_FRONTEND=noninteractive
-
-RUN apt-get clean
-RUN apt-get update && \
-    apt-get install -y -o Acquire::Retries=10 \
-        devscripts \
-        equivs \
-        wget
-
-# add/enable src repos (needed for next step)
-RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
-
-RUN apt-get clean && apt-get update
-COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
-
-ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh
-
-CMD /opt/build-package-debian-qt.sh
diff --git a/docker/Dockerfile_ubuntu_20.10 b/docker/Dockerfile_ubuntu_20.10
index db33b2937fb360396723c762a46e338b4a4f8270..987ae5cfd645d2a1a8eee802ce7c3674f8eb5eda 100644
--- a/docker/Dockerfile_ubuntu_20.10
+++ b/docker/Dockerfile_ubuntu_20.10
@@ -5,30 +5,21 @@ ENV DEBIAN_FRONTEND=noninteractive
 RUN apt-get clean
 RUN apt-get update && \
     apt-get install -y -o Acquire::Retries=10 \
-        ca-certificates \
         devscripts \
-        dirmngr \
         equivs \
-        gnupg \
         wget
 
-RUN wget -O - https://dl.jami.net/public-key.gpg | \
-    tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
-RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/ubuntu_20.10_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list"
-
 # add deb-src entries (needed for next step)
 RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
 RUN apt-get clean && apt-get update
 
+ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
+
+COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
+RUN /opt/prebuild-package-debian.sh qt-deps
+
 COPY packaging/rules/debian/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
+RUN /opt/prebuild-package-debian.sh jami-deps
 
 ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
-
 CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_ubuntu_20.10_qt b/docker/Dockerfile_ubuntu_20.10_qt
deleted file mode 100644
index 46adee1df9f87226dfc5723b0cfd31a10cd12cf5..0000000000000000000000000000000000000000
--- a/docker/Dockerfile_ubuntu_20.10_qt
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM ubuntu:20.10
-
-ENV DEBIAN_FRONTEND=noninteractive
-
-RUN apt-get clean
-RUN apt-get update && \
-    apt-get install -y -o Acquire::Retries=10 \
-        devscripts \
-        equivs \
-        wget
-
-# add/enable src repos (needed for next step)
-RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
-
-RUN apt-get clean && apt-get update
-COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
-
-ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh
-
-CMD /opt/build-package-debian-qt.sh
diff --git a/docker/Dockerfile_ubuntu_21.04 b/docker/Dockerfile_ubuntu_21.04
index cf604f3cd5702ca18a0ad47f9b19f44ba3bd2624..7cf77ae7c9fad9958acc96347ce6aa4e32382298 100644
--- a/docker/Dockerfile_ubuntu_21.04
+++ b/docker/Dockerfile_ubuntu_21.04
@@ -5,30 +5,21 @@ ENV DEBIAN_FRONTEND=noninteractive
 RUN apt-get clean
 RUN apt-get update && \
     apt-get install -y -o Acquire::Retries=10 \
-        ca-certificates \
         devscripts \
-        dirmngr \
         equivs \
-        gnupg \
         wget
 
-RUN wget -O - https://dl.jami.net/public-key.gpg | \
-    tee /usr/share/keyrings/jami-archive-keyring.gpg > /dev/null
-RUN sh -c "echo 'deb [signed-by=/usr/share/keyrings/jami-archive-keyring.gpg] https://dl.jami.net/nightly/ubuntu_21.04_qt/ jami main' > /etc/apt/sources.list.d/libqt-jami.list"
-
 # add deb-src entries (needed for next step)
 RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
 RUN apt-get clean && apt-get update
 
+ADD scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
+
+COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
+RUN /opt/prebuild-package-debian.sh qt-deps
+
 COPY packaging/rules/debian/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
+RUN /opt/prebuild-package-debian.sh jami-deps
 
 ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
-
-CMD /opt/build-package-debian.sh
\ No newline at end of file
+CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_ubuntu_21.04_qt b/docker/Dockerfile_ubuntu_21.04_qt
deleted file mode 100644
index 0ea99c89f26cf15874dca2239ddfc3b108d11cfa..0000000000000000000000000000000000000000
--- a/docker/Dockerfile_ubuntu_21.04_qt
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM ubuntu:21.04
-
-ENV DEBIAN_FRONTEND=noninteractive
-
-RUN apt-get clean
-RUN apt-get update && \
-    apt-get install -y -o Acquire::Retries=10 \
-        devscripts \
-        equivs \
-        wget
-
-# add/enable src repos (needed for next step)
-RUN sed -n '/^deb\s/s//deb-src /p' /etc/apt/sources.list > /etc/apt/sources.list.d/deb-src.list
-
-RUN apt-get clean && apt-get update
-COPY packaging/rules/debian-qt/* /tmp/builddeps/debian/
-RUN cd /tmp/builddeps && \
-    apt-get update; \
-    mk-build-deps \
-        --remove --install \
-        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
-        "debian/control"; \
-    cd / && rm -rf /tmp/builddeps
-
-ADD scripts/build-package-debian-qt.sh /opt/build-package-debian-qt.sh
-
-CMD /opt/build-package-debian-qt.sh
diff --git a/scripts/build-package-debian-qt.sh b/scripts/build-package-debian-qt.sh
deleted file mode 100755
index 2852cbf74e2952a87405d141b4dc6b24372618f8..0000000000000000000000000000000000000000
--- a/scripts/build-package-debian-qt.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright (C) 2021 Savoir-faire Linux Inc.
-#
-# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-# This script is used in the packaging containers to build a snap
-# package on an ubuntu base distro.
-
-
-set -e
-
-PKG_DIR="packaging/rules/debian-qt"
-
-cache_dir=/opt/ring-contrib
-temp_dir=$(mktemp -d)
-
-mkdir /opt/libqt-jami-build
-cd /opt/libqt-jami-build
-
-qt_version=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}
-tarball_name=qt-everywhere-src-${qt_version}.tar.xz
-cached_tarball=$cache_dir/$tarball_name
-qt_base_url=https://download.qt.io/archive/qt/${QT_MAJOR}.${QT_MINOR}/${qt_version}/single
-
-if ! [[ -d $cache_dir && -w $cache_dir ]]; then
-    echo "error: $cache_dir does not exist or is not writable"
-    exit 1
-fi
-
-if ! [ -f "$cached_tarball" ]; then
-    (
-        cd "$temp_dir"
-        wget "$qt_base_url/$tarball_name"
-        echo -n "${QT_TARBALL_CHECKSUM}  $tarball_name" | sha256sum -c - || \
-            (echo "Qt tarball checksum mismatch; quitting" && exit 1)
-        flock "${cached_tarball}.lock" mv "$tarball_name" "$cached_tarball"
-    )
-    rm -rf "$temp_dir"
-fi
-
-cp "$cached_tarball" libqt-jami_${qt_version}.orig.tar.xz
-tar xvf libqt-jami_${qt_version}.orig.tar.xz
-mv qt-everywhere-src-${qt_version} libqt-jami-${qt_version}
-cd libqt-jami-${qt_version}
-
-# import the debian folder
-cp --verbose -r /opt/ring-project-ro/${PKG_DIR} debian
-
-# create changelog file
-DEBEMAIL="The Jami project <jami@gnu.org>" dch --create --package libqt-jami --newversion ${DEBIAN_VERSION} "New libqt-jami release"
-DEBEMAIL="The Jami project <jami@gnu.org>" dch --release --distribution "unstable" debian/changelog
-
-DPKG_BUILD_OPTIONS=""
-# Set the host architecture as armhf and add some specific architecture
-# options to the package builder.
-if grep -q "raspbian_10_qt_armhf" <<< "${DISTRIBUTION}"; then
-    echo "Adding armhf as the host architecture."
-    export HOST_ARCH=arm-linux-gnueabihf
-    DPKG_BUILD_OPTIONS="${DPKG_BUILD_OPTIONS} -a armhf"
-fi
-
-# build and package qt
-dpkg-buildpackage -uc -us ${DPKG_BUILD_OPTIONS}
-
-# move the artifacts to output
-cd ..
-mv *.orig.tar* *.debian.tar* *deb *changes *dsc /opt/output
-chown -R ${CURRENT_UID}:${CURRENT_GID} /opt/output/
diff --git a/scripts/build-package-debian.sh b/scripts/build-package-debian.sh
index 71d6fb8acfcac1d7c2326cc3f163c175a8361862..fc99a94e13e3b5c0a67e16518dedab56127a995e 100755
--- a/scripts/build-package-debian.sh
+++ b/scripts/build-package-debian.sh
@@ -3,6 +3,8 @@
 # Copyright (C) 2016-2021 Savoir-faire Linux Inc.
 #
 # Author: Alexandre Viau <alexandre.viau@savoirfairelinux.com>
+# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
+# Author: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -31,7 +33,71 @@ if grep -q "raspbian_10_armhf" <<< "${DISTRIBUTION}"; then
     DPKG_BUILD_OPTIONS="${DPKG_BUILD_OPTIONS} -a armhf"
 fi
 
-# Setup work directory.
+cache_packaging=/opt/cache-packaging/${DISTRIBUTION}
+deb_arch=$(dpkg --print-architecture)
+qt_deb_name=libqt-jami_${DEBIAN_QT_VERSION}_${deb_arch}.deb
+qt_deb_path=${cache_packaging}/${qt_deb_name}
+
+if [ ! -f "${qt_deb_path}" ] || [ "${FORCE_REBUILD_QT}" = "true" ]; then
+    # we need to build Qt
+
+    cache_dir=/opt/ring-contrib
+    temp_dir=$(mktemp -d)
+
+    mkdir /opt/libqt-jami-build
+    cd /opt/libqt-jami-build
+
+    qt_version=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}
+    tarball_name=qt-everywhere-src-${qt_version}.tar.xz
+    cached_tarball="${cache_dir}/${tarball_name}"
+    qt_base_url=https://download.qt.io/archive/qt/${QT_MAJOR}.${QT_MINOR}/${qt_version}/single
+
+    if [ ! -d "${cache_dir}" ] || [ ! -w "${cache_dir}" ]; then
+        echo "error: $cache_dir does not exist or is not writable"
+        exit 1
+    fi
+
+    if [ ! -f "${cached_tarball}" ]; then
+        (
+            cd "${temp_dir}"
+            wget "${qt_base_url}/${tarball_name}"
+            echo -n "${QT_TARBALL_CHECKSUM}  ${tarball_name}" | sha256sum -c - || \
+                (echo "Qt tarball checksum mismatch; quitting" && exit 1)
+            flock "${cached_tarball}.lock" mv "${tarball_name}" "${cached_tarball}"
+        )
+        rm -rf "${temp_dir}"
+    fi
+
+    cp "${cached_tarball}" libqt-jami_${qt_version}.orig.tar.xz
+    tar xvf libqt-jami_${qt_version}.orig.tar.xz
+    mv qt-everywhere-src-${qt_version} libqt-jami-${qt_version}
+    cd libqt-jami-${qt_version}
+
+    # import the debian folder
+    cp --verbose -r /opt/ring-project-ro/packaging/rules/debian-qt debian
+
+    # create changelog file
+    DEBEMAIL="The Jami project <jami@gnu.org>" dch --create \
+            --package libqt-jami \
+            --newversion ${DEBIAN_QT_VERSION} "New libqt-jami release"
+    DEBEMAIL="The Jami project <jami@gnu.org>" dch --release \
+            --distribution "unstable" debian/changelog
+
+    # build and package qt
+    dpkg-buildpackage -uc -us ${DPKG_BUILD_OPTIONS}
+
+    # copy the built deb to cache
+    mkdir -p ${cache_packaging}/
+    cp ../${qt_deb_name} ${qt_deb_path}
+fi
+
+# install libqt-jami from cache
+apt-get install -y ${qt_deb_path}
+
+# copy libqt-jami to output
+cp ${qt_deb_path} /opt/output/
+
+# Set up work directory.
 mkdir -p /jami/work && cd /jami/work
 
 # Create a changelog file, required by dpkg-buildpackage.
diff --git a/scripts/deploy-packages.sh b/scripts/deploy-packages.sh
index ef82d8d82509bf9c10d26a70771bfb4017d8f669..a713671a1b6ba38b70bc8777975fedc153f58dae 100755
--- a/scripts/deploy-packages.sh
+++ b/scripts/deploy-packages.sh
@@ -31,39 +31,10 @@ set -e
 ## Debian / Ubuntu packaging ##
 ###############################
 
-function fetch_qt_deb()
-{
-    if [ -f "${SSH_IDENTITY_FILE}" ];
-    then
-        export RSYNC_RSH="ssh -i ${SSH_IDENTITY_FILE}"
-    fi
-
-    echo "#####################"
-    echo "## fetching qt deb ##"
-    echo "#####################"
-    echo "Using RSYNC_RSH='${RSYNC_RSH}'"
-    rsync --archive --verbose \
-          ${REMOTE_REPOSITORY_LOCATION}/${DISTRIBUTION}_qt/pool/main/libq/libqt-jami/*.deb \
-          ${DISTRIBUTION_REPOSITORY_FOLDER}_qt/
-}
-
-# True if $DISTRIBUTION ends by _qt
-is_distribution_qt() {
-    [[ $DISTRIBUTION =~ _qt$ ]]
-}
-
 function package_deb()
 {
     DISTRIBUTION_REPOSITORY_FOLDER=$(realpath repositories)/${DISTRIBUTION}
     mkdir -p ${DISTRIBUTION_REPOSITORY_FOLDER}
-    mkdir -p ${DISTRIBUTION_REPOSITORY_FOLDER}_qt
-
-    ###########################################################
-    ## fetch qt deb (if not currently building a qt package) ##
-    ###########################################################
-    if ! is_distribution_qt; then
-        fetch_qt_deb
-    fi
 
     ##################################################
     ## Create local repository for the given distro ##
@@ -98,9 +69,6 @@ EOF
     ## Add packages to the repository ##
     ####################################
     packages="packages/${DISTRIBUTION}*/*.deb"
-    if ! is_distribution_qt; then
-        packages+=" ${DISTRIBUTION_REPOSITORY_FOLDER}_qt/*.deb"
-    fi
 
     for package in ${packages}; do
         # Sign the deb
diff --git a/scripts/make-packaging-target.py b/scripts/make-packaging-target.py
index 60a3f136cb18d32b0c32805420b12b9f64473c57..b6c4b44ffdd5919c1024ef8113b33dfce2a45f54 100755
--- a/scripts/make-packaging-target.py
+++ b/scripts/make-packaging-target.py
@@ -51,6 +51,7 @@ PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\
     -e RELEASE_VERSION=$(RELEASE_VERSION) \\
     -e RELEASE_TARBALL_FILENAME=$(RELEASE_TARBALL_FILENAME) \\
     -e DEBIAN_VERSION=%(version)s \\
+    -e DEBIAN_QT_VERSION=%(version_qt)s \\
     -e CURRENT_UID=$(CURRENT_UID) \\
     -e CURRENT_GID=$(CURRENT_GID) \\
     -e DISTRIBUTION=%(distribution)s \\
@@ -91,32 +92,32 @@ RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS = (
     '--privileged')
 
 DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS = (
-    '-e QT_JAMI_PREFIX=$(QT_JAMI_PREFIX) '
-    '--privileged '
-    '--security-opt apparmor=docker-default ')
-
-DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT = (
     '-e QT_JAMI_PREFIX=$(QT_JAMI_PREFIX) '
     '-e QT_MAJOR=$(QT_MAJOR) '
     '-e QT_MINOR=$(QT_MINOR) '
     '-e QT_PATCH=$(QT_PATCH) '
     '-e QT_TARBALL_CHECKSUM=$(QT_TARBALL_CHECKSUM) '
+    '-e FORCE_REBUILD_QT=$(FORCE_REBUILD_QT) '
     '-v /opt/ring-contrib:/opt/ring-contrib '
-    '--privileged --security-opt apparmor=docker-default')
+    '--privileged '
+    '--security-opt apparmor=docker-default ')
 
 
 def generate_target(distribution, output_file, options='', docker_image='',
-                    version='', docker_build_args=''):
+                    version='', version_qt='', docker_build_args=''):
     if (docker_image == ''):
         docker_image = distribution
     if (version == ''):
         version = "$(DEBIAN_VERSION)"
+    if (version_qt == ''):
+        version_qt = "$(DEBIAN_QT_VERSION)"
     return target_template % {
         "distribution": distribution,
         "docker_image": docker_image,
         "output_file": output_file,
         "options": options,
         "version": version,
+        "version_qt": version_qt,
         "docker_build_args": docker_build_args,
     }
 
@@ -126,7 +127,8 @@ def run_generate(parsed_args):
                           parsed_args.output_file,
                           parsed_args.options,
                           parsed_args.docker_image,
-                          parsed_args.version))
+                          parsed_args.version,
+                          parsed_args.version_qt))
 
 
 def run_generate_all(parsed_args):
@@ -137,34 +139,16 @@ def run_generate_all(parsed_args):
             "output_file": "$(DEBIAN_DSC_FILENAME)",
             "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
         },
-        {
-            "distribution": "debian_10_qt",
-            "output_file": "$(DEBIAN_QT_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT,
-            "version": "$(DEBIAN_QT_VERSION)",
-        },
         {
             "distribution": "debian_testing",
             "output_file": "$(DEBIAN_DSC_FILENAME)",
             "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
         },
-        {
-            "distribution": "debian_testing_qt",
-            "output_file": "$(DEBIAN_QT_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT,
-            "version": "$(DEBIAN_QT_VERSION)",
-        },
         {
             "distribution": "debian_unstable",
             "output_file": "$(DEBIAN_DSC_FILENAME)",
             "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
         },
-        {
-            "distribution": "debian_unstable_qt",
-            "output_file": "$(DEBIAN_QT_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT,
-            "version": "$(DEBIAN_QT_VERSION)",
-        },
         # Raspbian
         {
             "distribution": "raspbian_10_armhf",
@@ -175,47 +159,23 @@ def run_generate_all(parsed_args):
         {
             "distribution": "ubuntu_18.04",
             "output_file": "$(DEBIAN_DSC_FILENAME)",
-            "options": "-e QT_JAMI_PREFIX=$(QT_JAMI_PREFIX)",
-        },
-        {
-            "distribution": "ubuntu_18.04_qt",
-            "output_file": "$(DEBIAN_QT_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT,
-            "version": "$(DEBIAN_QT_VERSION)",
+            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
         },
         {
             "distribution": "ubuntu_20.04",
             "output_file": "$(DEBIAN_DSC_FILENAME)",
             "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
         },
-        {
-            "distribution": "ubuntu_20.04_qt",
-            "output_file": "$(DEBIAN_QT_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT,
-            "version": "$(DEBIAN_QT_VERSION)",
-        },
         {
             "distribution": "ubuntu_20.10",
             "output_file": "$(DEBIAN_DSC_FILENAME)",
             "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
         },
-        {
-            "distribution": "ubuntu_20.10_qt",
-            "output_file": "$(DEBIAN_QT_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT,
-            "version": "$(DEBIAN_QT_VERSION)",
-        },
         {
             "distribution": "ubuntu_21.04",
             "output_file": "$(DEBIAN_DSC_FILENAME)",
             "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
         },
-        {
-            "distribution": "ubuntu_21.04_qt",
-            "output_file": "$(DEBIAN_QT_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS_QT,
-            "version": "$(DEBIAN_QT_VERSION)",
-        },
         # Fedora
         {
             "distribution": "fedora_32",
@@ -284,6 +244,7 @@ def parse_args():
     ap.add_argument('--options', default='')
     ap.add_argument('--docker_image', default='')
     ap.add_argument('--version', default='')
+    ap.add_argument('--version_qt', default='')
 
     parsed_args = ap.parse_args()
 
diff --git a/scripts/prebuild-package-debian.sh b/scripts/prebuild-package-debian.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ba0bce80f1771c875043df1d55fb55800de3e075
--- /dev/null
+++ b/scripts/prebuild-package-debian.sh
@@ -0,0 +1,86 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2021 Savoir-faire Linux Inc.
+#
+# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# This script is used in the packaging containers to build packages on
+# debian-based distros.
+
+set -e
+
+DPKG_BUILD_OPTIONS=""
+# Set the host architecture as armhf and add some specific architecture
+# options to the package builder.
+if grep -q "raspbian_10_armhf" <<< "${DISTRIBUTION}"; then
+    echo "Adding armhf as the host architecture."
+    export HOST_ARCH=arm-linux-gnueabihf
+    DPKG_BUILD_OPTIONS="${DPKG_BUILD_OPTIONS} -a armhf"
+fi
+
+install_deps()
+{
+    apt-get update
+    mk-build-deps \
+        --remove --install \
+        --tool "apt-get -y --no-install-recommends -o Acquire::Retries=10" \
+        "debian/control"
+}
+
+install_dummy()
+{
+    cat <<EOF > dummy-libqt-jami.equivs
+Package: libqt-jami
+Version: 1.0
+Maintainer: The Jami project <jami@gnu.org>
+Architecture: all
+Description: Dummy libqt-jami package
+EOF
+    equivs-build dummy-libqt-jami.equivs
+    dpkg -i libqt-jami_1.0_all.deb
+}
+
+remove_dummy()
+{
+    dpkg -r libqt-jami
+}
+
+case "$1" in
+    qt-deps)
+        (
+            cd /tmp/builddeps
+            install_deps
+            dpkg -r libqt-jami-build-deps
+        )
+        rm -rf /tmp/builddeps
+        exit 0
+        ;;
+    jami-deps)
+        (
+            cd /tmp/builddeps
+            install_dummy
+            install_deps
+            dpkg -r jami-build-deps
+            remove_dummy
+        )
+        rm -rf /tmp/builddeps
+        exit 0
+        ;;
+    *)
+        printf "Usage: %s {qt-deps|jami-deps}\n" "$0"
+        exit 1
+        ;;
+esac