xref: /freebsd-src/sys/contrib/openzfs/.github/workflows/scripts/qemu-3-deps.sh (revision dd21556857e8d40f66bf5ad54754d9d52669ebf7)
17a7741afSMartin Matuska#!/usr/bin/env bash
27a7741afSMartin Matuska
37a7741afSMartin Matuska######################################################################
47a7741afSMartin Matuska# 3) install dependencies for compiling and loading
57a7741afSMartin Matuska######################################################################
67a7741afSMartin Matuska
77a7741afSMartin Matuskaset -eu
87a7741afSMartin Matuska
97a7741afSMartin Matuskafunction archlinux() {
107a7741afSMartin Matuska  echo "##[group]Running pacman -Syu"
117a7741afSMartin Matuska  sudo btrfs filesystem resize max /
127a7741afSMartin Matuska  sudo pacman -Syu --noconfirm
137a7741afSMartin Matuska  echo "##[endgroup]"
147a7741afSMartin Matuska
157a7741afSMartin Matuska  echo "##[group]Install Development Tools"
165c65a0a9SMartin Matuska  sudo pacman -Sy --noconfirm base-devel bc cpio cryptsetup dhclient dkms \
175c65a0a9SMartin Matuska    fakeroot fio gdb inetutils jq less linux linux-headers lsscsi nfs-utils \
185c65a0a9SMartin Matuska    parted pax perf python-packaging python-setuptools qemu-guest-agent ksh \
195c65a0a9SMartin Matuska    samba sysstat rng-tools rsync wget xxhash
207a7741afSMartin Matuska  echo "##[endgroup]"
217a7741afSMartin Matuska}
227a7741afSMartin Matuska
237a7741afSMartin Matuskafunction debian() {
247a7741afSMartin Matuska  export DEBIAN_FRONTEND="noninteractive"
257a7741afSMartin Matuska
267a7741afSMartin Matuska  echo "##[group]Running apt-get update+upgrade"
277a7741afSMartin Matuska  sudo apt-get update -y
287a7741afSMartin Matuska  sudo apt-get upgrade -y
297a7741afSMartin Matuska  echo "##[endgroup]"
307a7741afSMartin Matuska
317a7741afSMartin Matuska  echo "##[group]Install Development Tools"
327a7741afSMartin Matuska  sudo apt-get install -y \
335c65a0a9SMartin Matuska    acl alien attr autoconf bc cpio cryptsetup curl dbench dh-python dkms \
345c65a0a9SMartin Matuska    fakeroot fio gdb gdebi git ksh lcov isc-dhcp-client jq libacl1-dev \
355c65a0a9SMartin Matuska    libaio-dev libattr1-dev libblkid-dev libcurl4-openssl-dev libdevmapper-dev \
365c65a0a9SMartin Matuska    libelf-dev libffi-dev libmount-dev libpam0g-dev libselinux-dev libssl-dev \
375c65a0a9SMartin Matuska    libtool libtool-bin libudev-dev libunwind-dev linux-headers-$(uname -r) \
387a7741afSMartin Matuska    lsscsi nfs-kernel-server pamtester parted python3 python3-all-dev \
397a7741afSMartin Matuska    python3-cffi python3-dev python3-distlib python3-packaging \
407a7741afSMartin Matuska    python3-setuptools python3-sphinx qemu-guest-agent rng-tools rpm2cpio \
417a7741afSMartin Matuska    rsync samba sysstat uuid-dev watchdog wget xfslibs-dev  xxhash zlib1g-dev
427a7741afSMartin Matuska  echo "##[endgroup]"
437a7741afSMartin Matuska}
447a7741afSMartin Matuska
457a7741afSMartin Matuskafunction freebsd() {
467a7741afSMartin Matuska  export ASSUME_ALWAYS_YES="YES"
477a7741afSMartin Matuska
487a7741afSMartin Matuska  echo "##[group]Install Development Tools"
497a7741afSMartin Matuska  sudo pkg install -y autoconf automake autotools base64 checkbashisms fio \
507a7741afSMartin Matuska    gdb gettext gettext-runtime git gmake gsed jq ksh93 lcov libtool lscpu \
517a7741afSMartin Matuska    pkgconf python python3 pamtester pamtester qemu-guest-agent rsync xxhash
527a7741afSMartin Matuska  sudo pkg install -xy \
537a7741afSMartin Matuska    '^samba4[[:digit:]]+$' \
547a7741afSMartin Matuska    '^py3[[:digit:]]+-cffi$' \
557a7741afSMartin Matuska    '^py3[[:digit:]]+-sysctl$' \
567a7741afSMartin Matuska    '^py3[[:digit:]]+-packaging$'
577a7741afSMartin Matuska  echo "##[endgroup]"
587a7741afSMartin Matuska}
597a7741afSMartin Matuska
607a7741afSMartin Matuska# common packages for: almalinux, centos, redhat
617a7741afSMartin Matuskafunction rhel() {
627a7741afSMartin Matuska  echo "##[group]Running dnf update"
637a7741afSMartin Matuska  echo "max_parallel_downloads=10" | sudo -E tee -a /etc/dnf/dnf.conf
647a7741afSMartin Matuska  sudo dnf clean all
657a7741afSMartin Matuska  sudo dnf update -y --setopt=fastestmirror=1 --refresh
667a7741afSMartin Matuska  echo "##[endgroup]"
677a7741afSMartin Matuska
687a7741afSMartin Matuska  echo "##[group]Install Development Tools"
695c65a0a9SMartin Matuska
705c65a0a9SMartin Matuska  # Alma wants "Development Tools", Fedora 41 wants "development-tools"
715c65a0a9SMartin Matuska  if ! sudo dnf group install -y "Development Tools" ; then
725c65a0a9SMartin Matuska    echo "Trying 'development-tools' instead of 'Development Tools'"
735c65a0a9SMartin Matuska    sudo dnf group install -y development-tools
745c65a0a9SMartin Matuska  fi
755c65a0a9SMartin Matuska
767a7741afSMartin Matuska  sudo dnf install -y \
775c65a0a9SMartin Matuska    acl attr bc bzip2 cryptsetup curl dbench dkms elfutils-libelf-devel fio \
785c65a0a9SMartin Matuska    gdb git jq kernel-rpm-macros ksh libacl-devel libaio-devel \
795c65a0a9SMartin Matuska    libargon2-devel libattr-devel libblkid-devel libcurl-devel libffi-devel \
805c65a0a9SMartin Matuska    ncompress libselinux-devel libtirpc-devel libtool libudev-devel \
815c65a0a9SMartin Matuska    libuuid-devel lsscsi mdadm nfs-utils openssl-devel pam-devel pamtester \
825c65a0a9SMartin Matuska    parted perf python3 python3-cffi python3-devel python3-packaging \
835c65a0a9SMartin Matuska    kernel-devel python3-setuptools qemu-guest-agent rng-tools rpcgen \
845c65a0a9SMartin Matuska    rpm-build rsync samba sysstat systemd watchdog wget xfsprogs-devel xxhash \
855c65a0a9SMartin Matuska    zlib-devel
867a7741afSMartin Matuska  echo "##[endgroup]"
877a7741afSMartin Matuska}
887a7741afSMartin Matuska
897a7741afSMartin Matuskafunction tumbleweed() {
907a7741afSMartin Matuska  echo "##[group]Running zypper is TODO!"
917a7741afSMartin Matuska  sleep 23456
927a7741afSMartin Matuska  echo "##[endgroup]"
937a7741afSMartin Matuska}
947a7741afSMartin Matuska
957a7741afSMartin Matuska# Install dependencies
967a7741afSMartin Matuskacase "$1" in
977a7741afSMartin Matuska  almalinux8)
987a7741afSMartin Matuska    echo "##[group]Enable epel and powertools repositories"
997a7741afSMartin Matuska    sudo dnf config-manager -y --set-enabled powertools
1007a7741afSMartin Matuska    sudo dnf install -y epel-release
1017a7741afSMartin Matuska    echo "##[endgroup]"
1027a7741afSMartin Matuska    rhel
1037a7741afSMartin Matuska    echo "##[group]Install kernel-abi-whitelists"
1047a7741afSMartin Matuska    sudo dnf install -y kernel-abi-whitelists
1057a7741afSMartin Matuska    echo "##[endgroup]"
1067a7741afSMartin Matuska    ;;
107*dd215568SMartin Matuska  almalinux9|centos-stream9|centos-stream10)
1087a7741afSMartin Matuska    echo "##[group]Enable epel and crb repositories"
1097a7741afSMartin Matuska    sudo dnf config-manager -y --set-enabled crb
1107a7741afSMartin Matuska    sudo dnf install -y epel-release
1117a7741afSMartin Matuska    echo "##[endgroup]"
1127a7741afSMartin Matuska    rhel
1137a7741afSMartin Matuska    echo "##[group]Install kernel-abi-stablelists"
1147a7741afSMartin Matuska    sudo dnf install -y kernel-abi-stablelists
1157a7741afSMartin Matuska    echo "##[endgroup]"
1167a7741afSMartin Matuska    ;;
1177a7741afSMartin Matuska  archlinux)
1187a7741afSMartin Matuska    archlinux
1197a7741afSMartin Matuska    ;;
1207a7741afSMartin Matuska  debian*)
1215c65a0a9SMartin Matuska    echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections
1227a7741afSMartin Matuska    debian
1237a7741afSMartin Matuska    echo "##[group]Install Debian specific"
1247a7741afSMartin Matuska    sudo apt-get install -yq linux-perf dh-sequence-dkms
1257a7741afSMartin Matuska    echo "##[endgroup]"
1267a7741afSMartin Matuska    ;;
1277a7741afSMartin Matuska  fedora*)
1287a7741afSMartin Matuska    rhel
1297a7741afSMartin Matuska    ;;
1307a7741afSMartin Matuska  freebsd*)
1317a7741afSMartin Matuska    freebsd
1327a7741afSMartin Matuska    ;;
1337a7741afSMartin Matuska  tumbleweed)
1347a7741afSMartin Matuska    tumbleweed
1357a7741afSMartin Matuska    ;;
1367a7741afSMartin Matuska  ubuntu*)
1377a7741afSMartin Matuska    debian
1387a7741afSMartin Matuska    echo "##[group]Install Ubuntu specific"
1397a7741afSMartin Matuska    sudo apt-get install -yq linux-tools-common libtirpc-dev \
1407a7741afSMartin Matuska      linux-modules-extra-$(uname -r)
1417a7741afSMartin Matuska    if [ "$1" != "ubuntu20" ]; then
1427a7741afSMartin Matuska      sudo apt-get install -yq dh-sequence-dkms
1437a7741afSMartin Matuska    fi
1447a7741afSMartin Matuska    echo "##[endgroup]"
1457a7741afSMartin Matuska    echo "##[group]Delete Ubuntu OpenZFS modules"
1467a7741afSMartin Matuska    for i in $(find /lib/modules -name zfs -type d); do sudo rm -rvf $i; done
1477a7741afSMartin Matuska    echo "##[endgroup]"
1487a7741afSMartin Matuska    ;;
1497a7741afSMartin Matuskaesac
1507a7741afSMartin Matuska
1517a7741afSMartin Matuska# This script is used for checkstyle + zloop deps also.
1527a7741afSMartin Matuska# Install only the needed packages and exit - when used this way.
1537a7741afSMartin Matuskatest -z "${ONLY_DEPS:-}" || exit 0
1547a7741afSMartin Matuska
1557a7741afSMartin Matuska# Start services
1567a7741afSMartin Matuskaecho "##[group]Enable services"
1577a7741afSMartin Matuskacase "$1" in
1587a7741afSMartin Matuska  freebsd*)
1597a7741afSMartin Matuska    # add virtio things
1607a7741afSMartin Matuska    echo 'virtio_load="YES"' | sudo -E tee -a /boot/loader.conf
1617a7741afSMartin Matuska    for i in balloon blk console random scsi; do
1627a7741afSMartin Matuska      echo "virtio_${i}_load=\"YES\"" | sudo -E tee -a /boot/loader.conf
1637a7741afSMartin Matuska    done
1647a7741afSMartin Matuska    echo "fdescfs /dev/fd fdescfs rw 0 0" | sudo -E tee -a /etc/fstab
1657a7741afSMartin Matuska    sudo -E mount /dev/fd
1667a7741afSMartin Matuska    sudo -E touch /etc/zfs/exports
1677a7741afSMartin Matuska    sudo -E sysrc mountd_flags="/etc/zfs/exports"
1687a7741afSMartin Matuska    echo '[global]' | sudo -E tee /usr/local/etc/smb4.conf >/dev/null
1697a7741afSMartin Matuska    sudo -E service nfsd enable
1707a7741afSMartin Matuska    sudo -E service qemu-guest-agent enable
1717a7741afSMartin Matuska    sudo -E service samba_server enable
1727a7741afSMartin Matuska    ;;
1737a7741afSMartin Matuska  debian*|ubuntu*)
1747a7741afSMartin Matuska    sudo -E systemctl enable nfs-kernel-server
1757a7741afSMartin Matuska    sudo -E systemctl enable qemu-guest-agent
1767a7741afSMartin Matuska    sudo -E systemctl enable smbd
1777a7741afSMartin Matuska    ;;
1787a7741afSMartin Matuska  *)
1797a7741afSMartin Matuska    # All other linux distros
1807a7741afSMartin Matuska    sudo -E systemctl enable nfs-server
1817a7741afSMartin Matuska    sudo -E systemctl enable qemu-guest-agent
1827a7741afSMartin Matuska    sudo -E systemctl enable smb
1837a7741afSMartin Matuska    ;;
1847a7741afSMartin Matuskaesac
1857a7741afSMartin Matuskaecho "##[endgroup]"
1867a7741afSMartin Matuska
1877a7741afSMartin Matuska# Setup Kernel cmdline
1887a7741afSMartin MatuskaCMDLINE="console=tty0 console=ttyS0,115200n8"
1897a7741afSMartin MatuskaCMDLINE="$CMDLINE selinux=0"
1907a7741afSMartin MatuskaCMDLINE="$CMDLINE random.trust_cpu=on"
1917a7741afSMartin MatuskaCMDLINE="$CMDLINE no_timer_check"
1927a7741afSMartin Matuskacase "$1" in
1937a7741afSMartin Matuska  almalinux*|centos*|fedora*)
1947a7741afSMartin Matuska    GRUB_CFG="/boot/grub2/grub.cfg"
1957a7741afSMartin Matuska    GRUB_MKCONFIG="grub2-mkconfig"
1967a7741afSMartin Matuska    CMDLINE="$CMDLINE biosdevname=0 net.ifnames=0"
1977a7741afSMartin Matuska    echo 'GRUB_SERIAL_COMMAND="serial --speed=115200"' \
1987a7741afSMartin Matuska      | sudo tee -a /etc/default/grub >/dev/null
1997a7741afSMartin Matuska    ;;
2007a7741afSMartin Matuska  ubuntu24)
2017a7741afSMartin Matuska    GRUB_CFG="/boot/grub/grub.cfg"
2027a7741afSMartin Matuska    GRUB_MKCONFIG="grub-mkconfig"
2037a7741afSMartin Matuska    echo 'GRUB_DISABLE_OS_PROBER="false"' \
2047a7741afSMartin Matuska      | sudo tee -a /etc/default/grub >/dev/null
2057a7741afSMartin Matuska    ;;
2067a7741afSMartin Matuska  *)
2077a7741afSMartin Matuska    GRUB_CFG="/boot/grub/grub.cfg"
2087a7741afSMartin Matuska    GRUB_MKCONFIG="grub-mkconfig"
2097a7741afSMartin Matuska    ;;
2107a7741afSMartin Matuskaesac
2117a7741afSMartin Matuska
2127a7741afSMartin Matuskacase "$1" in
2137a7741afSMartin Matuska  archlinux|freebsd*)
2147a7741afSMartin Matuska    true
2157a7741afSMartin Matuska    ;;
2167a7741afSMartin Matuska  *)
2177a7741afSMartin Matuska    echo "##[group]Edit kernel cmdline"
2187a7741afSMartin Matuska    sudo sed -i -e '/^GRUB_CMDLINE_LINUX/d' /etc/default/grub || true
2197a7741afSMartin Matuska    echo "GRUB_CMDLINE_LINUX=\"$CMDLINE\"" \
2207a7741afSMartin Matuska      | sudo tee -a /etc/default/grub >/dev/null
2217a7741afSMartin Matuska    sudo $GRUB_MKCONFIG -o $GRUB_CFG
2227a7741afSMartin Matuska    echo "##[endgroup]"
2237a7741afSMartin Matuska    ;;
2247a7741afSMartin Matuskaesac
2257a7741afSMartin Matuska
2267a7741afSMartin Matuska# reset cloud-init configuration and poweroff
2277a7741afSMartin Matuskasudo cloud-init clean --logs
2287a7741afSMartin Matuskasleep 2 && sudo poweroff &
2297a7741afSMartin Matuskaexit 0
230