#!/bin/bash -e # This script will use QEMU to test gf-complete especially SIMD support # on different architectures and cpus. It will boot a qemu machine # and run an Ubuntu cloud image. All testing will happen inside the # QEMU machine. # The following packages are required: # qemu-system-aarch64 # qemu-system-arm # qemu-system-x86_64 # genisoimage script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" qemu_dir="${script_dir}/.qemu" ssh_port=2222 ssh_pubkey_file="${qemu_dir}/qemu.pub" ssh_key_file="${qemu_dir}/qemu" mkdir -p "${qemu_dir}" cleanup() { if [[ -n "$(jobs -p)" ]]; then echo killing qemu processes "$(jobs -p)" kill $(jobs -p) fi } trap cleanup EXIT start_qemu() { arch=$1 cpu=$2 image_version="xenial" image_url_base="http://cloud-images.ubuntu.com/${image_version}/current" case $arch in i[[3456]]86*|x86_64*|amd64*) image_kernel="${image_version}-server-cloudimg-amd64-vmlinuz-generic" image_initrd="${image_version}-server-cloudimg-amd64-initrd-generic" image_disk="${image_version}-server-cloudimg-amd64-disk1.img" ;; aarch64*) image_kernel="${image_version}-server-cloudimg-arm64-vmlinuz-generic" image_initrd="${image_version}-server-cloudimg-arm64-initrd-generic" image_disk="${image_version}-server-cloudimg-arm64-disk1.img" ;; arm*) image_kernel="${image_version}-server-cloudimg-armhf-vmlinuz-lpae" image_initrd="${image_version}-server-cloudimg-armhf-initrd-generic-lpae" image_disk="${image_version}-server-cloudimg-armhf-disk1.img" ;; *) die "Unsupported arch" ;; esac [[ -f ${qemu_dir}/${image_kernel} ]] || wget -O ${qemu_dir}/${image_kernel} ${image_url_base}/unpacked/${image_kernel} [[ -f ${qemu_dir}/${image_initrd} ]] || wget -O ${qemu_dir}/${image_initrd} ${image_url_base}/unpacked/${image_initrd} [[ -f ${qemu_dir}/${image_disk} ]] || wget -O ${qemu_dir}/${image_disk} ${image_url_base}/${image_disk} #create a delta disk to keep the original image clean delta_disk="${qemu_dir}/disk.img" rm -f ${delta_disk} qemu-img create -q -f qcow2 -b "${qemu_dir}/${image_disk}" ${delta_disk} # generate an ssh keys [[ -f ${ssh_pubkey_file} ]] || ssh-keygen -q -N "" -f ${ssh_key_file} # create a config disk to set the SSH keys cat > "${qemu_dir}/meta-data" < "${qemu_dir}/user-data" <