tests/vm: Add Haiku test based on their vagrant images
Signed-off-by: Alexander von Gluck IV <kallisti5@unixzen.com> [PMD: Avoid recreating the image each time] Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> [thuth: Add ninja package, /usr/bin/env hack and --disable-slirp] Message-Id: <20201114165137.15379-5-thuth@redhat.com> Buglink: https://bugs.launchpad.net/qemu/+bug/1715203 Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
ded5d78c1e
commit
9fc33bf4e1
27
tests/keys/vagrant
Normal file
27
tests/keys/vagrant
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI
|
||||||
|
w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP
|
||||||
|
kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2
|
||||||
|
hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO
|
||||||
|
Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW
|
||||||
|
yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd
|
||||||
|
ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1
|
||||||
|
Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf
|
||||||
|
TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK
|
||||||
|
iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A
|
||||||
|
sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf
|
||||||
|
4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP
|
||||||
|
cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk
|
||||||
|
EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN
|
||||||
|
CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX
|
||||||
|
3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG
|
||||||
|
YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj
|
||||||
|
3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+
|
||||||
|
dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz
|
||||||
|
6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC
|
||||||
|
P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF
|
||||||
|
llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ
|
||||||
|
kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH
|
||||||
|
+vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ
|
||||||
|
NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
1
tests/keys/vagrant.pub
Normal file
1
tests/keys/vagrant.pub
Normal file
@ -0,0 +1 @@
|
|||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== well-known vagrant key for qemu-test, do not use on any machine exposed to an external network
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
EFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd)
|
EFI_AARCH64 = $(wildcard $(BUILD_DIR)/pc-bios/edk2-aarch64-code.fd)
|
||||||
|
|
||||||
IMAGES := freebsd netbsd openbsd centos fedora
|
IMAGES := freebsd netbsd openbsd centos fedora haiku.x86_64
|
||||||
ifneq ($(GENISOIMAGE),)
|
ifneq ($(GENISOIMAGE),)
|
||||||
IMAGES += ubuntu.i386 centos
|
IMAGES += ubuntu.i386 centos
|
||||||
ifneq ($(EFI_AARCH64),)
|
ifneq ($(EFI_AARCH64),)
|
||||||
@ -41,6 +41,7 @@ endif
|
|||||||
else
|
else
|
||||||
@echo " (install genisoimage to build centos/ubuntu images)"
|
@echo " (install genisoimage to build centos/ubuntu images)"
|
||||||
endif
|
endif
|
||||||
|
@echo " vm-build-haiku.x86_64 - Build QEMU in Haiku VM"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo " vm-build-all - Build QEMU in all VMs"
|
@echo " vm-build-all - Build QEMU in all VMs"
|
||||||
@echo " vm-clean-all - Clean up VM images"
|
@echo " vm-clean-all - Clean up VM images"
|
||||||
|
@ -44,6 +44,7 @@ DEFAULT_CONFIG = {
|
|||||||
'machine' : 'pc',
|
'machine' : 'pc',
|
||||||
'guest_user' : "qemu",
|
'guest_user' : "qemu",
|
||||||
'guest_pass' : "qemupass",
|
'guest_pass' : "qemupass",
|
||||||
|
'root_user' : "root",
|
||||||
'root_pass' : "qemupass",
|
'root_pass' : "qemupass",
|
||||||
'ssh_key_file' : SSH_KEY_FILE,
|
'ssh_key_file' : SSH_KEY_FILE,
|
||||||
'ssh_pub_key_file': SSH_PUB_KEY_FILE,
|
'ssh_pub_key_file': SSH_PUB_KEY_FILE,
|
||||||
@ -245,13 +246,13 @@ class BaseVM(object):
|
|||||||
return self._ssh_do(self._config["guest_user"], cmd, False)
|
return self._ssh_do(self._config["guest_user"], cmd, False)
|
||||||
|
|
||||||
def ssh_root(self, *cmd):
|
def ssh_root(self, *cmd):
|
||||||
return self._ssh_do("root", cmd, False)
|
return self._ssh_do(self._config["root_user"], cmd, False)
|
||||||
|
|
||||||
def ssh_check(self, *cmd):
|
def ssh_check(self, *cmd):
|
||||||
self._ssh_do(self._config["guest_user"], cmd, True)
|
self._ssh_do(self._config["guest_user"], cmd, True)
|
||||||
|
|
||||||
def ssh_root_check(self, *cmd):
|
def ssh_root_check(self, *cmd):
|
||||||
self._ssh_do("root", cmd, True)
|
self._ssh_do(self._config["root_user"], cmd, True)
|
||||||
|
|
||||||
def build_image(self, img):
|
def build_image(self, img):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
119
tests/vm/haiku.x86_64
Executable file
119
tests/vm/haiku.x86_64
Executable file
@ -0,0 +1,119 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
#
|
||||||
|
# Haiku VM image
|
||||||
|
#
|
||||||
|
# Copyright 2020 Haiku, Inc.
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# Alexander von Gluck IV <kallisti5@unixzen.com>
|
||||||
|
#
|
||||||
|
# This code is licensed under the GPL version 2 or later. See
|
||||||
|
# the COPYING file in the top-level directory.
|
||||||
|
#
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import socket
|
||||||
|
import subprocess
|
||||||
|
import basevm
|
||||||
|
|
||||||
|
VAGRANT_KEY_FILE = os.path.join(os.path.dirname(__file__),
|
||||||
|
"..", "keys", "vagrant")
|
||||||
|
|
||||||
|
VAGRANT_PUB_KEY_FILE = os.path.join(os.path.dirname(__file__),
|
||||||
|
"..", "keys", "vagrant.pub")
|
||||||
|
|
||||||
|
HAIKU_CONFIG = {
|
||||||
|
'cpu' : "max",
|
||||||
|
'machine' : 'pc',
|
||||||
|
'guest_user' : "vagrant",
|
||||||
|
'guest_pass' : "",
|
||||||
|
'root_user' : "vagrant",
|
||||||
|
'root_pass' : "",
|
||||||
|
'ssh_key_file' : VAGRANT_KEY_FILE,
|
||||||
|
'ssh_pub_key_file': VAGRANT_PUB_KEY_FILE,
|
||||||
|
'memory' : "4G",
|
||||||
|
'extra_args' : [],
|
||||||
|
'qemu_args' : "-device VGA",
|
||||||
|
'dns' : "",
|
||||||
|
'ssh_port' : 0,
|
||||||
|
'install_cmds' : "",
|
||||||
|
'boot_dev_type' : "block",
|
||||||
|
'ssh_timeout' : 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
class HaikuVM(basevm.BaseVM):
|
||||||
|
name = "haiku"
|
||||||
|
arch = "x86_64"
|
||||||
|
|
||||||
|
link = "https://app.vagrantup.com/haiku-os/boxes/r1beta2-x86_64/versions/20200702/providers/libvirt.box"
|
||||||
|
csum = "41c38b316e0cbdbc66b5dbaf3612b866700a4f35807cb1eb266a5bf83e9e68d5"
|
||||||
|
|
||||||
|
poweroff = "shutdown"
|
||||||
|
|
||||||
|
requirements = [
|
||||||
|
"devel:libbz2",
|
||||||
|
"devel:libcapstone",
|
||||||
|
"devel:libcurl",
|
||||||
|
"devel:libfdt",
|
||||||
|
"devel:libgcrypt",
|
||||||
|
"devel:libgl",
|
||||||
|
"devel:libglib_2.0",
|
||||||
|
"devel:libgnutls",
|
||||||
|
"devel:libgpg_error",
|
||||||
|
"devel:libintl",
|
||||||
|
"devel:libjpeg",
|
||||||
|
"devel:liblzo2",
|
||||||
|
"devel:libncursesw",
|
||||||
|
"devel:libnettle",
|
||||||
|
"devel:libpixman_1",
|
||||||
|
"devel:libpng16",
|
||||||
|
"devel:libsdl2_2.0",
|
||||||
|
"devel:libsnappy",
|
||||||
|
"devel:libssh2",
|
||||||
|
"devel:libtasn1",
|
||||||
|
"devel:libusb_1.0",
|
||||||
|
"devel:libz",
|
||||||
|
"ninja",
|
||||||
|
"setuptools_python3"
|
||||||
|
]
|
||||||
|
|
||||||
|
# https://dev.haiku-os.org/ticket/16512 virtio disk1 shows up as 0 (reversed order)
|
||||||
|
BUILD_SCRIPT = """
|
||||||
|
set -e;
|
||||||
|
rm -rf /tmp/qemu-test.*
|
||||||
|
cd $(mktemp -d /tmp/qemu-test.XXXXXX);
|
||||||
|
mkdir src build; cd src;
|
||||||
|
tar -xf /dev/disk/virtual/virtio_block/0/raw;
|
||||||
|
mkdir -p /usr/bin
|
||||||
|
ln -s /boot/system/bin/env /usr/bin/env
|
||||||
|
cd ../build
|
||||||
|
../src/configure --disable-slirp {configure_opts};
|
||||||
|
make --output-sync -j{jobs} {target} {verbose};
|
||||||
|
"""
|
||||||
|
|
||||||
|
def build_image(self, img):
|
||||||
|
self.print_step("Downloading disk image")
|
||||||
|
tarball = self._download_with_cache(self.link, sha256sum=self.csum)
|
||||||
|
|
||||||
|
self.print_step("Extracting disk image")
|
||||||
|
|
||||||
|
subprocess.check_call(["tar", "xzf", tarball, "./box.img", "-O"],
|
||||||
|
stdout=open(img, 'wb'))
|
||||||
|
|
||||||
|
self.print_step("Preparing disk image")
|
||||||
|
self.boot(img)
|
||||||
|
|
||||||
|
# Wait for ssh to be available.
|
||||||
|
self.wait_ssh(wait_root=True, cmd="exit 0")
|
||||||
|
|
||||||
|
# Install packages
|
||||||
|
self.ssh_root("pkgman install -y %s" % " ".join(self.requirements))
|
||||||
|
self.graceful_shutdown()
|
||||||
|
|
||||||
|
self.print_step("All done")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(basevm.main(HaikuVM, config=HAIKU_CONFIG))
|
Loading…
Reference in New Issue
Block a user