xref: /freebsd/sys/contrib/openzfs/.github/workflows/scripts/qemu-test-repo-vm.sh (revision d2a8fad3579763bd288260c8c465ab9eb448d465)
1*d2a8fad3SMartin Matuska#!/bin/bash
2*d2a8fad3SMartin Matuska#
3*d2a8fad3SMartin Matuska# Do a test install of ZFS from an external repository.
4*d2a8fad3SMartin Matuska#
5*d2a8fad3SMartin Matuska# USAGE:
6*d2a8fad3SMartin Matuska#
7*d2a8fad3SMartin Matuska# 	./qemu-test-repo-vm [URL]
8*d2a8fad3SMartin Matuska#
9*d2a8fad3SMartin Matuska# URL:		URL to use instead of http://download.zfsonlinux.org
10*d2a8fad3SMartin Matuska#		If blank, use the default repo from zfs-release RPM.
11*d2a8fad3SMartin Matuska
12*d2a8fad3SMartin Matuskaset -e
13*d2a8fad3SMartin Matuska
14*d2a8fad3SMartin Matuskasource /etc/os-release
15*d2a8fad3SMartin MatuskaOS="$ID"
16*d2a8fad3SMartin MatuskaVERSION="$VERSION_ID"
17*d2a8fad3SMartin Matuska
18*d2a8fad3SMartin MatuskaALTHOST=""
19*d2a8fad3SMartin Matuskaif [ -n "$1" ] ; then
20*d2a8fad3SMartin Matuska	ALTHOST="$1"
21*d2a8fad3SMartin Matuskafi
22*d2a8fad3SMartin Matuska
23*d2a8fad3SMartin Matuska# Write summary to /tmp/repo so our artifacts scripts pick it up
24*d2a8fad3SMartin Matuskamkdir /tmp/repo
25*d2a8fad3SMartin MatuskaSUMMARY=/tmp/repo/$OS-$VERSION-summary.txt
26*d2a8fad3SMartin Matuska
27*d2a8fad3SMartin Matuska# $1: Repo 'zfs' 'zfs-kmod' 'zfs-testing' 'zfs-testing-kmod'
28*d2a8fad3SMartin Matuska# $2: (optional) Alternate host than 'http://download.zfsonlinux.org' to
29*d2a8fad3SMartin Matuska#     install from.  Blank means use default from zfs-release RPM.
30*d2a8fad3SMartin Matuskafunction test_install {
31*d2a8fad3SMartin Matuska	repo=$1
32*d2a8fad3SMartin Matuska	host=""
33*d2a8fad3SMartin Matuska	if [ -n "$2" ] ; then
34*d2a8fad3SMartin Matuska		host=$2
35*d2a8fad3SMartin Matuska	fi
36*d2a8fad3SMartin Matuska
37*d2a8fad3SMartin Matuska	args="--disablerepo=zfs --enablerepo=$repo"
38*d2a8fad3SMartin Matuska
39*d2a8fad3SMartin Matuska	# If we supplied an alternate repo URL, and have not already edited
40*d2a8fad3SMartin Matuska	# zfs.repo, then update the repo file.
41*d2a8fad3SMartin Matuska	if [ -n "$host" ] && ! grep -q $host /etc/yum.repos.d/zfs.repo ; then
42*d2a8fad3SMartin Matuska		sudo sed -i "s;baseurl=http://download.zfsonlinux.org;baseurl=$host;g" /etc/yum.repos.d/zfs.repo
43*d2a8fad3SMartin Matuska	fi
44*d2a8fad3SMartin Matuska
45*d2a8fad3SMartin Matuska	sudo dnf -y install $args zfs zfs-test
46*d2a8fad3SMartin Matuska
47*d2a8fad3SMartin Matuska	# Load modules and create a simple pool as a sanity test.
48*d2a8fad3SMartin Matuska	sudo /usr/share/zfs/zfs.sh -r
49*d2a8fad3SMartin Matuska	truncate -s 100M /tmp/file
50*d2a8fad3SMartin Matuska	sudo zpool create tank /tmp/file
51*d2a8fad3SMartin Matuska	sudo zpool status
52*d2a8fad3SMartin Matuska
53*d2a8fad3SMartin Matuska	# Print out repo name, rpm installed (kmod or dkms), and repo URL
54*d2a8fad3SMartin Matuska	baseurl=$(grep -A 5 "\[$repo\]" /etc/yum.repos.d/zfs.repo  | awk -F'=' '/baseurl=/{print $2; exit}')
55*d2a8fad3SMartin Matuska	package=$(sudo rpm -qa | grep zfs | grep -E 'kmod|dkms')
56*d2a8fad3SMartin Matuska
57*d2a8fad3SMartin Matuska	echo "$repo $package $baseurl" >> $SUMMARY
58*d2a8fad3SMartin Matuska
59*d2a8fad3SMartin Matuska	sudo zpool destroy tank
60*d2a8fad3SMartin Matuska	sudo rm /tmp/file
61*d2a8fad3SMartin Matuska	sudo dnf -y remove zfs
62*d2a8fad3SMartin Matuska}
63*d2a8fad3SMartin Matuska
64*d2a8fad3SMartin Matuskaecho "##[group]Installing from repo"
65*d2a8fad3SMartin Matuska# The openzfs docs are the authoritative instructions for the install.  Use
66*d2a8fad3SMartin Matuska# the specific version of zfs-release RPM it recommends.
67*d2a8fad3SMartin Matuskacase $OS in
68*d2a8fad3SMartin Matuskaalmalinux*)
69*d2a8fad3SMartin Matuska	url='https://raw.githubusercontent.com/openzfs/openzfs-docs/refs/heads/master/docs/Getting%20Started/RHEL-based%20distro/index.rst'
70*d2a8fad3SMartin Matuska	name=$(curl -Ls $url | grep 'dnf install' | grep -Eo 'zfs-release-[0-9]+-[0-9]+')
71*d2a8fad3SMartin Matuska	sudo dnf -y install https://zfsonlinux.org/epel/$name$(rpm --eval "%{dist}").noarch.rpm 2>&1
72*d2a8fad3SMartin Matuska	sudo rpm -qi zfs-release
73*d2a8fad3SMartin Matuska	test_install zfs $ALTHOST
74*d2a8fad3SMartin Matuska	test_install zfs-kmod $ALTHOST
75*d2a8fad3SMartin Matuska	test_install zfs-testing $ALTHOST
76*d2a8fad3SMartin Matuska	test_install zfs-testing-kmod $ALTHOST
77*d2a8fad3SMartin Matuska	;;
78*d2a8fad3SMartin Matuskafedora*)
79*d2a8fad3SMartin Matuska	url='https://raw.githubusercontent.com/openzfs/openzfs-docs/refs/heads/master/docs/Getting%20Started/Fedora/index.rst'
80*d2a8fad3SMartin Matuska	name=$(curl -Ls $url | grep 'dnf install' | grep -Eo 'zfs-release-[0-9]+-[0-9]+')
81*d2a8fad3SMartin Matuska	sudo dnf -y install -y https://zfsonlinux.org/fedora/$name$(rpm --eval "%{dist}").noarch.rpm
82*d2a8fad3SMartin Matuska	test_install zfs $ALTHOST
83*d2a8fad3SMartin Matuska	;;
84*d2a8fad3SMartin Matuskaesac
85*d2a8fad3SMartin Matuskaecho "##[endgroup]"
86*d2a8fad3SMartin Matuska
87*d2a8fad3SMartin Matuska# Write out a simple version of the summary here. Later on we will collate all
88*d2a8fad3SMartin Matuska# the summaries and put them into a nice table in the workflow Summary page.
89*d2a8fad3SMartin Matuskaecho "Summary: "
90*d2a8fad3SMartin Matuskacat $SUMMARY
91