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