criu/scripts/ci/vagrant.sh
Adrian Reber 50a96e9faf ci: move vagrant test to cirrus ci
With Travis dramatically reducing the minutes available for CI, CRIU
needs a new place to run tests. This moves the Vagrant based Fedora 32
no VDSO test cases to Cirrus CI. Cirrus CI seems to be one of the very
few free CI services allowing access to /dev/kvm.

Signed-off-by: Adrian Reber <areber@redhat.com>
2021-09-03 10:31:00 -07:00

77 lines
2.9 KiB
Bash
Executable file

#!/bin/bash
# This script is used to run vagrant based tests on Travis.
# This script is started via sudo from .travis.yml
set -e
set -x
VAGRANT_VERSION=2.2.10
FEDORA_VERSION=32
FEDORA_BOX_VERSION=32.20200422.0
setup() {
if [ -n "$TRAVIS" ]; then
# Load the kvm modules for vagrant to use qemu
modprobe kvm kvm_intel
fi
if [ -n "$CIRRUS_CI" ]; then
# Running modprobe is not possible on Cirrus, because
# we are running in a container with potentially other
# modules than the host.
# Vagrant can still use /dev/kvm later if we do
chmod 666 /dev/kvm
fi
# Tar up the git checkout to have vagrant rsync it to the VM
tar cf criu.tar ../../../criu
# Cirrus has problems with the following certificate.
wget --no-check-certificate https://releases.hashicorp.com/vagrant/${VAGRANT_VERSION}/vagrant_${VAGRANT_VERSION}_"$(uname -m)".deb -O /tmp/vagrant.deb && \
dpkg -i /tmp/vagrant.deb
./apt-install libvirt-clients libvirt-daemon-system libvirt-dev qemu-utils qemu \
ruby build-essential libxml2-dev qemu-kvm rsync ebtables dnsmasq-base \
openssh-client
if [ -n "$CIRRUS_CI" ]; then
# On Cirrus systemctl does not work, because we are running in
# a container without access to systemd
/usr/sbin/virtlogd -d
/usr/sbin/libvirtd -d
else
systemctl restart libvirtd
fi
vagrant plugin install vagrant-libvirt
vagrant init fedora/${FEDORA_VERSION}-cloud-base --box-version ${FEDORA_BOX_VERSION}
# The default libvirt Vagrant VM uses 512MB.
# Travis VMs should have around 7.5GB.
# Increasing it to 4GB should work.
sed -i Vagrantfile -e 's,^end$, config.vm.provider :libvirt do |libvirt|'"\n"' libvirt.memory = 4096;end'"\n"'end,g'
if [ -n "$CIRRUS_CI" ]; then
# Work around for:
# Error while activating network: Call to virNetworkCreate failed: internal error:
# Failed to apply firewall rules /usr/sbin/ip6tables --table filter --list-rules: modprobe: FATAL: Module ip6_tables not found in directory /lib/modules/5.4.0-1025-gcp
# On cirrus-ci.com. Running in a container without access to the host's kernel modules
rm -f /sbin/ip6tables
cp /bin/true /sbin/ip6tables
fi
vagrant up --provider=libvirt > /dev/null
mkdir -p /root/.ssh
vagrant ssh-config >> /root/.ssh/config
ssh default sudo dnf install -y gcc git gnutls-devel nftables-devel libaio-devel \
libasan libcap-devel libnet-devel libnl3-devel make protobuf-c-devel \
protobuf-devel python3-flake8 python3-future python3-protobuf \
python3-junit_xml rubygem-asciidoctor iptables libselinux-devel libbpf-devel
# Disable sssd to avoid zdtm test failures in pty04 due to sssd socket
ssh default sudo systemctl mask sssd
ssh default cat /proc/cmdline
}
fedora-no-vdso() {
ssh default sudo grubby --update-kernel ALL --args="vdso=0"
vagrant reload
ssh default cat /proc/cmdline
ssh default 'cd /vagrant; tar xf criu.tar; cd criu; make -j 4'
ssh default 'cd /vagrant/criu/test; sudo ./zdtm.py run -a --keep-going'
}
$1