#!/usr/bin/env bash # shellcheck disable=SC1091 # The relative paths in this file only become valid at runtime. # shellcheck disable=SC2086 # we want word splitting set -e VSOCK_STDOUT=$1 VSOCK_STDERR=$2 VM_TEMP_DIR=$3 mount -t proc none /proc mount -t sysfs none /sys mkdir -p /dev/pts mount -t devpts devpts /dev/pts mkdir /dev/shm mount -t tmpfs -o noexec,nodev,nosuid tmpfs /dev/shm mount -t tmpfs tmpfs /tmp . ${VM_TEMP_DIR}/crosvm-env.sh . ${VM_TEMP_DIR}/setup-test-env.sh # .gitlab-ci.yml script variable is using relative paths to install directory, # so change to that dir before running `crosvm-script` cd "${CI_PROJECT_DIR}" # The exception is the dEQP binary, as it needs to run from its own directory [ -z "${DEQP_BIN_DIR}" ] || cd "${DEQP_BIN_DIR}" # Use a FIFO to collect relevant error messages STDERR_FIFO=/tmp/crosvm-stderr.fifo mkfifo -m 600 ${STDERR_FIFO} dmesg --level crit,err,warn -w > ${STDERR_FIFO} & DMESG_PID=$! # Transfer the errors and crosvm-script output via a pair of virtio-vsocks socat -d -u pipe:${STDERR_FIFO} vsock-listen:${VSOCK_STDERR} & socat -d -U vsock-listen:${VSOCK_STDOUT} \ system:"stdbuf -eL bash ${VM_TEMP_DIR}/crosvm-script.sh 2> ${STDERR_FIFO}; echo \$? > ${VM_TEMP_DIR}/exit_code",nofork kill ${DMESG_PID} wait sync poweroff -d -n -f || true sleep 1 # Just in case init would exit before the kernel shuts down the VM