diff --git a/Jenkinsfile b/Jenkinsfile
index 715925fe097fcfde652f2e819590ce54111b934f..8494fcf02d2f6d804e9a26b5b649237821e57445 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -63,7 +63,7 @@ pipeline {
         string(name: 'PACKAGING_TARGETS',
                defaultValue: '',
                description: 'A whitespace-separated list of packaging ' +
-               'targets, e.g. "package-debian_10 package-snap". ' +
+               'targets, e.g. "debian_10 snap". ' +
                'When left unspecified, all the packaging targets are built.')
     }
 
@@ -116,9 +116,6 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client
         stage('Build packages') {
             environment {
                 DISABLE_CONTRIB_DOWNLOADS = 'TRUE'
-                // The following password is used to register with the
-                // RHEL subscription-manager tool, required to build on RHEL.
-                PASS = credentials('developers-redhat-com')
             }
             steps {
                 script {
@@ -147,6 +144,7 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client
                                     catchError(buildResult: 'FAILURE',
                                                stageResult: 'FAILURE') {
                                         sh """
+                                           echo Building on node \$NODE_NAME
                                            tar xf *.tar.gz --strip-components=1
                                            make ${target}
                                            """
@@ -181,10 +179,9 @@ See https://wiki.savoirfairelinux.com/wiki/Jenkins.jami.net#Configuration_client
                             echo "Failed to unstash ${target}, skipping..."
                             return
                         }
-                        def distribution = target - ~/^package-/
-                        echo "Deploying packages for ${distribution}..."
+                        echo "Deploying packages for ${target}..."
                         sh """scripts/deploy-packages.sh \
-  --distribution=${distribution} \
+  --distribution=${target} \
   --keyid="${RING_PUBLIC_KEY_FINGERPRINT}" \
   --snapcraft-login="${SNAPCRAFT_KEY}" \
   --remote-ssh-identity-file="${SSH_PRIVATE_KEY}" \
diff --git a/Makefile b/Makefile
index 71a907b776d837477085d2d7593bbd44631a6e54..5e8cee2a09554c23a64a12892f66d1d1e8898e5e 100644
--- a/Makefile
+++ b/Makefile
@@ -49,13 +49,13 @@ DEBIAN_VERSION:=$(RELEASE_VERSION)~dfsg1-1
 DEBIAN_DSC_FILENAME:=jami_$(DEBIAN_VERSION).dsc
 
 # Qt versions
-QT_MAJOR:=5
-QT_MINOR:=15
-QT_PATCH:=2
-QT_TARBALL_CHECKSUM:="3a530d1b243b5dec00bc54937455471aaa3e56849d2593edb8ded07228202240"
-DEBIAN_QT_VERSION:=$(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-1
-DEBIAN_QT_DSC_FILENAME:=libqt-jami_$(DEBIAN_QT_VERSION).dsc
-QT_JAMI_PREFIX:="/usr/lib/libqt-jami"
+QT_MAJOR := 5
+QT_MINOR := 15
+QT_PATCH := 2
+QT_TARBALL_CHECKSUM := 3a530d1b243b5dec00bc54937455471aaa3e56849d2593edb8ded07228202240
+DEBIAN_QT_VERSION := $(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-1
+DEBIAN_QT_DSC_FILENAME := libqt-jami_$(DEBIAN_QT_VERSION).dsc
+QT_JAMI_PREFIX := /usr/lib/libqt-jami
 
 #####################
 ## Other variables ##
@@ -152,16 +152,87 @@ endif
 ## Packaging targets ##
 #######################
 
+
+#
+# Traditionally built packages (in Docker containers).
+#
+DISTRIBUTIONS := \
+	debian_10 \
+	debian_11 \
+	debian_testing \
+	debian_unstable \
+	raspbian_10_armhf \
+	ubuntu_18.04 \
+	ubuntu_20.04 \
+	ubuntu_21.04 \
+	fedora_33 \
+	fedora_34 \
+	opensuse-leap_15.2 \
+	opensuse-leap_15.3 \
+	opensuse-tumbleweed \
+	snap
+
 IS_SHELL_INTERACTIVE := $(shell [ -t 0 ] && echo yes)
 
 # The following Make variable can be used to provide extra arguments
 # used with the 'docker run' commands invoked to build the packages.
 DOCKER_RUN_EXTRA_ARGS =
 
-# Append the output of make-packaging-target to this Makefile
-# see Makefile.packaging.distro_targets
-$(shell scripts/make-packaging-target.py --generate-all > Makefile.packaging.distro_targets)
-include Makefile.packaging.distro_targets
+# This function is used to produce the rules of the packaging targets
+# that rely on Docker.
+# Arg1: The name-version string of the distribution (e.g., ubuntu-18.04).
+# Arg2: Extra arguments to pass to 'docker build'.
+# Arg3: Extra arguments to pass to 'docker run'.
+define make-docker-package-target
+$(1)-docker-image-name := jami-packaging-$(1)
+$(1)-docker-image-file := .docker-image-$$($(1)-docker-image-name)
+$(1)-docker-run-command := docker run \
+  --rm --privileged --security-opt apparmor=docker-default \
+  -e RELEASE_VERSION="$(RELEASE_VERSION)" \
+  -e RELEASE_TARBALL_FILENAME="$(RELEASE_TARBALL_FILENAME)" \
+  -e DEBIAN_VERSION="$(DEBIAN_VERSION)" \
+  -e DEBIAN_QT_VERSION="$(DEBIAN_QT_VERSION)" \
+  -e CURRENT_UID="$(CURRENT_UID)" \
+  -e CURRENT_GID="$(CURRENT_GID)" \
+  -e DISTRIBUTION="$(1)" \
+  -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)" \
+  -e SNAP_PKG_NAME="$(or $(SNAP_PKG_NAME),jami)" \
+  -e TARBALLS="$(TARBALLS)" \
+  -v '$(TARBALLS)':'$(TARBALLS)' \
+  -v '$(CURDIR)/$(RELEASE_TARBALL_FILENAME)':'/src/$(RELEASE_TARBALL_FILENAME)' \
+  -v '$(CURDIR)/packages/$(1)':/opt/output \
+  -t $(and $(IS_SHELL_INTERACTIVE),-i) \
+  $(3) \
+  "$$($(1)-docker-image-name)"
+
+$$($(1)-docker-image-file): docker/Dockerfile_$(1)
+	docker build \
+	  -t $$($(1)-docker-image-name) \
+	  -f docker/Dockerfile_$(1) $(2) $(CURDIR) && \
+	touch "$$@"
+
+packages/$(1)/.packages-built: $(RELEASE_TARBALL_FILENAME) $$($(1)-docker-image-file)
+	mkdir -p "$$$$(dirname "$$@")" && \
+	$$($(1)-docker-run-command) && \
+	touch "$$@"
+
+.PHONY: $(1)
+$(1): packages/$(1)/.packages-built
+PACKAGE-TARGETS += $(1)
+
+.PHONY: $(1)-interactive
+$(1)-interactive: $(RELEASE_TARBALL_FILENAME) $$($(1)-docker-image-file)
+	$$($(1)-docker-run-command) bash
+
+endef
+
+$(foreach target,$(DISTRIBUTIONS),\
+	$(eval $(call make-docker-package-target,$(target))))
 
 package-all: $(PACKAGE-TARGETS)
 
diff --git a/docker/Dockerfile_rhel_8 b/docker/Dockerfile_rhel_8
deleted file mode 100644
index 97597da37556e6825fb16822de2cac1f45ab3914..0000000000000000000000000000000000000000
--- a/docker/Dockerfile_rhel_8
+++ /dev/null
@@ -1,85 +0,0 @@
-FROM docker.io/roboxes/rhel8
-
-ARG PASS
-ENV PASS=$PASS
-
-RUN subscription-manager register --username=jamisfl --password=$PASS
-RUN subscription-manager attach --auto
-RUN subscription-manager repos  --enable=codeready-builder-for-rhel-8-x86_64-rpms
-
-RUN dnf clean all
-RUN dnf install -y dnf-command\(builddep\) rpmdevtools  && \
-    dnf install -y mock
-
-RUN dnf install -y \
-        git \
-        rpm-build \
-        tar \
-        make \
-        autoconf \
-        automake \
-        nasm \
-        cmake \
-        speexdsp-devel \
-        pulseaudio-libs-devel \
-        libcanberra-devel \
-        libcurl-devel \
-        libtool \
-        mesa-libgbm-devel \
-        mesa-dri-drivers \
-        dbus-devel \
-        expat-devel \
-        pcre-devel \
-        yaml-cpp-devel \
-        dbus-c++-devel \
-        dbus-devel \
-        libXext-devel \
-        libXfixes-devel \
-        yasm \
-        speex-devel \
-        gsm-devel \
-        chrpath \
-        check \
-        astyle \
-        gettext-devel \
-        gcc-c++ \
-        libstdc++-static \
-        which \
-        alsa-lib-devel \
-        systemd-devel \
-        libuuid-devel \
-        uuid-devel \
-        gnutls-devel \
-        nettle-devel \
-        opus-devel \
-        patch \
-        jsoncpp-devel \
-        libnatpmp-devel \
-        webkitgtk4-devel \
-        cryptopp-devel \
-        libva-devel \
-        libvdpau-devel \
-        msgpack-devel \
-        NetworkManager-libnm-devel \
-        openssl-devel \
-        clutter-devel \
-        clutter-gtk-devel \
-        libappindicator-gtk3-devel \
-        libnotify-devel \
-        libupnp-devel \
-        qrencode-devel \
-        sqlite-devel \
-        libdrm \
-        gperf \
-        bison \
-        flex \
-        nodejs \
-        nss-devel \
-        kernel-headers \
-        python2 \
-        libargon2-devel \
-        wget
-
-ADD scripts/build-package-rpm.sh /opt/build-package-rpm.sh
-
-CMD ["/opt/build-package-rpm.sh"]
\ No newline at end of file
diff --git a/docker/profile-seccomp-fedora_28.json b/docker/profile-seccomp-fedora_28.json
deleted file mode 100644
index 3eee93129b1ecb61330e3ef9529cb1b101f1bf49..0000000000000000000000000000000000000000
--- a/docker/profile-seccomp-fedora_28.json
+++ /dev/null
@@ -1,751 +0,0 @@
-{
-	"defaultAction": "SCMP_ACT_ERRNO",
-	"archMap": [
-		{
-			"architecture": "SCMP_ARCH_X86_64",
-			"subArchitectures": [
-				"SCMP_ARCH_X86",
-				"SCMP_ARCH_X32"
-			]
-		},
-		{
-			"architecture": "SCMP_ARCH_AARCH64",
-			"subArchitectures": [
-				"SCMP_ARCH_ARM"
-			]
-		},
-		{
-			"architecture": "SCMP_ARCH_MIPS64",
-			"subArchitectures": [
-				"SCMP_ARCH_MIPS",
-				"SCMP_ARCH_MIPS64N32"
-			]
-		},
-		{
-			"architecture": "SCMP_ARCH_MIPS64N32",
-			"subArchitectures": [
-				"SCMP_ARCH_MIPS",
-				"SCMP_ARCH_MIPS64"
-			]
-		},
-		{
-			"architecture": "SCMP_ARCH_MIPSEL64",
-			"subArchitectures": [
-				"SCMP_ARCH_MIPSEL",
-				"SCMP_ARCH_MIPSEL64N32"
-			]
-		},
-		{
-			"architecture": "SCMP_ARCH_MIPSEL64N32",
-			"subArchitectures": [
-				"SCMP_ARCH_MIPSEL",
-				"SCMP_ARCH_MIPSEL64"
-			]
-		},
-		{
-			"architecture": "SCMP_ARCH_S390X",
-			"subArchitectures": [
-				"SCMP_ARCH_S390"
-			]
-		}
-	],
-	"syscalls": [
-		{
-			"names": [
-				"accept",
-				"accept4",
-				"access",
-				"adjtimex",
-				"alarm",
-				"bind",
-				"brk",
-				"capget",
-				"capset",
-				"chdir",
-				"chmod",
-				"chown",
-				"chown32",
-				"clock_getres",
-				"clock_gettime",
-				"clock_nanosleep",
-				"close",
-				"connect",
-				"copy_file_range",
-				"creat",
-				"dup",
-				"dup2",
-				"dup3",
-				"epoll_create",
-				"epoll_create1",
-				"epoll_ctl",
-				"epoll_ctl_old",
-				"epoll_pwait",
-				"epoll_wait",
-				"epoll_wait_old",
-				"eventfd",
-				"eventfd2",
-				"execve",
-				"execveat",
-				"exit",
-				"exit_group",
-				"faccessat",
-				"fadvise64",
-				"fadvise64_64",
-				"fallocate",
-				"fanotify_mark",
-				"fchdir",
-				"fchmod",
-				"fchmodat",
-				"fchown",
-				"fchown32",
-				"fchownat",
-				"fcntl",
-				"fcntl64",
-				"fdatasync",
-				"fgetxattr",
-				"flistxattr",
-				"flock",
-				"fork",
-				"fremovexattr",
-				"fsetxattr",
-				"fstat",
-				"fstat64",
-				"fstatat64",
-				"fstatfs",
-				"fstatfs64",
-				"fsync",
-				"ftruncate",
-				"ftruncate64",
-				"futex",
-				"futimesat",
-				"getcpu",
-				"getcwd",
-				"getdents",
-				"getdents64",
-				"getegid",
-				"getegid32",
-				"geteuid",
-				"geteuid32",
-				"getgid",
-				"getgid32",
-				"getgroups",
-				"getgroups32",
-				"getitimer",
-				"getpeername",
-				"getpgid",
-				"getpgrp",
-				"getpid",
-				"getppid",
-				"getpriority",
-				"getrandom",
-				"getresgid",
-				"getresgid32",
-				"getresuid",
-				"getresuid32",
-				"getrlimit",
-				"get_robust_list",
-				"getrusage",
-				"getsid",
-				"getsockname",
-				"getsockopt",
-				"get_thread_area",
-				"gettid",
-				"gettimeofday",
-				"getuid",
-				"getuid32",
-				"getxattr",
-				"inotify_add_watch",
-				"inotify_init",
-				"inotify_init1",
-				"inotify_rm_watch",
-				"io_cancel",
-				"ioctl",
-				"io_destroy",
-				"io_getevents",
-				"ioprio_get",
-				"ioprio_set",
-				"io_setup",
-				"io_submit",
-				"ipc",
-				"kill",
-				"lchown",
-				"lchown32",
-				"lgetxattr",
-				"link",
-				"linkat",
-				"listen",
-				"listxattr",
-				"llistxattr",
-				"_llseek",
-				"lremovexattr",
-				"lseek",
-				"lsetxattr",
-				"lstat",
-				"lstat64",
-				"madvise",
-				"memfd_create",
-				"mincore",
-				"mkdir",
-				"mkdirat",
-				"mknod",
-				"mknodat",
-				"mlock",
-				"mlock2",
-				"mlockall",
-				"mmap",
-				"mmap2",
-				"mprotect",
-				"mq_getsetattr",
-				"mq_notify",
-				"mq_open",
-				"mq_timedreceive",
-				"mq_timedsend",
-				"mq_unlink",
-				"mremap",
-				"msgctl",
-				"msgget",
-				"msgrcv",
-				"msgsnd",
-				"msync",
-				"munlock",
-				"munlockall",
-				"munmap",
-				"nanosleep",
-				"newfstatat",
-				"_newselect",
-				"open",
-				"openat",
-				"pause",
-				"pipe",
-				"pipe2",
-				"poll",
-				"ppoll",
-				"prctl",
-				"pread64",
-				"preadv",
-				"preadv2",
-				"prlimit64",
-				"pselect6",
-				"pwrite64",
-				"pwritev",
-				"pwritev2",
-				"read",
-				"readahead",
-				"readlink",
-				"readlinkat",
-				"readv",
-				"recv",
-				"recvfrom",
-				"recvmmsg",
-				"recvmsg",
-				"remap_file_pages",
-				"removexattr",
-				"rename",
-				"renameat",
-				"renameat2",
-				"restart_syscall",
-				"rmdir",
-				"rt_sigaction",
-				"rt_sigpending",
-				"rt_sigprocmask",
-				"rt_sigqueueinfo",
-				"rt_sigreturn",
-				"rt_sigsuspend",
-				"rt_sigtimedwait",
-				"rt_tgsigqueueinfo",
-				"sched_getaffinity",
-				"sched_getattr",
-				"sched_getparam",
-				"sched_get_priority_max",
-				"sched_get_priority_min",
-				"sched_getscheduler",
-				"sched_rr_get_interval",
-				"sched_setaffinity",
-				"sched_setattr",
-				"sched_setparam",
-				"sched_setscheduler",
-				"sched_yield",
-				"seccomp",
-				"select",
-				"semctl",
-				"semget",
-				"semop",
-				"semtimedop",
-				"send",
-				"sendfile",
-				"sendfile64",
-				"sendmmsg",
-				"sendmsg",
-				"sendto",
-				"setfsgid",
-				"setfsgid32",
-				"setfsuid",
-				"setfsuid32",
-				"setgid",
-				"setgid32",
-				"setgroups",
-				"setgroups32",
-				"setitimer",
-				"setpgid",
-				"setpriority",
-				"setregid",
-				"setregid32",
-				"setresgid",
-				"setresgid32",
-				"setresuid",
-				"setresuid32",
-				"setreuid",
-				"setreuid32",
-				"setrlimit",
-				"set_robust_list",
-				"setsid",
-				"setsockopt",
-				"set_thread_area",
-				"set_tid_address",
-				"setuid",
-				"setuid32",
-				"setxattr",
-				"shmat",
-				"shmctl",
-				"shmdt",
-				"shmget",
-				"shutdown",
-				"sigaltstack",
-				"signalfd",
-				"signalfd4",
-				"sigreturn",
-				"socket",
-				"socketcall",
-				"socketpair",
-				"splice",
-        "stat",
-				"stat64",
-				"statfs",
-				"statfs64",
-        "statx",
-				"symlink",
-				"symlinkat",
-				"sync",
-				"sync_file_range",
-				"syncfs",
-				"sysinfo",
-				"syslog",
-				"tee",
-				"tgkill",
-				"time",
-				"timer_create",
-				"timer_delete",
-				"timerfd_create",
-				"timerfd_gettime",
-				"timerfd_settime",
-				"timer_getoverrun",
-				"timer_gettime",
-				"timer_settime",
-				"times",
-				"tkill",
-				"truncate",
-				"truncate64",
-				"ugetrlimit",
-				"umask",
-				"uname",
-				"unlink",
-				"unlinkat",
-				"utime",
-				"utimensat",
-				"utimes",
-				"vfork",
-				"vmsplice",
-				"wait4",
-				"waitid",
-				"waitpid",
-				"write",
-				"writev"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"personality"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [
-				{
-					"index": 0,
-					"value": 0,
-					"valueTwo": 0,
-					"op": "SCMP_CMP_EQ"
-				}
-			],
-			"comment": "",
-			"includes": {},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"personality"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [
-				{
-					"index": 0,
-					"value": 8,
-					"valueTwo": 0,
-					"op": "SCMP_CMP_EQ"
-				}
-			],
-			"comment": "",
-			"includes": {},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"personality"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [
-				{
-					"index": 0,
-					"value": 131072,
-					"valueTwo": 0,
-					"op": "SCMP_CMP_EQ"
-				}
-			],
-			"comment": "",
-			"includes": {},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"personality"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [
-				{
-					"index": 0,
-					"value": 131080,
-					"valueTwo": 0,
-					"op": "SCMP_CMP_EQ"
-				}
-			],
-			"comment": "",
-			"includes": {},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"personality"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [
-				{
-					"index": 0,
-					"value": 4294967295,
-					"valueTwo": 0,
-					"op": "SCMP_CMP_EQ"
-				}
-			],
-			"comment": "",
-			"includes": {},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"sync_file_range2"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"arches": [
-					"ppc64le"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"arm_fadvise64_64",
-				"arm_sync_file_range",
-				"sync_file_range2",
-				"breakpoint",
-				"cacheflush",
-				"set_tls"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"arches": [
-					"arm",
-					"arm64"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"arch_prctl"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"arches": [
-					"amd64",
-					"x32"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"modify_ldt"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"arches": [
-					"amd64",
-					"x32",
-					"x86"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"s390_pci_mmio_read",
-				"s390_pci_mmio_write",
-				"s390_runtime_instr"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"arches": [
-					"s390",
-					"s390x"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"open_by_handle_at"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_DAC_READ_SEARCH"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"bpf",
-				"clone",
-				"fanotify_init",
-				"lookup_dcookie",
-				"mount",
-				"name_to_handle_at",
-				"perf_event_open",
-				"quotactl",
-				"setdomainname",
-				"sethostname",
-				"setns",
-				"umount",
-				"umount2",
-				"unshare"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_ADMIN"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"clone"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [
-				{
-					"index": 0,
-					"value": 2080505856,
-					"valueTwo": 0,
-					"op": "SCMP_CMP_MASKED_EQ"
-				}
-			],
-			"comment": "",
-			"includes": {},
-			"excludes": {
-				"caps": [
-					"CAP_SYS_ADMIN"
-				],
-				"arches": [
-					"s390",
-					"s390x"
-				]
-			}
-		},
-		{
-			"names": [
-				"clone"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [
-				{
-					"index": 1,
-					"value": 2080505856,
-					"valueTwo": 0,
-					"op": "SCMP_CMP_MASKED_EQ"
-				}
-			],
-			"comment": "s390 parameter ordering for clone is different",
-			"includes": {
-				"arches": [
-					"s390",
-					"s390x"
-				]
-			},
-			"excludes": {
-				"caps": [
-					"CAP_SYS_ADMIN"
-				]
-			}
-		},
-		{
-			"names": [
-				"reboot"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_BOOT"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"chroot"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_CHROOT"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"delete_module",
-				"init_module",
-				"finit_module",
-				"query_module"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_MODULE"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"acct"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_PACCT"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"kcmp",
-				"process_vm_readv",
-				"process_vm_writev",
-				"ptrace"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_PTRACE"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"iopl",
-				"ioperm"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_RAWIO"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"settimeofday",
-				"stime",
-				"clock_settime"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_TIME"
-				]
-			},
-			"excludes": {}
-		},
-		{
-			"names": [
-				"vhangup"
-			],
-			"action": "SCMP_ACT_ALLOW",
-			"args": [],
-			"comment": "",
-			"includes": {
-				"caps": [
-					"CAP_SYS_TTY_CONFIG"
-				]
-			},
-			"excludes": {}
-		}
-	]
-}
diff --git a/scripts/build-package-debian.sh b/scripts/build-package-debian.sh
index ef1833df3f57678cb21e187c4d8d03404121e93a..4a0fb62b40e0f66a9716bee2eee97beb66ac481f 100755
--- a/scripts/build-package-debian.sh
+++ b/scripts/build-package-debian.sh
@@ -81,8 +81,9 @@ ${QT_MAJOR}.${QT_MINOR}/${qt_version}/single
         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
+        # Extract the debian folder
+        tar xf "/src/$RELEASE_TARBALL_FILENAME" ring-project/packaging/rules/debian-qt \
+            --strip-components=3 && mv debian-qt debian
 
         # Create the changelog file.
         DEBEMAIL="The Jami project <jami@gnu.org>" dch --create \
diff --git a/scripts/build-package-rpm.sh b/scripts/build-package-rpm.sh
index 313415e8913b0fc9ac64c30284d6bcb5e1cc3d79..3197fcfa173ff441744c4f5e4574bef0c0597111 100755
--- a/scripts/build-package-rpm.sh
+++ b/scripts/build-package-rpm.sh
@@ -26,14 +26,15 @@ set -e
 # Import the spec file.
 mkdir -p /opt/ring-project
 cd /opt/ring-project
-cp /opt/ring-project-ro/packaging/rules/rpm/* .
-rm -f jami-libqt.spec
+tar xf "/src/$RELEASE_TARBALL_FILENAME" ring-project/packaging/rules/rpm \
+    --strip-components=3 && mv rpm/* . && rmdir rpm
+rm jami-libqt.spec
 
 # Prepare the build tree.
 rpmdev-setuptree
 
 # Copy the source tarball.
-cp /opt/ring-project-ro/jami_*.tar.gz /root/rpmbuild/SOURCES
+cp --reflink=auto "/src/$RELEASE_TARBALL_FILENAME" /root/rpmbuild/SOURCES
 
 QT_JAMI_PREFIX="/usr/lib64/qt-jami"
 PATH="${QT_JAMI_PREFIX}/bin:${PATH}"
@@ -72,7 +73,9 @@ if [[ "${DISTRIBUTION:0:4}" == "rhel" \
 
             mkdir /opt/qt-jami-build
             cd /opt/qt-jami-build
-            cp /opt/ring-project-ro/packaging/rules/rpm/jami-libqt.spec .
+            tar xf "/src/$RELEASE_TARBALL_FILENAME" \
+                ring-project/packaging/rules/rpm/jami-libqt.spec \
+                --strip-components=4
 
             # Fetch and cache the tarball, if not already available.
             if [ ! -f "$CACHED_QT_TARBALL" ]; then
diff --git a/scripts/build-package-snap.sh b/scripts/build-package-snap.sh
index ebad3cb6f728185c3132df7751f9ca6c25294de4..c7035560605432d1e15ea958162d83410677f275 100755
--- a/scripts/build-package-snap.sh
+++ b/scripts/build-package-snap.sh
@@ -23,7 +23,7 @@
 
 set -e
 
-cp -rp /opt/ring-project-ro /opt/ring-project
+tar xf "/src/$RELEASE_TARBALL_FILENAME" -C /opt
 cd /opt/ring-project/packaging/rules/snap/${SNAP_PKG_NAME}/
 
 # set the version and tarball filename
diff --git a/scripts/make-packaging-target.py b/scripts/make-packaging-target.py
deleted file mode 100755
index 50cd3bce7eb2b4180120a37a1b6f245addb256b5..0000000000000000000000000000000000000000
--- a/scripts/make-packaging-target.py
+++ /dev/null
@@ -1,262 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (C) 2016-2021 Savoir-faire Linux Inc.
-#
-# Author: Alexandre Viau <alexandre.viau@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/>.
-#
-# Creates packaging targets for a distribution and architecture.
-# This helps reduce the length of the top Makefile.
-#
-
-import argparse
-
-template_header = """\
-# -*- mode: makefile -*-
-# This file was auto-generated by: scripts/make-packaging-target.py.
-#
-# We don't simply use jami-packaging-distro as the docker image name because
-# we want to be able to build multiple versions of the same distro at the
-# same time and it could result in race conditions on the machine as we would
-# overwrite the docker image of other builds.
-#
-# This does not impact caching as the docker daemon does not care about the image
-# names, just about the contents of the Dockerfile.
-"""
-
-target_template = """\
-##
-## Distro: %(distribution)s
-##
-
-PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME:=jami-packaging-%(distribution)s$(RING_PACKAGING_IMAGE_SUFFIX)
-PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE:=.docker-image-$(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME)
-
-PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\
-    --rm \\
-    -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 \\
-    -e TARBALLS=$(TARBALLS) \\
-    -v $(CURDIR)/$(RELEASE_TARBALL_FILENAME):/src/$(RELEASE_TARBALL_FILENAME) \\
-    -v $(CURDIR):/opt/ring-project-ro:ro \\
-    -v $(CURDIR)/packages/%(distribution)s:/opt/output \\
-    -v $(TARBALLS):$(TARBALLS) \\
-    -t $(and $(IS_SHELL_INTERACTIVE),-i) %(options)s \\
-    $(DOCKER_RUN_EXTRA_ARGS) \\
-    $(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME)
-
-$(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE): docker/Dockerfile_%(docker_image)s
-	docker build \\
-        -t $(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME) \\
-        -f docker/Dockerfile_%(docker_image)s %(docker_build_args)s \\
-        $(CURDIR)
-	touch $(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE)
-
-packages/%(distribution)s:
-	mkdir -p packages/%(distribution)s
-
-packages/%(distribution)s/%(output_file)s: $(RELEASE_TARBALL_FILENAME) packages/%(distribution)s $(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE)
-	$(PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND)
-	touch packages/%(distribution)s/*
-
-.PHONY: package-%(distribution)s
-package-%(distribution)s: packages/%(distribution)s/%(output_file)s
-PACKAGE-TARGETS += package-%(distribution)s
-
-.PHONY: package-%(distribution)s-interactive
-package-%(distribution)s-interactive: $(RELEASE_TARBALL_FILENAME) packages/%(distribution)s $(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE)
-	$(PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND) bash
-"""
-
-
-RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS = (
-    '--security-opt seccomp=./docker/profile-seccomp-fedora_28.json '
-    '--privileged')
-
-DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS = (
-    '-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) '
-    '--privileged '
-    '--security-opt apparmor=docker-default ')
-
-
-def generate_target(distribution, output_file, options='', docker_image='',
-                    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,
-    }
-
-
-def run_generate(parsed_args):
-    print(generate_target(parsed_args.distribution,
-                          parsed_args.output_file,
-                          parsed_args.options,
-                          parsed_args.docker_image,
-                          parsed_args.version,
-                          parsed_args.version_qt))
-
-
-def run_generate_all(parsed_args):
-    targets = [
-        # Debian
-        {
-            "distribution": "debian_10",
-            "output_file": "$(DEBIAN_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
-        },
-        {
-            "distribution": "debian_11",
-            "output_file": "$(DEBIAN_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
-        },
-        {
-            "distribution": "debian_testing",
-            "output_file": "$(DEBIAN_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
-        },
-        {
-            "distribution": "debian_unstable",
-            "output_file": "$(DEBIAN_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
-        },
-        # Raspbian
-        {
-            "distribution": "raspbian_10_armhf",
-            "output_file": "$(DEBIAN_DSC_FILENAME)",
-            "options": "--privileged --security-opt apparmor=docker-default",
-        },
-        # Ubuntu
-        {
-            "distribution": "ubuntu_18.04",
-            "output_file": "$(DEBIAN_DSC_FILENAME)",
-            "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_21.04",
-            "output_file": "$(DEBIAN_DSC_FILENAME)",
-            "options": DPKG_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
-        },
-        # Fedora
-        {
-            "distribution": "fedora_33",
-            "output_file": ".packages-built",
-            "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS
-        },
-        {
-            "distribution": "fedora_34",
-            "output_file": ".packages-built",
-            "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS
-        },
-        # Disabled 2021/05/21 because it's broken.
-        # {
-        #     "distribution": "rhel_8",
-        #     "output_file": ".packages-built",
-        #     "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS,
-        #     "docker_build_args": "--build-arg PASS=$${PASS}"
-        # },
-        # OpenSUSE
-        {
-            "distribution": "opensuse-leap_15.2",
-            "output_file": ".packages-built",
-            "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS
-        },
-        {
-            "distribution": "opensuse-leap_15.3",
-            "output_file": ".packages-built",
-            "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS
-        },
-        {
-            "distribution": "opensuse-tumbleweed",
-            "output_file": ".packages-built",
-            "options": RPM_BASED_SYSTEMS_DOCKER_RUN_OPTIONS
-        },
-        # Snap
-        {
-            "distribution": "snap",
-            "output_file": ".packages-built",
-            "options": "-e SNAP_PKG_NAME=$(or $(SNAP_PKG_NAME),jami)",
-        },
-
-    ]
-
-    for target in targets:
-        print(generate_target(**target))
-
-
-def parse_args():
-    ap = argparse.ArgumentParser(
-        description="Packaging targets generation tool"
-    )
-
-    ga = ap.add_mutually_exclusive_group(required=True)
-
-    # Action arguments
-    ga.add_argument('--generate',
-                    action='store_true',
-                    help='Generate a single packaging target')
-    ga.add_argument('--generate-all',
-                    action='store_true',
-                    help='Generates all packaging targets')
-
-    # Parameters
-    ap.add_argument('--distribution')
-    ap.add_argument('--output_file')
-    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()
-
-    return parsed_args
-
-
-def main():
-    parsed_args = parse_args()
-
-    print(template_header)
-    if parsed_args.generate:
-        run_generate(parsed_args)
-    elif parsed_args.generate_all:
-        run_generate_all(parsed_args)
-
-if __name__ == "__main__":
-    main()