xref: /freebsd/sys/contrib/openzfs/.github/workflows/scripts/qemu-3-deps-vm.sh (revision 92f340d137ba5d6db7610ba1dae35842e2c9c8ea)
1#!/usr/bin/env bash
2
3######################################################################
4# 3) install dependencies for compiling and loading
5#
6# $1: OS name (like 'fedora41')
7######################################################################
8
9set -eu
10
11function archlinux() {
12  echo "##[group]Running pacman -Syu"
13  sudo btrfs filesystem resize max /
14  sudo pacman -Syu --noconfirm
15  echo "##[endgroup]"
16
17  echo "##[group]Install Development Tools"
18  sudo pacman -Sy --noconfirm base-devel bc cpio cryptsetup dhclient dkms \
19    fakeroot fio gdb inetutils jq less linux linux-headers lsscsi nfs-utils \
20    parted pax perf python-packaging python-setuptools qemu-guest-agent ksh \
21    samba sysstat rng-tools rsync wget xxhash
22  echo "##[endgroup]"
23}
24
25function debian() {
26  export DEBIAN_FRONTEND="noninteractive"
27
28  echo "##[group]Running apt-get update+upgrade"
29  sudo apt-get update -y
30  sudo apt-get upgrade -y
31  echo "##[endgroup]"
32
33  echo "##[group]Install Development Tools"
34  sudo apt-get install -y \
35    acl alien attr autoconf bc cpio cryptsetup curl dbench dh-python dkms \
36    fakeroot fio gdb gdebi git ksh lcov isc-dhcp-client jq libacl1-dev \
37    libaio-dev libattr1-dev libblkid-dev libcurl4-openssl-dev libdevmapper-dev \
38    libelf-dev libffi-dev libmount-dev libpam0g-dev libselinux-dev libssl-dev \
39    libtool libtool-bin libudev-dev libunwind-dev linux-headers-$(uname -r) \
40    lsscsi nfs-kernel-server pamtester parted python3 python3-all-dev \
41    python3-cffi python3-dev python3-distlib python3-packaging \
42    python3-setuptools python3-sphinx qemu-guest-agent rng-tools rpm2cpio \
43    rsync samba sysstat uuid-dev watchdog wget xfslibs-dev  xxhash zlib1g-dev
44  echo "##[endgroup]"
45}
46
47function freebsd() {
48  export ASSUME_ALWAYS_YES="YES"
49
50  echo "##[group]Install Development Tools"
51  sudo pkg install -y autoconf automake autotools base64 checkbashisms fio \
52    gdb gettext gettext-runtime git gmake gsed jq ksh93 lcov libtool lscpu \
53    pkgconf python python3 pamtester pamtester qemu-guest-agent rsync xxhash
54  sudo pkg install -xy \
55    '^samba4[[:digit:]]+$' \
56    '^py3[[:digit:]]+-cffi$' \
57    '^py3[[:digit:]]+-sysctl$' \
58    '^py3[[:digit:]]+-packaging$'
59  echo "##[endgroup]"
60}
61
62# common packages for: almalinux, centos, redhat
63function rhel() {
64  echo "##[group]Running dnf update"
65  echo "max_parallel_downloads=10" | sudo -E tee -a /etc/dnf/dnf.conf
66  sudo dnf clean all
67  sudo dnf update -y --setopt=fastestmirror=1 --refresh
68  echo "##[endgroup]"
69
70  echo "##[group]Install Development Tools"
71
72  # Alma wants "Development Tools", Fedora 41 wants "development-tools"
73  if ! sudo dnf group install -y "Development Tools" ; then
74    echo "Trying 'development-tools' instead of 'Development Tools'"
75    sudo dnf group install -y development-tools
76  fi
77
78  sudo dnf install -y \
79    acl attr bc bzip2 cryptsetup curl dbench dkms elfutils-libelf-devel fio \
80    gdb git jq kernel-rpm-macros ksh libacl-devel libaio-devel \
81    libargon2-devel libattr-devel libblkid-devel libcurl-devel libffi-devel \
82    ncompress libselinux-devel libtirpc-devel libtool libudev-devel \
83    libuuid-devel lsscsi mdadm nfs-utils openssl-devel pam-devel pamtester \
84    parted perf python3 python3-cffi python3-devel python3-packaging \
85    kernel-devel python3-setuptools qemu-guest-agent rng-tools rpcgen \
86    rpm-build rsync samba sysstat systemd watchdog wget xfsprogs-devel xxhash \
87    zlib-devel
88  echo "##[endgroup]"
89}
90
91function tumbleweed() {
92  echo "##[group]Running zypper is TODO!"
93  sleep 23456
94  echo "##[endgroup]"
95}
96
97# Install dependencies
98case "$1" in
99  almalinux8)
100    echo "##[group]Enable epel and powertools repositories"
101    sudo dnf config-manager -y --set-enabled powertools
102    sudo dnf install -y epel-release
103    echo "##[endgroup]"
104    rhel
105    echo "##[group]Install kernel-abi-whitelists"
106    sudo dnf install -y kernel-abi-whitelists
107    echo "##[endgroup]"
108    ;;
109  almalinux9|centos-stream9|centos-stream10)
110    echo "##[group]Enable epel and crb repositories"
111    sudo dnf config-manager -y --set-enabled crb
112    sudo dnf install -y epel-release
113    echo "##[endgroup]"
114    rhel
115    echo "##[group]Install kernel-abi-stablelists"
116    sudo dnf install -y kernel-abi-stablelists
117    echo "##[endgroup]"
118    ;;
119  archlinux)
120    archlinux
121    ;;
122  debian*)
123    echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections
124    debian
125    echo "##[group]Install Debian specific"
126    sudo apt-get install -yq linux-perf dh-sequence-dkms
127    echo "##[endgroup]"
128    ;;
129  fedora*)
130    rhel
131    sudo dnf install -y libunwind-devel
132    ;;
133  freebsd*)
134    freebsd
135    ;;
136  tumbleweed)
137    tumbleweed
138    ;;
139  ubuntu*)
140    debian
141    echo "##[group]Install Ubuntu specific"
142    sudo apt-get install -yq linux-tools-common libtirpc-dev \
143      linux-modules-extra-$(uname -r)
144    if [ "$1" != "ubuntu20" ]; then
145      sudo apt-get install -yq dh-sequence-dkms
146    fi
147    echo "##[endgroup]"
148    echo "##[group]Delete Ubuntu OpenZFS modules"
149    for i in $(find /lib/modules -name zfs -type d); do sudo rm -rvf $i; done
150    echo "##[endgroup]"
151    ;;
152esac
153
154# This script is used for checkstyle + zloop deps also.
155# Install only the needed packages and exit - when used this way.
156test -z "${ONLY_DEPS:-}" || exit 0
157
158# Start services
159echo "##[group]Enable services"
160case "$1" in
161  freebsd*)
162    # add virtio things
163    echo 'virtio_load="YES"' | sudo -E tee -a /boot/loader.conf
164    for i in balloon blk console random scsi; do
165      echo "virtio_${i}_load=\"YES\"" | sudo -E tee -a /boot/loader.conf
166    done
167    echo "fdescfs /dev/fd fdescfs rw 0 0" | sudo -E tee -a /etc/fstab
168    sudo -E mount /dev/fd
169    sudo -E touch /etc/zfs/exports
170    sudo -E sysrc mountd_flags="/etc/zfs/exports"
171    echo '[global]' | sudo -E tee /usr/local/etc/smb4.conf >/dev/null
172    sudo -E service nfsd enable
173    sudo -E service qemu-guest-agent enable
174    sudo -E service samba_server enable
175    ;;
176  debian*|ubuntu*)
177    sudo -E systemctl enable nfs-kernel-server
178    sudo -E systemctl enable qemu-guest-agent
179    sudo -E systemctl enable smbd
180    ;;
181  *)
182    # All other linux distros
183    sudo -E systemctl enable nfs-server
184    sudo -E systemctl enable qemu-guest-agent
185    sudo -E systemctl enable smb
186    ;;
187esac
188echo "##[endgroup]"
189
190# Setup Kernel cmdline
191CMDLINE="console=tty0 console=ttyS0,115200n8"
192CMDLINE="$CMDLINE selinux=0"
193CMDLINE="$CMDLINE random.trust_cpu=on"
194CMDLINE="$CMDLINE no_timer_check"
195case "$1" in
196  almalinux*|centos*|fedora*)
197    GRUB_CFG="/boot/grub2/grub.cfg"
198    GRUB_MKCONFIG="grub2-mkconfig"
199    CMDLINE="$CMDLINE biosdevname=0 net.ifnames=0"
200    echo 'GRUB_SERIAL_COMMAND="serial --speed=115200"' \
201      | sudo tee -a /etc/default/grub >/dev/null
202    ;;
203  ubuntu24)
204    GRUB_CFG="/boot/grub/grub.cfg"
205    GRUB_MKCONFIG="grub-mkconfig"
206    echo 'GRUB_DISABLE_OS_PROBER="false"' \
207      | sudo tee -a /etc/default/grub >/dev/null
208    ;;
209  *)
210    GRUB_CFG="/boot/grub/grub.cfg"
211    GRUB_MKCONFIG="grub-mkconfig"
212    ;;
213esac
214
215case "$1" in
216  archlinux|freebsd*)
217    true
218    ;;
219  *)
220    echo "##[group]Edit kernel cmdline"
221    sudo sed -i -e '/^GRUB_CMDLINE_LINUX/d' /etc/default/grub || true
222    echo "GRUB_CMDLINE_LINUX=\"$CMDLINE\"" \
223      | sudo tee -a /etc/default/grub >/dev/null
224    sudo $GRUB_MKCONFIG -o $GRUB_CFG
225    echo "##[endgroup]"
226    ;;
227esac
228
229# reset cloud-init configuration and poweroff
230sudo cloud-init clean --logs
231sleep 2 && sudo poweroff &
232exit 0
233