qemuDir=$(cd "${BASH_SOURCE[0]%/*}" && pwd) tmpDir=/tmp/nix-bitcoin-qemu-vm mkdir -p $tmpDir # Cleanup on exit cleanup() { set +eu if [[ $qemuPID ]]; then kill -9 $qemuPID fi rm -rf $tmpDir } trap "cleanup" EXIT identityFile=$qemuDir/id-vm chmod 0600 $identityFile runVM() { vm=$1 vmNumCPUs=$2 vmMemoryMiB=$3 sshPort=$4 export NIX_DISK_IMAGE=$tmpDir/img export QEMU_NET_OPTS=hostfwd=tcp::$sshPort-:22 /dev/null & qemuPID=$! } vmWaitForSSH() { echo printf "Waiting for SSH connection..." while ! c : 2>/dev/null; do :; done echo } # Run command in VM c() { ssh -p $sshPort -i $identityFile -o ConnectTimeout=1 \ -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR \ -o ControlMaster=auto -o ControlPath=$tmpDir/ssh-connection -o ControlPersist=60 \ root@127.0.0.1 "$@" } export identityFile export sshPort export tmpDir export -f c