Blame test/integration/lib.sh

Packit Service da4517
#!/bin/bash
Packit Service da4517
Packit Service da4517
kpatch_set_ccache_max_size()
Packit Service da4517
{
Packit Service da4517
	local ccache_max_size=${1:-10G}
Packit Service da4517
Packit Service da4517
	ccache --max-size="${ccache_max_size}"
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_fedora_dependencies()
Packit Service da4517
{
Packit Service da4517
	local kernel_version
Packit Service da4517
	kernel_version=$(uname -r)
Packit Service da4517
Packit Service da4517
	sudo dnf install -y gcc "kernel-devel-${kernel_version%.*}" elfutils elfutils-devel
Packit Service da4517
	sudo dnf install -y pesign yum-utils openssl wget numactl-devel
Packit Service da4517
	sudo dnf builddep -y "kernel-${kernel_version%.*}"
Packit Service da4517
	sudo dnf debuginfo-install -y "kernel-${kernel_version%.*}"
Packit Service da4517
Packit Service da4517
	sudo dnf install -y ccache
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_ubuntu_dependencies()
Packit Service da4517
{
Packit Service da4517
	sudo sed -i 's/# deb-src/deb-src/' /etc/apt/sources.list
Packit Service da4517
	sudo apt-get update
Packit Service da4517
Packit Service da4517
	sudo apt-get install -y make gcc libelf-dev elfutils
Packit Service da4517
	sudo apt-get install -y dpkg-dev devscripts
Packit Service da4517
	sudo apt-get build-dep -y linux
Packit Service da4517
Packit Service da4517
	sudo apt-get install -y ccache
Packit Service da4517
Packit Service da4517
	# Add ddebs repository
Packit Service da4517
	if ! grep -q 'ddebs.ubuntu.com' /etc/apt/sources.list.d/ddebs.list; then
Packit Service da4517
		local codename
Packit Service da4517
		codename=$(lsb_release -sc)
Packit Service da4517
		sudo tee /etc/apt/sources.list.d/ddebs.list <<-EOF
Packit Service da4517
			deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse
Packit Service da4517
			deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse
Packit Service da4517
			deb http://ddebs.ubuntu.com/ ${codename}-updates main restricted universe multiverse
Packit Service da4517
			deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse
Packit Service da4517
		EOF
Packit Service da4517
Packit Service da4517
		# add APT key
Packit Service da4517
		wget -Nq http://ddebs.ubuntu.com/dbgsym-release-key.asc -O- | sudo apt-key add -
Packit Service da4517
		sudo apt-get update
Packit Service da4517
	fi
Packit Service da4517
	sudo apt-get install -y "linux-image-$(uname -r)-dbgsym"
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_rhel_dependencies()
Packit Service da4517
{
Packit Service da4517
	local kernel_version
Packit Service da4517
	local arch
Packit Service da4517
	local rhel_major
Packit Service da4517
	local py_version
Packit Service da4517
	kernel_version=$(uname -r)
Packit Service da4517
	arch=$(uname -m)
Packit Service da4517
	rhel_major=${VERSION_ID%%.*}
Packit Service da4517
Packit Service da4517
	if [ "${rhel_major}" -ge 8 ]; then
Packit Service da4517
		py_version="3"
Packit Service da4517
	else
Packit Service da4517
		py_version="2"
Packit Service da4517
	fi
Packit Service da4517
Packit Service da4517
	sudo yum install -y git gcc gcc-c++ "kernel-devel-${kernel_version%.*}" elfutils elfutils-devel
Packit Service da4517
	sudo yum install -y yum-utils zlib-devel binutils-devel newt-devel \
Packit Service da4517
		python${py_version}-devel perl-ExtUtils-Embed audit-libs-devel numactl-devel \
Packit Service da4517
		pciutils-devel bison ncurses-devel rpm-build java-devel
Packit Service da4517
	sudo yum-builddep -y "kernel-${kernel_version%.*}"
Packit Service da4517
	sudo debuginfo-install -y "kernel-${kernel_version%.*}"
Packit Service da4517
Packit Service da4517
	case "${arch}" in
Packit Service da4517
		"x86_64")
Packit Service da4517
			sudo yum install -y pesign
Packit Service da4517
			;;
Packit Service da4517
		"ppc64le")
Packit Service da4517
			sudo yum install -y gcc-plugin-devel
Packit Service da4517
			if [ "${rhel_major}" -ge 8 ]; then
Packit Service da4517
				# yum-builddep doesn't provide everything we need :(
Packit Service da4517
				sudo yum install -y flex openssl-devel
Packit Service da4517
			fi
Packit Service da4517
			;;
Packit Service da4517
		*)
Packit Service da4517
			;;
Packit Service da4517
	esac
Packit Service da4517
Packit Service da4517
	sudo yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm"
Packit Service da4517
	sudo yum install -y ccache
Packit Service da4517
	sudo yum remove -y epel-release
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_centos_dependencies()
Packit Service da4517
{
Packit Service da4517
	local kernel_version
Packit Service da4517
	local arch
Packit Service da4517
	kernel_version=$(uname -r)
Packit Service da4517
	arch=$(uname -m)
Packit Service da4517
Packit Service da4517
	sudo yum install -y gcc gcc-c++ "kernel-devel-${kernel_version%.*}" elfutils elfutils-devel
Packit Service da4517
	sudo yum install -y yum-utils zlib-devel binutils-devel newt-devel \
Packit Service da4517
		python-devel perl-ExtUtils-Embed audit-libs-devel numactl-devel \
Packit Service da4517
		pciutils-devel bison ncurses-devel rpm-build java-devel pesign
Packit Service da4517
	sudo yum-config-manager --enable debug
Packit Service da4517
	sudo yum-builddep -y "kernel-${kernel_version%.*}"
Packit Service da4517
	sudo debuginfo-install -y "kernel-${kernel_version%.*}"
Packit Service da4517
Packit Service da4517
	sudo yum install -y "https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm"
Packit Service da4517
	sudo yum install -y ccache
Packit Service da4517
	sudo yum remove -y epel-release
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_dependencies()
Packit Service da4517
{
Packit Service da4517
	# shellcheck disable=SC1091
Packit Service da4517
	source /etc/os-release
Packit Service da4517
Packit Service da4517
	eval "kpatch_${ID}_dependencies" || { echo "Unsupported distro: ${ID}"; exit 1; }
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_separate_partition_cache()
Packit Service da4517
{
Packit Service da4517
	local partition=${1}
Packit Service da4517
	local mountpoint=${2}
Packit Service da4517
	local reformat=${3}
Packit Service da4517
	local owner=${USER}
Packit Service da4517
Packit Service da4517
	if [[ "${reformat}" == "y" ]]; then
Packit Service da4517
		sudo mkfs.xfs -f "${partition}"
Packit Service da4517
	fi
Packit Service da4517
Packit Service da4517
	sudo mkdir -p "${mountpoint}"
Packit Service da4517
	sudo mount "${partition}" "${mountpoint}"
Packit Service da4517
	sudo chown "${owner}":"${owner}" "${mountpoint}"
Packit Service da4517
Packit Service da4517
	rm -rf "${mountpoint}/.ccache"
Packit Service da4517
	rm -rf "${mountpoint}/.kpatch"
Packit Service da4517
	mkdir "${mountpoint}/.ccache"
Packit Service da4517
	mkdir "${mountpoint}/.kpatch"
Packit Service da4517
Packit Service da4517
	rm -rf "${HOME}/.ccache"
Packit Service da4517
	rm -rf "${HOME}/.kpatch"
Packit Service da4517
Packit Service da4517
	ln -sv "${mountpoint}/.ccache" "${HOME}/.ccache"
Packit Service da4517
	ln -sv "${mountpoint}/.kpatch" "${HOME}/.kpatch"
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_separate_disk_cache()
Packit Service da4517
{
Packit Service da4517
	local device=${1}
Packit Service da4517
	local mountpoint=${2}
Packit Service da4517
	local partition="${device}1"
Packit Service da4517
Packit Service da4517
	echo -e "o\\nn\\np\\n1\\n\\n\\nw\\n" | sudo fdisk "${device}"
Packit Service da4517
	kpatch_separate_partition_cache "${partition}" "${mountpoint}" y
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_install_vagrant_centos()
Packit Service da4517
{
Packit Service da4517
	local image_path=${1}
Packit Service da4517
Packit Service da4517
	sudo yum group install -y "Development Tools"
Packit Service da4517
	sudo yum -y install qemu-kvm libvirt virt-install bridge-utils libvirt-devel libxslt-devel libxml2-devel libvirt-devel libguestfs-tools-c libvirt-client
Packit Service da4517
Packit Service da4517
	echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-ipforward.conf
Packit Service da4517
	sudo sysctl -p /etc/sysctl.d/99-ipforward.conf
Packit Service da4517
Packit Service da4517
	sudo systemctl enable libvirtd
Packit Service da4517
	sudo systemctl start libvirtd || exit 1
Packit Service da4517
Packit Service da4517
	if [[ -n "${image_path}" ]]; then
Packit Service da4517
		mkdir -p "${image_path}/libvirt/images"
Packit Service da4517
		virsh pool-define-as --target "${image_path}/libvirt/images" default dir || exit 1
Packit Service da4517
		virsh pool-start default || exit 1
Packit Service da4517
	fi
Packit Service da4517
Packit Service da4517
	sudo yum install -y https://releases.hashicorp.com/vagrant/2.1.2/vagrant_2.1.2_x86_64.rpm || exit 1
Packit Service da4517
Packit Service da4517
	vagrant plugin install vagrant-libvirt
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_install_vagrant_rhel()
Packit Service da4517
{
Packit Service da4517
	local image_path=${1}
Packit Service da4517
Packit Service da4517
	kpatch_install_vagrant_centos "${image_path}"
Packit Service da4517
Packit Service da4517
	sudo systemctl enable nfs
Packit Service da4517
	sudo systemctl start nfs || exit 1
Packit Service da4517
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_install_vagrant_fedora()
Packit Service da4517
{
Packit Service da4517
	local image_path=${1}
Packit Service da4517
Packit Service da4517
	echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-ipforward.conf
Packit Service da4517
	sudo sysctl -p /etc/sysctl.d/99-ipforward.conf
Packit Service da4517
Packit Service da4517
	sudo dnf install -y libvirt virt-install libvirt-client nfs-utils vagrant vagrant-libvirt
Packit Service da4517
Packit Service da4517
	echo "[nfsd]" | sudo tee -a /etc/nfs.conf
Packit Service da4517
	echo "udp=y" | sudo tee -a /etc/nfs.conf
Packit Service da4517
	echo "vers3=y" | sudo tee -a /etc/nfs.conf
Packit Service da4517
	sudo systemctl restart nfs
Packit Service da4517
Packit Service da4517
	sudo systemctl enable libvirtd
Packit Service da4517
	sudo systemctl start libvirtd || exit 1
Packit Service da4517
Packit Service da4517
	if [[ -n "${image_path}" ]]; then
Packit Service da4517
		mkdir -p "${image_path}/libvirt/images"
Packit Service da4517
		virsh pool-define-as --target "${image_path}/libvirt/images" default dir || exit 1
Packit Service da4517
		virsh pool-start default || exit 1
Packit Service da4517
	fi
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_install_vagrant()
Packit Service da4517
{
Packit Service da4517
	local image_path=${1}
Packit Service da4517
Packit Service da4517
	# shellcheck disable=SC1091
Packit Service da4517
	source /etc/os-release
Packit Service da4517
Packit Service da4517
	eval "kpatch_install_vagrant_${ID} ${image_path}" || { echo "Unsupported distro: ${ID}"; exit 1; }
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_check_install_vagrant()
Packit Service da4517
{
Packit Service da4517
	local image_path=${1}
Packit Service da4517
	# shellcheck disable=SC2230
Packit Service da4517
	[ "$(which vagrant)" == "" ] && kpatch_install_vagrant "${image_path}"
Packit Service da4517
	return 0
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_write_vagrantfile_template()
Packit Service da4517
{
Packit Service da4517
	local target_distro=${1}
Packit Service da4517
Packit Service da4517
	local box_prefix="kpatch"
Packit Service da4517
Packit Service da4517
	cat >Vagrantfile <
Packit Service da4517
Vagrant.configure("2") do |config|
Packit Service da4517
	config.vm.provider :libvirt do |libvirt|
Packit Service da4517
		libvirt.storage :file, :size => '40G'
Packit Service da4517
		libvirt.cpus = $(getconf _NPROCESSORS_ONLN)
Packit Service da4517
		libvirt.memory = $(awk '/MemTotal/ {printf("%d\n", ($2*0.8)/1024)}' /proc/meminfo)
Packit Service da4517
		libvirt.graphics_type = "none"
Packit Service da4517
		libvirt.disk_bus = 'virtio'
Packit Service da4517
		libvirt.disk_device = 'vda'
Packit Service da4517
	end
Packit Service da4517
	config.vm.box = "${box_prefix}/${target_distro}"
Packit Service da4517
	config.vm.synced_folder ".", "/vagrant", type: "nfs"
Packit Service da4517
EOF
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_write_vagrantfile_centos_provision()
Packit Service da4517
{
Packit Service da4517
	cat >>Vagrantfile <
Packit Service da4517
	config.vm.provision "shell", inline: "yum install -y git"
Packit Service da4517
EOF
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_write_vagrantfile()
Packit Service da4517
{
Packit Service da4517
	local target_distro=${1}
Packit Service da4517
Packit Service da4517
	kpatch_write_vagrantfile_template "${target_distro}"
Packit Service da4517
Packit Service da4517
	if echo "${target_distro}" | grep -qE "^centos"; then
Packit Service da4517
		kpatch_write_vagrantfile_centos_provision
Packit Service da4517
	fi
Packit Service da4517
Packit Service da4517
	echo 'end' >>Vagrantfile
Packit Service da4517
}
Packit Service da4517
Packit Service da4517
kpatch_integration_tests_vagrant_distro()
Packit Service da4517
{
Packit Service da4517
	local target_distro=${1}
Packit Service da4517
	local test_script=${2}
Packit Service da4517
	local slowtest=${3}
Packit Service da4517
Packit Service da4517
	local testdir
Packit Service da4517
	local workdir
Packit Service da4517
	local logdir
Packit Service da4517
Packit Service da4517
	testdir="$(pwd)"
Packit Service da4517
	workdir="${target_distro}.vagrant"
Packit Service da4517
	rm -rf "${workdir}"
Packit Service da4517
	mkdir -p "${workdir}"
Packit Service da4517
	cd "${workdir}" || exit 1
Packit Service da4517
Packit Service da4517
	kpatch_write_vagrantfile "${target_distro}"
Packit Service da4517
Packit Service da4517
	vagrant up || { vagrant destroy -f; exit 1; }
Packit Service da4517
Packit Service da4517
	local test_cmd="KPATCH_GIT=${KPATCH_GIT} KPATCH_REV=${KPATCH_REV} bash /vagrant/runtest.sh"
Packit Service da4517
	if [ "${slowtest}" == "1" ]; then
Packit Service da4517
		test_cmd="${test_cmd} --slow"
Packit Service da4517
	fi
Packit Service da4517
Packit Service da4517
	cp "${test_script}" ./runtest.sh
Packit Service da4517
	vagrant ssh -c "${test_cmd}"
Packit Service da4517
	local rc=$?
Packit Service da4517
Packit Service da4517
	if [ $rc -eq 0 ]; then
Packit Service da4517
		echo "${target_distro} PASS"
Packit Service da4517
	else
Packit Service da4517
		echo "${target_distro} FAIL"
Packit Service da4517
	fi
Packit Service da4517
Packit Service da4517
	logdir="${testdir}/${target_distro}_log"
Packit Service da4517
	rm -rf "${logdir}"
Packit Service da4517
	mkdir -p "${logdir}"
Packit Service da4517
	cp logs/* "${logdir}"
Packit Service da4517
Packit Service da4517
	vagrant destroy -f
Packit Service da4517
Packit Service da4517
	cd "${testdir}" || exit 1
Packit Service da4517
	if [ $rc -eq 0 ]; then
Packit Service da4517
		rm -rf "${workdir}"
Packit Service da4517
	fi
Packit Service da4517
Packit Service da4517
	return "${rc}"
Packit Service da4517
}