diff --git a/roles/gitlab_runner/files/libvirt-executor-update-base-image b/roles/gitlab_runner/files/libvirt-executor-update-base-image
index 9fc17c750f4cc439463ab9d9c9158d5042a9bd57..539f0f73285668aa80654703266f6f785c2d192f 100755
--- a/roles/gitlab_runner/files/libvirt-executor-update-base-image
+++ b/roles/gitlab_runner/files/libvirt-executor-update-base-image
@@ -14,6 +14,11 @@ cleanup() {
   rm -r "${tmpdir}"
 }
 
+arch-chroot() {
+  # Workaround https://github.com/archlinux/arch-install-scripts/issues/21
+  command arch-chroot "${1}" unshare --fork --pid "${@:2}"
+}
+
 tmpdir="$(mktemp --directory --tmpdir="/var/tmp")"
 trap cleanup EXIT
 
@@ -27,13 +32,8 @@ qemu-img convert -f qcow2 -O raw Arch-Linux-x86_64-basic.qcow2 Arch-Linux-x86_64
 loopdev="$(losetup --find --partscan --show "${image}")"
 mount --mkdir "${loopdev}p2" mnt
 
-arch-chroot mnt bash -e <<'EOF'
-pacman-key --init
-pacman-key --populate
-pid="$(pgrep gpg-agent)"
-gpgconf --homedir /etc/pacman.d/gnupg --kill gpg-agent
-tail --pid="${pid}" -f /dev/null
-EOF
+arch-chroot mnt pacman-key --init
+arch-chroot mnt pacman-key --populate
 
 # shellcheck disable=SC2016
 printf 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch' > mnt/etc/pacman.d/mirrorlist