1#!/usr/bin/env bash 2 3###################################################################### 4# 1) setup qemu instance on action runner 5###################################################################### 6 7set -eu 8 9# We've been seeing this script take over 15min to run. This may or 10# may not be normal. Just to get a little more insight, print out 11# a message to stdout with the top running process, and do this every 12# 30 seconds. We can delete this watchdog later once we get a better 13# handle on what the timeout value should be. 14(while [ 1 ] ; do sleep 30 && echo "[watchdog: $(ps -eo cmd --sort=-pcpu | head -n 2 | tail -n 1)}')]"; done) & 15 16# install needed packages 17export DEBIAN_FRONTEND="noninteractive" 18sudo apt-get -y update 19sudo apt-get install -y axel cloud-image-utils daemonize guestfs-tools \ 20 virt-manager linux-modules-extra-$(uname -r) zfsutils-linux 21 22# generate ssh keys 23rm -f ~/.ssh/id_ed25519 24ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -q -N "" 25 26# not needed 27sudo systemctl stop docker.socket 28sudo systemctl stop multipathd.socket 29 30# remove default swapfile and /mnt 31sudo swapoff -a 32sudo umount -l /mnt 33DISK="/dev/disk/cloud/azure_resource-part1" 34sudo sed -e "s|^$DISK.*||g" -i /etc/fstab 35sudo wipefs -aq $DISK 36sudo systemctl daemon-reload 37 38sudo modprobe loop 39sudo modprobe zfs 40 41# partition the disk as needed 42DISK="/dev/disk/cloud/azure_resource" 43sudo sgdisk --zap-all $DISK 44sudo sgdisk -p \ 45 -n 1:0:+16G -c 1:"swap" \ 46 -n 2:0:0 -c 2:"tests" \ 47$DISK 48sync 49sleep 1 50 51# swap with same size as RAM (16GiB) 52sudo mkswap $DISK-part1 53sudo swapon $DISK-part1 54 55# JBOD 2xdisk for OpenZFS storage (test vm's) 56SSD1="$DISK-part2" 57sudo fallocate -l 12G /test.ssd2 58SSD2=$(sudo losetup -b 4096 -f /test.ssd2 --show) 59 60# adjust zfs module parameter and create pool 61exec 1>/dev/null 62ARC_MIN=$((1024*1024*256)) 63ARC_MAX=$((1024*1024*512)) 64echo $ARC_MIN | sudo tee /sys/module/zfs/parameters/zfs_arc_min 65echo $ARC_MAX | sudo tee /sys/module/zfs/parameters/zfs_arc_max 66echo 1 | sudo tee /sys/module/zfs/parameters/zvol_use_blk_mq 67sudo zpool create -f -o ashift=12 zpool $SSD1 $SSD2 -O relatime=off \ 68 -O atime=off -O xattr=sa -O compression=lz4 -O sync=disabled \ 69 -O redundant_metadata=none -O mountpoint=/mnt/tests 70 71# no need for some scheduler 72for i in /sys/block/s*/queue/scheduler; do 73 echo "none" | sudo tee $i 74done 75 76# Kill off our watchdog 77kill $(jobs -p) 78