From b20faf613a6b1dc1fb2f41f36f4ea733d72d4648 Mon Sep 17 00:00:00 2001
From: Fredy P <fredy.pulido@savoirfairelinux.com>
Date: Mon, 9 Dec 2019 10:15:45 -0500
Subject: [PATCH] packaging: adds debian 10 and raspbian arm

Adds:
* Debian 9 armhf
* Debian 9 arm64
* Debian 10 armhf
* Debian 10 arm64
* Raspbian 10 armhf
* The One Click Install (oci) version for all this items

This commit also fix the --generate option in the generated makefile by
scripts/make-packaging-target.py and remove the --architecture option
there because was not used at any part of the script.

Because our builder docker can not docker build with ARM we implemented
a workaround called dirty qemu-static is documented and we have a issue
to sovle it.

The pipeline for packaging-deploy-gnulinux-generic got changed to add
the support for the ARM architecture but the OCI build is not enabled
because the build including the oci takes long (5 hours or plus).

Warning: require companion changes in daemon (topic debian-arm)
to ensure the right compilation flags

Change-Id: I905bbd4660824670d7de836129886f3d7f1dc83b
---
 .gitignore                                    |   1 +
 Makefile.packaging                            |  10 ++
 docker/Dockerfile_debian_10_arm64             |  73 ++++++++++++
 docker/Dockerfile_debian_10_armhf             |  73 ++++++++++++
 docker/Dockerfile_debian_9_arm64              |  73 ++++++++++++
 docker/Dockerfile_debian_9_armhf              |  73 ++++++++++++
 docker/Dockerfile_raspbian_10_armhf           |  74 +++++++++++++
 .../rules/debian-one-click-install/rules      |   9 +-
 packaging/rules/debian/rules                  |   9 +-
 scripts/deploy-packages.sh                    |  30 ++---
 scripts/make-packaging-target.py              | 104 +++++++++++++++++-
 11 files changed, 508 insertions(+), 21 deletions(-)
 create mode 100644 docker/Dockerfile_debian_10_arm64
 create mode 100644 docker/Dockerfile_debian_10_armhf
 create mode 100644 docker/Dockerfile_debian_9_arm64
 create mode 100644 docker/Dockerfile_debian_9_armhf
 create mode 100644 docker/Dockerfile_raspbian_10_armhf

diff --git a/.gitignore b/.gitignore
index 6b17f47a..d00229a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@ Makefile.packaging.distro_targets
 repositories
 manual-download
 .docker-image-*
+qemu-static
diff --git a/Makefile.packaging b/Makefile.packaging
index ce5c0d85..e630722b 100644
--- a/Makefile.packaging
+++ b/Makefile.packaging
@@ -77,12 +77,21 @@ $(RELEASE_TARBALL_FILENAME):
 .PHONY: package-all
 package-all: package-debian_9 \
              package-debian_9_i386 \
+             package-debian_9_armhf \
+             package-debian_9_arm64 \
              package-debian_9_oci \
              package-debian_9_i386_oci \
+             package-debian_9_armhf_oci \
+             package-debian_9_arm64_oci \
              package-debian_10 \
              package-debian_10_i386 \
+             package-debian_10_armhf \
+             package-debian_10_arm64 \
              package-debian_10_oci \
              package-debian_10_i386_oci \
+             package-debian_10_armhf_oci \
+             package-debian_10_arm64_oci \
+             package-raspbian_10_armhf \
              package-ubuntu_16.04 \
              package-ubuntu_16.04_i386 \
              package-ubuntu_16.04_oci \
@@ -146,3 +155,4 @@ clean:
 	rm -rf packages
 	rm -f Makefile.packaging.distro_targets
 	rm -f .docker-image-*
+	rm -fr qemu-static
diff --git a/docker/Dockerfile_debian_10_arm64 b/docker/Dockerfile_debian_10_arm64
new file mode 100644
index 00000000..f07167fa
--- /dev/null
+++ b/docker/Dockerfile_debian_10_arm64
@@ -0,0 +1,73 @@
+FROM arm64v8/debian:buster
+
+# FIXME: dirty qemu-static hack required because our Jenkins node runs Docker 17
+# Remove next line as soon as we get Docker 18 +
+COPY qemu-static/qemu-aarch64-static /usr/bin/qemu-aarch64-static
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y vim devscripts
+
+# Speed up mk-build-deps
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y -o Acquire::Retires=10 \
+        git \
+        autoconf \
+        automake \
+        autopoint \
+        cmake \
+        libtool \
+        libdbus-1-dev \
+        libdbus-c++-dev \
+        libargon2-0-dev \
+        libebook1.2-dev \
+	libcanberra-gtk3-dev \
+        libclutter-gtk-1.0-dev \
+        libclutter-1.0-dev \
+        libglib2.0-dev \
+        libgtk-3-dev \
+        libnotify-dev \
+        qtbase5-dev \
+        qttools5-dev \
+        qttools5-dev-tools \
+        yasm \
+        nasm \
+        autotools-dev \
+        gettext \
+        libpulse-dev \
+        libasound2-dev \
+        libexpat1-dev \
+        libpcre3-dev \
+        libyaml-cpp-dev \
+        libboost-dev \
+        libxext-dev \
+        libxfixes-dev \
+        libspeex-dev \
+        libspeexdsp-dev \
+        uuid-dev \
+        libavcodec-dev \
+        libavutil-dev \
+        libavformat-dev \
+        libswscale-dev \
+        libavdevice-dev \
+        libopus-dev \
+        libudev-dev \
+        libgsm1-dev \
+        libjsoncpp-dev \
+        libmsgpack-dev \
+        libnatpmp-dev \
+        libappindicator3-dev \
+        libqrencode-dev \
+        libnm-dev \
+        libwebkit2gtk-4.0-dev \
+        libcrypto++-dev \
+        libva-dev \
+        libvdpau-dev \
+        libssl-dev
+
+ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
+
+CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_debian_10_armhf b/docker/Dockerfile_debian_10_armhf
new file mode 100644
index 00000000..125e083d
--- /dev/null
+++ b/docker/Dockerfile_debian_10_armhf
@@ -0,0 +1,73 @@
+FROM arm32v7/debian:buster
+
+# FIXME: dirty qemu-static hack required because our Jenkins node runs Docker 17
+# Remove next line as soon as we get Docker 18 +
+COPY qemu-static/qemu-arm-static /usr/bin/qemu-arm-static
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y vim devscripts
+
+# Speed up mk-build-deps
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y -o Acquire::Retires=10 \
+        git \
+        autoconf \
+        automake \
+        autopoint \
+        cmake \
+        libtool \
+        libdbus-1-dev \
+        libdbus-c++-dev \
+        libargon2-0-dev \
+        libebook1.2-dev \
+	libcanberra-gtk3-dev \
+        libclutter-gtk-1.0-dev \
+        libclutter-1.0-dev \
+        libglib2.0-dev \
+        libgtk-3-dev \
+        libnotify-dev \
+        qtbase5-dev \
+        qttools5-dev \
+        qttools5-dev-tools \
+        yasm \
+        nasm \
+        autotools-dev \
+        gettext \
+        libpulse-dev \
+        libasound2-dev \
+        libexpat1-dev \
+        libpcre3-dev \
+        libyaml-cpp-dev \
+        libboost-dev \
+        libxext-dev \
+        libxfixes-dev \
+        libspeex-dev \
+        libspeexdsp-dev \
+        uuid-dev \
+        libavcodec-dev \
+        libavutil-dev \
+        libavformat-dev \
+        libswscale-dev \
+        libavdevice-dev \
+        libopus-dev \
+        libudev-dev \
+        libgsm1-dev \
+        libjsoncpp-dev \
+        libmsgpack-dev \
+        libnatpmp-dev \
+        libappindicator3-dev \
+        libqrencode-dev \
+        libnm-dev \
+        libwebkit2gtk-4.0-dev \
+        libcrypto++-dev \
+        libva-dev \
+        libvdpau-dev \
+        libssl-dev
+
+ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
+
+CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_debian_9_arm64 b/docker/Dockerfile_debian_9_arm64
new file mode 100644
index 00000000..5341fb9d
--- /dev/null
+++ b/docker/Dockerfile_debian_9_arm64
@@ -0,0 +1,73 @@
+FROM arm64v8/debian:9
+
+# FIXME: dirty qemu-static hack required because our Jenkins node runs Docker 17
+# Remove next line as soon as we get Docker 18 +
+COPY qemu-static/qemu-aarch64-static /usr/bin/qemu-aarch64-static
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y vim devscripts
+
+# Speed up mk-build-deps
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y -o Acquire::Retires=10 \
+        git \
+        autoconf \
+        automake \
+        autopoint \
+        cmake \
+        libtool \
+        libdbus-1-dev \
+        libdbus-c++-dev \
+        libargon2-0-dev \
+        libebook1.2-dev \
+	libcanberra-gtk3-dev \
+        libclutter-gtk-1.0-dev \
+        libclutter-1.0-dev \
+        libglib2.0-dev \
+        libgtk-3-dev \
+        libnotify-dev \
+        qtbase5-dev \
+        qttools5-dev \
+        qttools5-dev-tools \
+        yasm \
+        nasm \
+        autotools-dev \
+        gettext \
+        libpulse-dev \
+        libasound2-dev \
+        libexpat1-dev \
+        libpcre3-dev \
+        libyaml-cpp-dev \
+        libboost-dev \
+        libxext-dev \
+        libxfixes-dev \
+        libspeex-dev \
+        libspeexdsp-dev \
+        uuid-dev \
+        libavcodec-dev \
+        libavutil-dev \
+        libavformat-dev \
+        libswscale-dev \
+        libavdevice-dev \
+        libopus-dev \
+        libudev-dev \
+        libgsm1-dev \
+        libjsoncpp-dev \
+        libmsgpack-dev \
+        libnatpmp-dev \
+        libappindicator3-dev \
+        libqrencode-dev \
+        libnm-dev \
+        libwebkit2gtk-4.0-dev \
+        libcrypto++-dev \
+        libva-dev \
+        libvdpau-dev \
+        libssl-dev
+
+ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
+
+CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_debian_9_armhf b/docker/Dockerfile_debian_9_armhf
new file mode 100644
index 00000000..c550e5c7
--- /dev/null
+++ b/docker/Dockerfile_debian_9_armhf
@@ -0,0 +1,73 @@
+FROM arm32v7/debian:9
+
+# FIXME: dirty qemu-static hack required because our Jenkins node runs Docker 17
+# Remove next line as soon as we get Docker 18 +
+COPY qemu-static/qemu-arm-static /usr/bin/qemu-arm-static
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y vim devscripts
+
+# Speed up mk-build-deps
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y -o Acquire::Retires=10 \
+        git \
+        autoconf \
+        automake \
+        autopoint \
+        cmake \
+        libtool \
+        libdbus-1-dev \
+        libdbus-c++-dev \
+        libargon2-0-dev \
+        libebook1.2-dev \
+	libcanberra-gtk3-dev \
+        libclutter-gtk-1.0-dev \
+        libclutter-1.0-dev \
+        libglib2.0-dev \
+        libgtk-3-dev \
+        libnotify-dev \
+        qtbase5-dev \
+        qttools5-dev \
+        qttools5-dev-tools \
+        yasm \
+        nasm \
+        autotools-dev \
+        gettext \
+        libpulse-dev \
+        libasound2-dev \
+        libexpat1-dev \
+        libpcre3-dev \
+        libyaml-cpp-dev \
+        libboost-dev \
+        libxext-dev \
+        libxfixes-dev \
+        libspeex-dev \
+        libspeexdsp-dev \
+        uuid-dev \
+        libavcodec-dev \
+        libavutil-dev \
+        libavformat-dev \
+        libswscale-dev \
+        libavdevice-dev \
+        libopus-dev \
+        libudev-dev \
+        libgsm1-dev \
+        libjsoncpp-dev \
+        libmsgpack-dev \
+        libnatpmp-dev \
+        libappindicator3-dev \
+        libqrencode-dev \
+        libnm-dev \
+        libwebkit2gtk-4.0-dev \
+        libcrypto++-dev \
+        libva-dev \
+        libvdpau-dev \
+        libssl-dev
+
+ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
+
+CMD /opt/build-package-debian.sh
diff --git a/docker/Dockerfile_raspbian_10_armhf b/docker/Dockerfile_raspbian_10_armhf
new file mode 100644
index 00000000..288c1236
--- /dev/null
+++ b/docker/Dockerfile_raspbian_10_armhf
@@ -0,0 +1,74 @@
+FROM arm32v7/debian:buster
+# debian because no raspbian imgs
+
+# FIXME: dirty qemu-static hack required because our Jenkins node runs Docker 17
+# Remove next line as soon as we get Docker 18 +
+COPY qemu-static/qemu-arm-static /usr/bin/qemu-arm-static
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y vim devscripts
+
+# Speed up mk-build-deps
+RUN apt-get clean
+RUN apt-get update && \
+    apt-get install -y -o Acquire::Retires=10 \
+        git \
+        autoconf \
+        automake \
+        autopoint \
+        cmake \
+        libtool \
+        libdbus-1-dev \
+        libdbus-c++-dev \
+        libargon2-0-dev \
+        libebook1.2-dev \
+	libcanberra-gtk3-dev \
+        libclutter-gtk-1.0-dev \
+        libclutter-1.0-dev \
+        libglib2.0-dev \
+        libgtk-3-dev \
+        libnotify-dev \
+        qtbase5-dev \
+        qttools5-dev \
+        qttools5-dev-tools \
+        yasm \
+        nasm \
+        autotools-dev \
+        gettext \
+        libpulse-dev \
+        libasound2-dev \
+        libexpat1-dev \
+        libpcre3-dev \
+        libyaml-cpp-dev \
+        libboost-dev \
+        libxext-dev \
+        libxfixes-dev \
+        libspeex-dev \
+        libspeexdsp-dev \
+        uuid-dev \
+        libavcodec-dev \
+        libavutil-dev \
+        libavformat-dev \
+        libswscale-dev \
+        libavdevice-dev \
+        libopus-dev \
+        libudev-dev \
+        libgsm1-dev \
+        libjsoncpp-dev \
+        libmsgpack-dev \
+        libnatpmp-dev \
+        libappindicator3-dev \
+        libqrencode-dev \
+        libnm-dev \
+        libwebkit2gtk-4.0-dev \
+        libcrypto++-dev \
+        libva-dev \
+        libvdpau-dev \
+        libssl-dev
+
+ADD scripts/build-package-debian.sh /opt/build-package-debian.sh
+
+CMD /opt/build-package-debian.sh
diff --git a/packaging/rules/debian-one-click-install/rules b/packaging/rules/debian-one-click-install/rules
index 67cd7669..377d568c 100755
--- a/packaging/rules/debian-one-click-install/rules
+++ b/packaging/rules/debian-one-click-install/rules
@@ -15,6 +15,13 @@ endif
 # Binary package names
 RING_ALL_IN_ONE_PKG_NAME="jami-all"
 
+# Bundled packages from contrib
+BUNDLED_PKGS = .ffmpeg
+ifeq ($(DISTRIBUTION),raspbian_10_armhf)
+# Raspbian's yaml-cpp lib does not work properly
+BUNDLED_PKGS += .yaml-cpp
+endif
+
 %:
 	dh $@
 
@@ -51,7 +58,7 @@ override_dh_auto_configure:
 				--enable-gnutls && \
 		make list && \
 		make -j$(NO_CPUS) V=1 && \
-		make -j$(NO_CPUS) .ffmpeg V=1
+		make -j$(NO_CPUS) $(BUNDLED_PKGS) V=1
 	cd daemon && \
 		./autogen.sh && \
 		./configure \
diff --git a/packaging/rules/debian/rules b/packaging/rules/debian/rules
index 8d932bd6..ba6d33a8 100755
--- a/packaging/rules/debian/rules
+++ b/packaging/rules/debian/rules
@@ -17,6 +17,13 @@ RING_ALL_IN_ONE_PKG_NAME="jami-all"
 RING_CLIENT_PKG_NAME="jami"
 RING_DAEMON_PKG_NAME="jami-daemon"
 
+# Bundled packages from contrib
+BUNDLED_PKGS = .ffmpeg
+ifeq ($(DISTRIBUTION),raspbian_10_armhf)
+# Raspbian's yaml-cpp lib does not work properly
+BUNDLED_PKGS += .yaml-cpp
+endif
+
 %:
 	dh $@
 
@@ -53,7 +60,7 @@ override_dh_auto_configure:
 				--enable-gnutls && \
 		make list && \
 		make -j$(NO_CPUS) V=1 && \
-		make -j$(NO_CPUS) .ffmpeg V=1
+		make -j$(NO_CPUS) $(BUNDLED_PKGS) V=1
 	cd daemon && \
 		./autogen.sh && \
 		./configure \
diff --git a/scripts/deploy-packages.sh b/scripts/deploy-packages.sh
index 9aa081e7..87b160ea 100755
--- a/scripts/deploy-packages.sh
+++ b/scripts/deploy-packages.sh
@@ -49,7 +49,7 @@ function package_deb()
 Origin: ring
 Label: Ring ${DISTRIBUTION} Repository
 Codename: ring
-Architectures: i386 amd64
+Architectures: i386 amd64 armhf arm64
 Components: main
 Description: This repository contains Ring ${DISTRIBUTION} packages
 SignWith: ${KEYID}
@@ -91,19 +91,19 @@ EOF
     #######################################
     ## create the manual download folder ##
     #######################################
-    DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER=$(realpath manual-download)/${DISTRIBUTION}
-    mkdir -p ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}
-    ls packages/${DISTRIBUTION}
-    # packages with dfsg1-0 contains the postinstall script that adds the repository
-    cp packages/${DISTRIBUTION}*/jami-all_????????.*\~dfsg1-0_*.deb ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}
-    for package in ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}/*; do
-        package_name=$(dpkg -I ${package} | grep -m 1 Package: | awk '{print $2}')
-        package_arch=$(dpkg -I ${package} | grep -m 1 Architecture: | awk '{print $2}')
-	package_linkname=${package_name}_${package_arch}.deb
-	cd ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}
-	cp ${package} ${package_linkname}
-	cd -
-    done
+    if [ -d packages/${DISTRIBUTION}*_oci ]; then
+      DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER=$(realpath manual-download)/${DISTRIBUTION}
+      mkdir -p ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}
+      NAME_PATTERN=jami-all_????????.*\~dfsg*.deb
+      cp packages/${DISTRIBUTION}*_oci/${NAME_PATTERN} ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}
+      for package in ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}/${NAME_PATTERN} ; do
+          package_name=$(dpkg -I ${package} | grep -m 1 Package: | awk '{print $2}')
+          package_arch=$(dpkg -I ${package} | grep -m 1 Architecture: | awk '{print $2}')
+          package_shortname=${package_name}_${package_arch}.deb
+          rm -f ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}/${package_shortname}
+          cp ${package} ${DISTRIBUTION_MANUAL_DOWNLOAD_FOLDER}/${package_shortname}
+      done
+    fi
 }
 
 
@@ -208,7 +208,7 @@ function deploy()
 
 function package()
 {
-    if [[ "${DISTRIBUTION:0:6}" == "debian" || "${DISTRIBUTION:0:6}" == "ubuntu" ]];
+    if [[ "${DISTRIBUTION:0:6}" == "debian" || "${DISTRIBUTION:0:6}" == "ubuntu" || "${DISTRIBUTION:0:8}" == "raspbian" ]];
     then
         package_deb
     elif [[ "${DISTRIBUTION:0:6}" == "fedora" || "${DISTRIBUTION:0:4}" == "rhel" || "${DISTRIBUTION:0:13}" == "opensuse-leap" ]];
diff --git a/scripts/make-packaging-target.py b/scripts/make-packaging-target.py
index 2bc957b0..8cb6964b 100755
--- a/scripts/make-packaging-target.py
+++ b/scripts/make-packaging-target.py
@@ -38,6 +38,7 @@ target_template = """\
 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)
 DOCKER_EXTRA_ARGS =
+QEMU_STATIC_%(distribution)s = %(qemu_static)s
 
 PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\
     --rm \\
@@ -52,7 +53,12 @@ PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\
     -t $(DOCKER_EXTRA_ARGS) %(options)s \\
     $(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME)
 
-$(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE): docker/Dockerfile_%(docker_image)s
+# FIXME: dirty qemu-static hack required because our Jenkis node runs Docker 17
+# Remove all the qemu-static / QEMU-STATIC stuff as soon as we get Docker 18 +
+QEMU_STATIC_%(distribution)s:
+	if [ ! -z $(QEMU_STATIC_%(distribution)s) ]; then mkdir -p qemu-static && cp -af /usr/bin/$(QEMU_STATIC_%(distribution)s) qemu-static/; fi
+
+$(PACKAGE_%(distribution)s_DOCKER_IMAGE_FILE): QEMU_STATIC_%(distribution)s docker/Dockerfile_%(docker_image)s
 	docker build \\
         -t $(PACKAGE_%(distribution)s_DOCKER_IMAGE_NAME) \\
         -f docker/Dockerfile_%(docker_image)s \\
@@ -76,7 +82,7 @@ package-%(distribution)s-interactive: $(RELEASE_TARBALL_FILENAME) packages/%(dis
 """
 
 
-def generate_target(distribution, debian_packaging_override, output_file, options='', docker_image='', version=''):
+def generate_target(distribution, debian_packaging_override, output_file, options='', docker_image='', version='', qemu_static=''):
     if (docker_image == ''):
         docker_image = distribution
     if (version == ''):
@@ -88,12 +94,18 @@ def generate_target(distribution, debian_packaging_override, output_file, option
         "output_file": output_file,
         "options": options,
         "version": version,
+        "qemu_static": qemu_static,
     }
 
 
 def run_generate(parsed_args):
     print(generate_target(parsed_args.distribution,
-                          parsed_args.debian_packaging_override))
+                          parsed_args.debian_packaging_override,
+                          parsed_args.output_file,
+                          parsed_args.options,
+                          parsed_args.docker_image,
+                          parsed_args.version,
+                          parsed_args.qemu_static))
 
 
 def run_generate_all(parsed_args):
@@ -109,6 +121,20 @@ def run_generate_all(parsed_args):
             "debian_packaging_override": "",
             "output_file": "$(DEBIAN_DSC_FILENAME)",
         },
+        {
+            "distribution": "debian_9_armhf",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "--privileged --security-opt apparmor=docker-default",
+            "qemu_static": 'qemu-arm-static',
+        },
+        {
+            "distribution": "debian_9_arm64",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "--privileged --security-opt apparmor=docker-default",
+            "qemu_static": 'qemu-aarch64-static',
+        },
         {
             "distribution": "debian_9_oci",
             "docker_image": "debian_9",
@@ -125,6 +151,24 @@ def run_generate_all(parsed_args):
             "options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR)",
             "version": "$(DEBIAN_OCI_VERSION)",
         },
+        {
+            "distribution": "debian_9_armhf_oci",
+            "docker_image": "debian_9_armhf",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR) --privileged --security-opt apparmor=docker-default",
+            "version": "$(DEBIAN_OCI_VERSION)",
+            "qemu_static": 'qemu-arm-static',
+        },
+        {
+            "distribution": "debian_9_arm64_oci",
+            "docker_image": "debian_9_arm64",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR) --privileged --security-opt apparmor=docker-default",
+            "version": "$(DEBIAN_OCI_VERSION)",
+            "qemu_static": 'qemu-aarch64-static',
+        },
         {
             "distribution": "debian_10",
             "debian_packaging_override": "",
@@ -137,6 +181,20 @@ def run_generate_all(parsed_args):
             "output_file": "$(DEBIAN_DSC_FILENAME)",
             "options": "--privileged --security-opt apparmor=docker-default",
         },
+        {
+            "distribution": "debian_10_armhf",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "--privileged --security-opt apparmor=docker-default",
+            "qemu_static": 'qemu-arm-static',
+        },
+        {
+            "distribution": "debian_10_arm64",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "--privileged --security-opt apparmor=docker-default",
+            "qemu_static": 'qemu-aarch64-static',
+        },
         {
             "distribution": "debian_10_oci",
             "docker_image": "debian_10",
@@ -153,6 +211,41 @@ def run_generate_all(parsed_args):
             "options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR) --privileged --security-opt apparmor=docker-default",
             "version": "$(DEBIAN_OCI_VERSION)",
         },
+        {
+            "distribution": "debian_10_armhf_oci",
+            "docker_image": "debian_10_armhf",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR) --privileged --security-opt apparmor=docker-default",
+            "version": "$(DEBIAN_OCI_VERSION)",
+            "qemu_static": 'qemu-arm-static',
+        },
+        {
+            "distribution": "debian_10_arm64_oci",
+            "docker_image": "debian_10_arm64",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR) --privileged --security-opt apparmor=docker-default",
+            "version": "$(DEBIAN_OCI_VERSION)",
+            "qemu_static": 'qemu-aarch64-static',
+        },
+        # Raspbian
+        {
+            "distribution": "raspbian_10_armhf",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "--privileged --security-opt apparmor=docker-default",
+            "qemu_static": 'qemu-arm-static',
+        },
+        {
+            "distribution": "raspbian_10_armhf_oci",
+            "docker_image": "raspbian_10_armhf",
+            "debian_packaging_override": "",
+            "output_file": "$(DEBIAN_DSC_FILENAME)",
+            "options": "-e OVERRIDE_PACKAGING_DIR=$(DEBIAN_OCI_PKG_DIR) --privileged --security-opt apparmor=docker-default",
+            "version": "$(DEBIAN_OCI_VERSION)",
+            "qemu_static": 'qemu-arm-static',
+        },
         # Ubuntu
         {
             "distribution": "ubuntu_16.04",
@@ -393,9 +486,12 @@ def parse_args():
 
     # Parameters
     ap.add_argument('--distribution')
-    ap.add_argument('--architecture')
     ap.add_argument('--debian_packaging_override', default='')
     ap.add_argument('--output_file')
+    ap.add_argument('--options', default='')
+    ap.add_argument('--docker_image', default='')
+    ap.add_argument('--version', default='')
+    ap.add_argument('--qemu_static', default='')
 
     parsed_args = ap.parse_args()
 
-- 
GitLab