1#!/usr/bin/env bash 2 3###################################################################### 4# 1) setup qemu instance on action runner 5###################################################################### 6 7set -eu 8 9# install needed packages 10export DEBIAN_FRONTEND="noninteractive" 11sudo apt-get -y update 12sudo apt-get install -y axel cloud-image-utils daemonize guestfs-tools \ 13 virt-manager linux-modules-extra-$(uname -r) zfsutils-linux 14 15# generate ssh keys 16rm -f ~/.ssh/id_ed25519 17ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -q -N "" 18 19# not needed 20sudo systemctl stop docker.socket 21sudo systemctl stop multipathd.socket 22 23# remove default swapfile and /mnt 24sudo swapoff -a 25sudo umount -l /mnt 26DISK="/dev/disk/cloud/azure_resource-part1" 27sudo sed -e "s|^$DISK.*||g" -i /etc/fstab 28sudo wipefs -aq $DISK 29sudo systemctl daemon-reload 30 31sudo modprobe loop 32sudo modprobe zfs 33 34# partition the disk as needed 35DISK="/dev/disk/cloud/azure_resource" 36sudo sgdisk --zap-all $DISK 37sudo sgdisk -p \ 38 -n 1:0:+16G -c 1:"swap" \ 39 -n 2:0:0 -c 2:"tests" \ 40$DISK 41sync 42sleep 1 43 44# swap with same size as RAM (16GiB) 45sudo mkswap $DISK-part1 46sudo swapon $DISK-part1 47 48# JBOD 2xdisk for OpenZFS storage (test vm's) 49SSD1="$DISK-part2" 50sudo fallocate -l 12G /test.ssd2 51SSD2=$(sudo losetup -b 4096 -f /test.ssd2 --show) 52 53# adjust zfs module parameter and create pool 54exec 1>/dev/null 55ARC_MIN=$((1024*1024*256)) 56ARC_MAX=$((1024*1024*512)) 57echo $ARC_MIN | sudo tee /sys/module/zfs/parameters/zfs_arc_min 58echo $ARC_MAX | sudo tee /sys/module/zfs/parameters/zfs_arc_max 59echo 1 | sudo tee /sys/module/zfs/parameters/zvol_use_blk_mq 60sudo zpool create -f -o ashift=12 zpool $SSD1 $SSD2 -O relatime=off \ 61 -O atime=off -O xattr=sa -O compression=lz4 -O sync=disabled \ 62 -O redundant_metadata=none -O mountpoint=/mnt/tests 63 64# no need for some scheduler 65for i in /sys/block/s*/queue/scheduler; do 66 echo "none" | sudo tee $i 67done 68