Merge tag 'v9.0.0-rc3'
[qemu/ar7.git] / tests / vm / haiku.x86_64
blob71cf75a9a3ea5ab1aa47965821ea5fe9b3d81746
1 #!/usr/bin/env python3
3 # Haiku VM image
5 # Copyright 2020-2022 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/r1beta4-x86_64/versions/20230114/providers/libvirt.box"
52     csum = "6e72a2a470e03dbc3c5e808664e057bb4022b390dca88e4c7da6188f26f6a3c9"
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:libslirp",
75         "devel:libsnappy",
76         "devel:libssh2",
77         "devel:libtasn1",
78         "devel:libusb_1.0",
79         "devel:libz",
80         "ninja",
81     ]
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/1/raw;
89         mkdir -p /usr/bin
90         ln -s /boot/system/bin/env /usr/bin/env
91         cd ../build
92         ../src/configure {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))