diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4d3f17cb005d8ff130e0ece4522e69e7288633bc
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,18 @@
+# Gitlab CI file to generate the system image .img file.
+#image: debian:bullseye-slim
+image: source.mnt.re:5050/reform/build-base-image-docker:latest
+
+build:
+  script:
+    - sed -i 's|http://deb.|http://ftp.de.|g' /etc/apt/sources.list
+    - apt update
+    - apt-get -y install sudo gzip libext2fs2 pigz
+    - apt-get -y install bc parted multistrap udisks2 gcc-aarch64-linux-gnu make device-tree-compiler qemu-user-static binfmt-support build-essential bison flex libssl-dev bash git
+    - cd reform2-imx8mq/
+    - bash mkimage.sh
+    - pigz reform-system.img
+  artifacts:
+    paths:
+      - "reform2-imx8mq/linux/arch/arm64/boot/Image"
+      - "reform2-imx8mq/u-boot/flash.bin"
+      - "reform2-imx8mq/reform-system.img.gz"
diff --git a/reform2-imx8mq/mkimage.sh b/reform2-imx8mq/mkimage.sh
index 0145e8cdb8c5effb01879aa40c7ba41d37191aa5..dd563dc3b4fe758cf9fb8cf3cea06e080e28aadb 100755
--- a/reform2-imx8mq/mkimage.sh
+++ b/reform2-imx8mq/mkimage.sh
@@ -11,54 +11,22 @@ sudo apt-get -y install parted multistrap udisks2 gcc-aarch64-linux-gnu make dev
 ./mkkernel.sh
 # build u-boot
 ./mkuboot.sh
+
 # build the debian userland and configure it
 sudo ./mkuserland.sh
 # chroot into the userland and build custom packages (mesa, xserver...)
 sudo ./mkuserland2.sh
 
-mkdir -p target
-
-# change 8000 below to the number of megabytes your image file should have
-if [ ! -f reform-system.img ]; then
-  dd if=/dev/zero of=reform-system.img bs=1M count=0 seek=8000
-else
-  echo "reform-system.img already exists. Delete it if you want to change the image size."
-fi
-
-# can/should we use non-mbr? GPT?
-/sbin/parted -s reform-system.img "mklabel msdos"
-/sbin/parted -s reform-system.img "mkpart primary ext4 4MiB -1"
-/sbin/parted -s reform-system.img print
-
-LOOPDISK=$(udisksctl loop-setup -f ./reform-system.img)
-
-LOOPDISK=$(echo $LOOPDISK | cut -f 5 -d " " | tr -d .)
-echo LOOPDISK: $LOOPDISK
-
-# format the partition
-echo "About to format ${LOOPDISK}p1!"
-#read -p "Are you sure? " -n 1 -r
+# create ext4 partition from target root directory directly at 4MiB offset, 8192MiB (8GiB) image size
+sudo /sbin/mke2fs -v -L 'MNTREFORM' -N 0 -O 64bit -E offset=4194304 -d target-userland -m 5 -r 1 -t ext4 reform-system.img 8188M
 
-sudo /sbin/mkfs.ext4 -q ${LOOPDISK}p1
+sudo /sbin/parted -s reform-system.img "mklabel msdos"
+sudo /sbin/parted -s reform-system.img "mkpart primary ext4 4MiB -1s"
+sudo /sbin/parted -s reform-system.img print
 
-# print the finished partition table
-/sbin/parted -s reform-system.img print
-
-sudo mount -t ext4 ${LOOPDISK}p1 target
-
-# install filesystem in image
-sudo cp -av target-userland/* target/
-
-# install custom u-boot
 # mkuboot.sh needs to run before. this creates flash.bin.
-
-sudo umount target
-
 # install u-boot for i.MX8M
-sudo dd if=./u-boot/flash.bin of=$LOOPDISK bs=1k seek=33
-
-# detach the image
-sudo udisksctl loop-delete -b $LOOPDISK
+sudo dd if=./u-boot/flash.bin of=reform-system.img conv=notrunc bs=1k seek=33
 
 echo Reform system image created: reform-system.img
 
diff --git a/reform2-imx8mq/mkuserland.sh b/reform2-imx8mq/mkuserland.sh
index 0a0a4df06a340085320ba309a3333150bf3f07c6..30915d0983954c2b33b962f30b32395bd129a38e 100755
--- a/reform2-imx8mq/mkuserland.sh
+++ b/reform2-imx8mq/mkuserland.sh
@@ -5,23 +5,12 @@
 ETC=./template-etc
 SKEL=./template-skel
 
-mbind() {
-	for d in dev proc sys
-	do
-		mount /$d target-userland/$d -o bind || echo "Bind-mounting /$d failed"
-	done
-}
-
-munbind() {
-	for d in dev proc sys
-	do
-		umount -f target-userland/$d || echo "Umounting $d failed"
-	done
-}
-
 set -e
 
-[[ -e target-userland ]] && echo "WARNING: Target userland already exist" && munbind
+# create random chardevs (only method that works in docker)
+mkdir -p target-userland/dev
+mknod target-userland/dev/random c 1 8
+mknod target-userland/dev/urandom c 1 9
 
 # create debian userland
 /usr/sbin/multistrap -d target-userland -f multistrap.conf
@@ -54,19 +43,19 @@ cp linux/arch/arm64/boot/Image target-userland/
 cp linux/arch/arm64/boot/dts/freescale/imx8mq-mnt-reform2.dtb target-userland/
 
 # install some kernel modules for dynamically loaded drivers
-mkdir -p target-userland/lib/modules
+#mkdir -p target-userland/lib/modules
 # HDMI driver module
-cp linux/drivers/gpu/drm/imx/cdns_mhdp_imx.ko target-userland/lib/modules/
+#cp linux/drivers/gpu/drm/imx/cdns_mhdp_imx.ko target-userland/lib/modules/
 # MIPI-DSI driver module
-cp linux/drivers/gpu/drm/bridge/nwl-dsi.ko target-userland/lib/modules/
+#cp linux/drivers/gpu/drm/bridge/nwl-dsi.ko target-userland/lib/modules/
 # Display engine (DCSS) module
-cp linux/drivers/gpu/drm/imx/dcss/imx-dcss.ko target-userland/lib/modules/
+#cp linux/drivers/gpu/drm/imx/dcss/imx-dcss.ko target-userland/lib/modules/
 
 mkdir -p target-userland/var/local/log
 
-mkdir -p target-userland/etc/systemd/system
-cp $ETC/reform-display.service target-userland/etc/systemd/system/
-cp $ETC/reform-toggle-display.sh target-userland/lib/modules/
+#mkdir -p target-userland/etc/systemd/system
+#cp $ETC/reform-display.service target-userland/etc/systemd/system/
+#cp $ETC/reform-toggle-display.sh target-userland/lib/modules/
 
 mkdir -p target-userland/etc/systemd/network
 cp $ETC/eth.network target-userland/etc/systemd/network/
@@ -78,11 +67,6 @@ cp $ETC/asound.state target-userland/var/lib/alsa/
 chown root:root -R target-userland
 chown root:shadow target-userland/etc/shadow
 
-mbind
-
-#mknod target-userland/dev/random c 1 8
-#mknod target-userland/dev/urandom c 1 9
-
 chroot target-userland /bin/bash <<EOF
 export DEBIAN_FRONTEND=noninteractive
 export DEBCONF_NONINTERACTIVE_SEEN=true
@@ -94,7 +78,7 @@ ln --force --symbolic /usr/share/zoneinfo/Europe/Berlin /etc/localtime
 echo "locales locales/default_environment_locale select en_US.UTF-8" | debconf-set-selections
 echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8" | debconf-set-selections
 dpkg --configure -a
-systemctl enable reform-display.service
+#systemctl enable reform-display.service
 
 chmod +s /usr/bin/sudo
 chmod +s /usr/bin/brightnessctl
@@ -105,5 +89,4 @@ EOF
 mkdir -p target-userland/etc/pulseaudio
 cp $ETC/daemon.conf target-userland/etc/pulse/
 
-munbind
 
diff --git a/reform2-imx8mq/mkuserland2.sh b/reform2-imx8mq/mkuserland2.sh
index 9ac3597af4bd40ded1927a81166c8c2473d2330c..61c359ead2a1f82ef1198bf29e551eaf90067b49 100755
--- a/reform2-imx8mq/mkuserland2.sh
+++ b/reform2-imx8mq/mkuserland2.sh
@@ -14,18 +14,18 @@ git clone --depth 1 https://gitlab.freedesktop.org/mesa/mesa.git
 git clone --depth 1 https://github.com/swaywm/wlroots.git
 git clone --depth 1 https://github.com/swaywm/sway.git
 git clone --depth 1 https://gitlab.freedesktop.org/xorg/xserver.git
-git clone --depth 1 https://github.com/mntmn/xfce4-appfinder
+#git clone --depth 1 https://github.com/mntmn/xfce4-appfinder
 git clone --depth 1 https://github.com/Alexays/Waybar.git
 
 cd drm
-meson --reconfigure build -Dplatforms=x11,wayland,drm -Dgallium-drivers=swrast,etnaviv,kmsro,virgl -Dgbm=enabled -Degl=enabled -Ddri3=enabled
+meson build -Detnaviv=true -Dradeon=false -Damdgpu=false -Dvmwgfx=false -Dfreedreno=false -Dvc4=false -Dnouveau=false
 ninja -C build install
 cd ..
 
 ldconfig
 
 cd mesa
-meson build -Dplatforms=x11,wayland,drm -Ddri3=true -Dgallium-drivers=swrast,etnaviv,kmsro -Dgbm=true -Degl=true
+meson build -Dplatforms=x11,wayland -Ddri3=true -Dgallium-drivers=swrast,etnaviv,kmsro,virgl -Dgbm=enabled -Degl=enabled
 
 # patch that disables broken MSAA in etnaviv (not yet upstreamed for some reason)
 patch -p1 <<ENDPATCH
@@ -117,11 +117,11 @@ meson build -Dxorg=true -Dxwayland=true -Dglamor=true -Dxwayland_eglstream=false
 ninja -C build install
 cd ..
 
-cd xfce4-appfinder
-./autogen.sh
-make -j$(nproc)
-make install
-cd ..
+#cd xfce4-appfinder
+#./autogen.sh
+#make -j$(nproc)
+#make install
+#cd ..
 
 cd Waybar
 meson build
diff --git a/reform2-imx8mq/multistrap.conf b/reform2-imx8mq/multistrap.conf
index 5958df959029e576f960368470fc8b1252bb0477..d7f240a861c187f25b5a5db6b04f5f1a35ba991d 100644
--- a/reform2-imx8mq/multistrap.conf
+++ b/reform2-imx8mq/multistrap.conf
@@ -10,9 +10,10 @@ cleanup=true
 # TODO deb-src missing!
 
 [Debian]
-packages=adduser apt apt-utils apt-file bsdmainutils procps gpgv debian-archive-keyring readline-common gnupg cpio init-system-helpers cron manpages netbase groff-base iproute2 ifupdown isc-dhcp-common isc-dhcp-client iptables iputils-ping kmod locales less net-tools netcat-traditional nfacct traceroute curl wget whiptail openssh-server openssh-client nano vim wpasupplicant htop ncdu ntpdate ntp usbutils fbset screen tmux brightnessctl coreutils alsa-utils sudo ca-certificates parted file git ed console-setup console-data unicode-data kbd gpm pciutils cryptsetup unzip telnet busybox lm-sensors systemd libpam-systemd systemd-sysv bash-completion ncurses-term sway grim slurp xwayland xterm xfce4-terminal rofi ircii mesa-utils w3m man-db pulseaudio pavucontrol           zlib1g-dev patch expat bison flex libunwind-dev libwayland-dev wayland-protocols libwayland-egl-backend-dev libx11-dev libx11-xcb-dev libxdamage-dev libxfixes-dev libxcb-dri3-dev libxcb-xfixes0-dev libxcb-sync-dev libxrandr-dev libxext-dev libxcb-glx0-dev libxcb-present-dev libxcb-dri2-0-dev gettext autopoint libpixman-1-dev libbsd-dev libxkbfile-dev libxcb-composite0-dev libxcb-xinput-dev libxcb-icccm4-dev libxfont-dev nettle-dev libdbus-1-dev libsystemd-dev libpciaccess-dev llvm-dev libudev-dev libmtdev-dev libevdev-dev libxshmfence-dev xutils-dev libdrm-dev libxxf86vm-dev meson gcc g++ python3-setuptools python3-mako xfonts-utils libepoxy-dev libjson-c-dev libpcre3-dev libpango1.0-dev libxkbcommon-dev libinput-dev autoconf make libtool intltool libxml2-dev libxfce4ui-2-dev libgarcon-1-dev xfce4-dev-tools      arc-theme thunar gnome-disk-utility gnome-system-monitor policykit-1 dconf-editor    eog evince mpv gedit engrampa    connman-gtk gnome-icon-theme breeze-icon-theme fonts-noto-color-emoji   libdbusmenu-gtk3-dev libfmt-dev libgirepository1.0-dev libgtkmm-3.0-dev libjsoncpp-dev libmpdclient-dev libnl-3-dev libnl-genl-3-dev libpulse-dev  libsigc++-2.0-dev libspdlog-dev gobject-introspection python3-psutil lxpolkit libblockdev-dm2 libblockdev-crypto2
+packages=adduser apt apt-utils apt-file bsdmainutils procps gpgv debian-archive-keyring readline-common gnupg cpio init-system-helpers cron manpages netbase groff-base iproute2 ifupdown isc-dhcp-common isc-dhcp-client iptables iputils-ping kmod locales less net-tools netcat-traditional nfacct traceroute curl wget whiptail openssh-server openssh-client nano vim wpasupplicant htop ncdu ntpdate ntp usbutils fbset screen tmux brightnessctl coreutils alsa-utils sudo ca-certificates parted file git ed console-setup console-data unicode-data kbd gpm pciutils cryptsetup unzip telnet busybox lm-sensors systemd libpam-systemd systemd-sysv bash-completion ncurses-term sway grim slurp xwayland xterm xfce4-terminal rofi ircii mesa-utils w3m man-db pulseaudio pavucontrol           zlib1g-dev patch expat bison flex libunwind-dev libwayland-dev wayland-protocols libwayland-egl-backend-dev libx11-dev libx11-xcb-dev libxdamage-dev libxfixes-dev libxcb-dri3-dev libxcb-xfixes0-dev libxcb-sync-dev libxrandr-dev libxext-dev libxcb-glx0-dev libxcb-present-dev libxcb-dri2-0-dev gettext autopoint libpixman-1-dev libbsd-dev libxkbfile-dev libxcb-composite0-dev libxcb-xinput-dev libxcb-icccm4-dev libxfont-dev nettle-dev libdbus-1-dev libsystemd-dev libpciaccess-dev llvm-dev libudev-dev libmtdev-dev libevdev-dev libxshmfence-dev xutils-dev libdrm-dev libxxf86vm-dev meson gcc g++ python3-setuptools python3-mako xfonts-utils libepoxy-dev libjson-c-dev libpcre3-dev libpango1.0-dev libxkbcommon-dev libinput-dev autoconf make libtool intltool libxml2-dev libxfce4ui-2-dev libgarcon-1-dev xfce4-dev-tools      arc-theme thunar gnome-disk-utility gnome-system-monitor policykit-1 dconf-editor    eog evince mpv gedit engrampa    connman-gtk gnome-icon-theme breeze-icon-theme fonts-noto-color-emoji   libdbusmenu-gtk3-dev libfmt-dev libgirepository1.0-dev libgtkmm-3.0-dev libjsoncpp-dev libmpdclient-dev libnl-3-dev libnl-genl-3-dev libpulse-dev  libsigc++-2.0-dev libspdlog-dev gobject-introspection python3-psutil lxpolkit 
+# libblockdev-dm2 libblockdev-crypto2
 # libreoffice libreoffice-gtk3 inkscape firefox-esr emacs grafx2 milkytracker
-source=http://http.debian.net/debian
+source=http://ftp.de.debian.org/debian
 keyring=debian-archive-keyring
 suite=bullseye
 omitdebsrc=false