Merge remote-tracking branch 'remotes/dgilbert-gitlab/tags/pull-migration-20210726a...
[qemu/armbru.git] / tests / vm / haiku.x86_64
blob2eb736dae125f6b6150307ae7f16a3808fa0d7d1
1 #!/usr/bin/env python3
3 # Haiku VM image
5 # Copyright 2020 Haiku, Inc.
7 # Authors:
8 #  Alexander von Gluck IV <kallisti5@unixzen.com>
10 # This code is licensed under the GPL version 2 or later.  See
11 # the COPYING file in the top-level directory.
14 import os
15 import re
16 import sys
17 import time
18 import socket
19 import subprocess
20 import basevm
22 VAGRANT_KEY_FILE = os.path.join(os.path.dirname(__file__),
23     "..", "keys", "vagrant")
25 VAGRANT_PUB_KEY_FILE = os.path.join(os.path.dirname(__file__),
26     "..", "keys", "vagrant.pub")
28 HAIKU_CONFIG = {
29     'cpu'             : "max",
30     'machine'         : 'pc',
31     'guest_user'      : "vagrant",
32     'guest_pass'      : "",
33     'root_user'       : "vagrant",
34     'root_pass'       : "",
35     'ssh_key_file'    : VAGRANT_KEY_FILE,
36     'ssh_pub_key_file': VAGRANT_PUB_KEY_FILE,
37     'memory'          : "4G",
38     'extra_args'      : [],
39     'qemu_args'       : "-device VGA",
40     'dns'             : "",
41     'ssh_port'        : 0,
42     'install_cmds'    : "",
43     'boot_dev_type'   : "block",
44     'ssh_timeout'     : 1,
47 class HaikuVM(basevm.BaseVM):
48     name = "haiku"
49     arch = "x86_64"
51     link = "https://app.vagrantup.com/haiku-os/boxes/r1beta2-x86_64/versions/20200702/providers/libvirt.box"
52     csum = "41c38b316e0cbdbc66b5dbaf3612b866700a4f35807cb1eb266a5bf83e9e68d5"
54     poweroff = "shutdown"
56     requirements = [
57         "devel:libbz2",
58         "devel:libcapstone",
59         "devel:libcurl",
60         "devel:libfdt",
61         "devel:libgcrypt",
62         "devel:libgl",
63         "devel:libglib_2.0",
64         "devel:libgnutls",
65         "devel:libgpg_error",
66         "devel:libintl",
67         "devel:libjpeg",
68         "devel:liblzo2",
69         "devel:libncursesw",
70         "devel:libnettle",
71         "devel:libpixman_1",
72         "devel:libpng16",
73         "devel:libsdl2_2.0",
74         "devel:libsnappy",
75         "devel:libssh2",
76         "devel:libtasn1",
77         "devel:libusb_1.0",
78         "devel:libz",
79         "ninja",
80     ]
82     # https://dev.haiku-os.org/ticket/16512 virtio disk1 shows up as 0 (reversed order)
83     BUILD_SCRIPT = """
84         set -e;
85         rm -rf /tmp/qemu-test.*
86         cd $(mktemp -d /tmp/qemu-test.XXXXXX);
87         mkdir src build; cd src;
88         tar -xf /dev/disk/virtual/virtio_block/0/raw;
89         mkdir -p /usr/bin
90         ln -s /boot/system/bin/env /usr/bin/env
91         cd ../build
92         ../src/configure --disable-slirp {configure_opts};
93         make --output-sync -j{jobs} {target} {verbose};
94     """
96     def build_image(self, img):
97         self.print_step("Downloading disk image")
98         tarball = self._download_with_cache(self.link, sha256sum=self.csum)
100         self.print_step("Extracting disk image")
102         subprocess.check_call(["tar", "xzf", tarball, "./box.img", "-O"],
103                               stdout=open(img, 'wb'))
105         self.print_step("Preparing disk image")
106         self.boot(img)
108         # Wait for ssh to be available.
109         self.wait_ssh(wait_root=True, cmd="exit 0")
111         # Install packages
112         self.ssh_root("pkgman install -y %s" % " ".join(self.requirements))
113         self.graceful_shutdown()
115         self.print_step("All done")
117 if __name__ == "__main__":
118     sys.exit(basevm.main(HaikuVM, config=HAIKU_CONFIG))