xref: /freebsd/sys/contrib/openzfs/.github/workflows/scripts/qemu-1-setup.sh (revision 24e4dcf4ba5e9dedcf89efd358ea3e1fe5867020)
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