diff --git a/tools/build-image.sh b/tools/build-image.sh
index 9ccd218df0..19f192b55c 100755
--- a/tools/build-image.sh
+++ b/tools/build-image.sh
@@ -31,10 +31,13 @@ set -e
 # export DISTRO=${DISTRO:-fedora-minimal}
 export DISTRO=${DISTRO:-ubuntu-minimal}
 
-## Overrite the release
+## Override the release
 # export DIB_RELEASE=${DIB_RELEASE:-trusty}
 # export DIB_RELEASE=${DIB_RELEASE:-25} # fedora
 
+## Override the arch
+# export ARCH=arm64
+
 export ELEMENTS_PATH=${ELEMENTS_PATH:-nodepool/elements}
 export IMAGE_NAME=${IMAGE_NAME:-devstack-gate}
 export NODEPOOL_SCRIPTDIR=${NODEPOOL_SCRIPTDIR:-nodepool/scripts}
@@ -96,11 +99,23 @@ fi
 # export DIB_DEV_USER_PWDLESS_SUDO=1
 # export DIB_DEV_USER_PASSWORD=devuser
 
+if [[ "${ARCH:-}" == "arm64" ]]; then
+    # ARM64 requires EFI to boot
+    BLOCK_DEVICE=block-device-efi
+
+    # These arguments might be specific to Linaro cloud?
+    EXTRA_UPLOAD_ARGS='--property hw_firmware_type=uefi '  \
+        '--property os_command_line="console=ttyAMA0" '    \
+        '--property hw_disk_bus=scsi '                     \
+        '--property hw_scsi_model=virtio-scsi'
+fi
+
 ## The list of elements below should match those configured
 ## in nodepool/nodepool.yaml
 
 disk-image-create -x --no-tmpfs -o $IMAGE_NAME \
     $DISTRO \
+    ${BLOCK_DEVICE:-block-device-mbr} \
     vm \
     simple-init \
     openstack-repos \
@@ -112,4 +127,4 @@ disk-image-create -x --no-tmpfs -o $IMAGE_NAME \
 
 echo "Created new image: $IMAGE_NAME"
 echo "You can now upload it with:"
-echo "  openstack image create "${DISTRO}" --file $IMAGE_NAME --disk-format=qcow2 --container-format bare"
+echo "  openstack image create "${DISTRO}" --file $IMAGE_NAME --disk-format=qcow2 --container-format=bare ${EXTRA_UPLOAD_ARGS:-}"