7bcc5930a6
A lot of tests and examples invoke qemu with the command "kvm". However, as far as I can tell, "kvm" being aliased to the appropriate qemu system binary is Debian specific. The binary names from qemu upstream - qemu-system-$ARCH - also aren't universal, but they are more common (they should be good for both Debian and Fedora at least). In order to still get KVM acceleration when available, we use the option "-M accel=kvm:tcg" to tell qemu to try using either KVM or TCG in that order A number of the places we invoked "kvm" are expecting specifically an x86 guest, and so it's also safer to explicitly invoke qemu-system-x86_64. Some others appear to be independent of the target arch (just wanting the same arch as the host to allow KVM acceleration). Although I suspect there may be more subtle x86 specific options in the qemu command lines, attempt to preserve arch independence by using $(uname -m). Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
207 lines
8 KiB
Text
207 lines
8 KiB
Text
<# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
#
|
|
# PASST - Plug A Simple Socket Transport
|
|
# for qemu/UNIX domain socket mode
|
|
#
|
|
# PASTA - Pack A Subtle Tap Abstraction
|
|
# for network namespace/tap device mode
|
|
#
|
|
# test/distro/ubuntu - Ubuntu builds, get packages via passt, test pasta
|
|
#
|
|
# Copyright (c) 2021 Red Hat GmbH
|
|
# Author: Stefano Brivio <sbrivio@redhat.com>
|
|
|
|
temp PIDFILE
|
|
htools wget virt-edit guestfish head sed cat kill qemu-system-x86_64 qemu-system-ppc64 qemu-system-s390x
|
|
|
|
# Quick pasta test: send message from init to ns, and from ns to init
|
|
def distro_quick_pasta_test
|
|
host (nc -w1 -6 -l -p 10000 > /tmp/init_msg; echo "from_init" | nc -q0 ::1 9999) &
|
|
hostb ./pasta
|
|
sleep 1
|
|
host PS1='$ '
|
|
host nc -w1 -6 -l -p 9999 > /tmp/ns_msg &
|
|
sleep 2
|
|
host echo "from_ns" | nc -q0 ::1 10000
|
|
sleep 2
|
|
host echo
|
|
sleep 1
|
|
hout NS_MSG cat /tmp/ns_msg
|
|
check [ __NS_MSG__ = "from_init" ]
|
|
hostb exit
|
|
host echo
|
|
hout INIT_MSG cat /tmp/init_msg
|
|
check [ __INIT_MSG__ = "from_ns" ]
|
|
endef
|
|
|
|
# Start passt, set common variables
|
|
hostb ./passt -P __PIDFILE__ &
|
|
sleep 1
|
|
host echo
|
|
hout GUEST_FILES ls -1 *.c *.h *.sh passt.1 qrap.1 Makefile | tr '\n' ' '; echo
|
|
|
|
|
|
test Ubuntu 14.04.5 LTS (Trusty Tahr), amd64
|
|
|
|
temp IMG
|
|
host wget https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img -O __IMG__
|
|
host virt-edit -a __IMG__ /etc/init/ttyS0.conf -e 's/\/getty/\/getty --autologin root/'
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-config.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-final.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-container.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-local.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-nonet.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-log-shutdown.conf
|
|
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
|
|
|
|
host ./qrap 5 qemu-system-x86_64 -M pc,accel=kvm:tcg -m 1024 -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none -drive file=__IMG__,if=virtio -net socket,fd=5 -net nic,model=virtio
|
|
host PS1='$ '
|
|
sleep 2
|
|
host apt-get update
|
|
host apt-get -y install make gcc netcat-openbsd
|
|
|
|
host make clean
|
|
host CFLAGS="-Wno-missing-field-initializers -Wno-missing-braces -Wno-type-limits" make
|
|
|
|
# TODO: pasta test skipped for the moment: clone() as called by NS_CALL hangs
|
|
# with wrapper provided by glibc 2.19, probably wrong argument order.
|
|
|
|
hint
|
|
sleep 1
|
|
|
|
# PIDFILE is cleaned up when the next test starts, read it now
|
|
hout PID cat __PIDFILE__
|
|
|
|
|
|
test Ubuntu 14.04.5 LTS (Trusty Tahr), i386
|
|
|
|
temp IMG
|
|
host wget https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-i386-disk1.img -O __IMG__
|
|
host virt-edit -a __IMG__ /etc/init/ttyS0.conf -e 's/\/getty/\/getty --autologin root/'
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-config.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-final.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-container.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-local.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-nonet.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-log-shutdown.conf
|
|
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
|
|
|
|
host ./qrap 5 qemu-system-x86_64 -M pc,accel=kvm:tcg -m 1024 -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none -drive file=__IMG__,if=virtio -net socket,fd=5 -net nic,model=virtio
|
|
host PS1='$ '
|
|
sleep 2
|
|
host apt-get update
|
|
host apt-get -y install make gcc netcat-openbsd
|
|
|
|
host make clean
|
|
host CFLAGS="-Wno-missing-field-initializers -Wno-missing-braces -Wno-type-limits -Wno-sign-compare" make
|
|
|
|
# TODO: pasta test skipped for the moment: clone() as called by NS_CALL hangs
|
|
# with wrapper provided by glibc 2.19, probably wrong argument order.
|
|
|
|
hint
|
|
sleep 1
|
|
|
|
|
|
test Ubuntu 14.04.5 LTS (Trusty Tahr), ppc64le
|
|
|
|
temp IMG
|
|
host wget https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-ppc64el-disk1.img -O __IMG__
|
|
host virt-edit -a __IMG__ /etc/init/hvc0.conf -e 's/\/getty/\/getty --autologin root/'
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-config.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-final.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-container.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-local.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init-nonet.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-init.conf
|
|
host guestfish --rw -a __IMG__ -i rm /etc/init/cloud-log-shutdown.conf
|
|
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
|
|
|
|
host ./qrap 5 qemu-system-ppc64 -m 2048 -smp 2 -nographic -serial stdio -nodefaults -no-reboot -nographic -vga none __IMG__ -net socket,fd=5 -net nic,model=virtio
|
|
host PS1='$ '
|
|
sleep 2
|
|
host apt-get update
|
|
host apt-get -y install make gcc netcat-openbsd
|
|
|
|
host make clean
|
|
host CFLAGS="-Wno-missing-field-initializers -Wno-missing-braces -Wno-type-limits -Wno-sign-compare" make
|
|
|
|
# TODO: pasta test skipped for the moment: clone() as called by NS_CALL hangs
|
|
# with wrapper provided by glibc 2.19, probably wrong argument order.
|
|
|
|
hint
|
|
sleep 1
|
|
hostb reset
|
|
sleep 1
|
|
host echo
|
|
|
|
|
|
test Ubuntu 16.04 LTS (Xenial Xerus), ppc64 (be)
|
|
|
|
temp IMG
|
|
host wget https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-powerpc-disk1.img -O __IMG__
|
|
host virt-edit -a __IMG__ /lib/systemd/system/serial-getty@.service -e 's/ExecStart=.*/ExecStart=\/sbin\/agetty --autologin root -8 --keep-baud 115200,38400,9600 %I $TERM/g'
|
|
host guestfish --rw -a __IMG__ -i rm /etc/systemd/system/cloud-init.target.wants/cloud-config.service
|
|
host guestfish --rw -a __IMG__ -i rm /etc/systemd/system/cloud-init.target.wants/cloud-final.service
|
|
host guestfish --rw -a __IMG__ -i rm /etc/systemd/system/cloud-init.target.wants/cloud-init-local.service
|
|
host guestfish --rw -a __IMG__ -i rm /etc/systemd/system/cloud-init.target.wants/cloud-init.service
|
|
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
|
|
|
|
host ./qrap 5 qemu-system-ppc64 -m 1024 -M pseries -nographic -nodefaults -serial stdio -no-reboot -nographic -vga none -hda __IMG__ -net socket,fd=5 -net nic,model=virtio
|
|
host PS1='$ '
|
|
host dhclient -4
|
|
# Skip apt-get update here: some updates to xenial-updates around 2022-01-30
|
|
# broke dependencies for libc6 and gcc-5 -- note that powerpc is not officially
|
|
# supported on this version
|
|
host apt-get -y install make gcc netcat-openbsd
|
|
|
|
host make clean
|
|
host CFLAGS="-Werror" make
|
|
|
|
distro_quick_pasta_test
|
|
|
|
hint
|
|
sleep 1
|
|
hostb reset
|
|
sleep 1
|
|
host echo
|
|
|
|
|
|
test Ubuntu 22.04 (Jammy Jellyfish), s390x
|
|
temp IMG
|
|
host wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-s390x.img -O __IMG__
|
|
host virt-edit -a __IMG__ /usr/lib/systemd/system/serial-getty@.service -e 's/ExecStart=.*/ExecStart=\/sbin\/agetty --autologin root -8 --keep-baud 115200,38400,9600 %I $TERM/g'
|
|
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-config.service
|
|
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init.service
|
|
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-init-local.service
|
|
host guestfish --rw -a __IMG__ -i rm /usr/lib/systemd/system/cloud-final.service
|
|
host guestfish --rw -a __IMG__ -i rm /etc/systemd/system/multi-user.target.wants/snapd.service
|
|
host guestfish --rw -a __IMG__ -i rm /etc/systemd/system/snap.lxd.activate.service
|
|
host guestfish --rw -a __IMG__ -i rm /etc/systemd/system/snap.lxd.daemon.service
|
|
host guestfish --rw -a __IMG__ -i copy-in __GUEST_FILES__ /root/
|
|
host ./qrap 5 qemu-system-s390x -m 2048 -smp 2 -serial stdio -nodefaults -nographic __IMG__ -net socket,fd=5 -net nic,model=virtio -device virtio-rng-ccw
|
|
|
|
host service systemd-resolved stop
|
|
host export DEBIAN_FRONTEND=noninteractive
|
|
host apt-get -y remove needrestart snapd
|
|
host dhclient -4
|
|
sleep 2
|
|
host apt-get update
|
|
host apt-get -y install make gcc netcat-openbsd
|
|
|
|
host make clean
|
|
host CFLAGS="-Werror" make
|
|
|
|
host export SHELL="/bin/dash"
|
|
host dash
|
|
distro_quick_pasta_test
|
|
|
|
hint
|
|
sleep 1
|
|
hostb reset
|
|
sleep 1
|
|
host echo
|
|
|
|
|
|
host kill __PID__
|