xref: /openbmc/qemu/tests/vm/haiku.x86_64 (revision 66ef41d2)
19fc33bf4SAlexander von Gluck IV#!/usr/bin/env python3
29fc33bf4SAlexander von Gluck IV#
39fc33bf4SAlexander von Gluck IV# Haiku VM image
49fc33bf4SAlexander von Gluck IV#
563021223SThomas Huth# Copyright 2020-2022 Haiku, Inc.
69fc33bf4SAlexander von Gluck IV#
79fc33bf4SAlexander von Gluck IV# Authors:
89fc33bf4SAlexander von Gluck IV#  Alexander von Gluck IV <kallisti5@unixzen.com>
99fc33bf4SAlexander von Gluck IV#
109fc33bf4SAlexander von Gluck IV# This code is licensed under the GPL version 2 or later.  See
119fc33bf4SAlexander von Gluck IV# the COPYING file in the top-level directory.
129fc33bf4SAlexander von Gluck IV#
139fc33bf4SAlexander von Gluck IV
149fc33bf4SAlexander von Gluck IVimport os
159fc33bf4SAlexander von Gluck IVimport re
169fc33bf4SAlexander von Gluck IVimport sys
179fc33bf4SAlexander von Gluck IVimport time
189fc33bf4SAlexander von Gluck IVimport socket
199fc33bf4SAlexander von Gluck IVimport subprocess
209fc33bf4SAlexander von Gluck IVimport basevm
219fc33bf4SAlexander von Gluck IV
229fc33bf4SAlexander von Gluck IVVAGRANT_KEY_FILE = os.path.join(os.path.dirname(__file__),
239fc33bf4SAlexander von Gluck IV    "..", "keys", "vagrant")
249fc33bf4SAlexander von Gluck IV
259fc33bf4SAlexander von Gluck IVVAGRANT_PUB_KEY_FILE = os.path.join(os.path.dirname(__file__),
269fc33bf4SAlexander von Gluck IV    "..", "keys", "vagrant.pub")
279fc33bf4SAlexander von Gluck IV
289fc33bf4SAlexander von Gluck IVHAIKU_CONFIG = {
299fc33bf4SAlexander von Gluck IV    'cpu'             : "max",
309fc33bf4SAlexander von Gluck IV    'machine'         : 'pc',
319fc33bf4SAlexander von Gluck IV    'guest_user'      : "vagrant",
329fc33bf4SAlexander von Gluck IV    'guest_pass'      : "",
339fc33bf4SAlexander von Gluck IV    'root_user'       : "vagrant",
349fc33bf4SAlexander von Gluck IV    'root_pass'       : "",
359fc33bf4SAlexander von Gluck IV    'ssh_key_file'    : VAGRANT_KEY_FILE,
369fc33bf4SAlexander von Gluck IV    'ssh_pub_key_file': VAGRANT_PUB_KEY_FILE,
379fc33bf4SAlexander von Gluck IV    'memory'          : "4G",
389fc33bf4SAlexander von Gluck IV    'extra_args'      : [],
399fc33bf4SAlexander von Gluck IV    'qemu_args'       : "-device VGA",
409fc33bf4SAlexander von Gluck IV    'dns'             : "",
419fc33bf4SAlexander von Gluck IV    'ssh_port'        : 0,
429fc33bf4SAlexander von Gluck IV    'install_cmds'    : "",
439fc33bf4SAlexander von Gluck IV    'boot_dev_type'   : "block",
449fc33bf4SAlexander von Gluck IV    'ssh_timeout'     : 1,
459fc33bf4SAlexander von Gluck IV}
469fc33bf4SAlexander von Gluck IV
479fc33bf4SAlexander von Gluck IVclass HaikuVM(basevm.BaseVM):
489fc33bf4SAlexander von Gluck IV    name = "haiku"
499fc33bf4SAlexander von Gluck IV    arch = "x86_64"
509fc33bf4SAlexander von Gluck IV
51*66ef41d2SThomas Huth    link = "https://app.vagrantup.com/haiku-os/boxes/r1beta4-x86_64/versions/20230114/providers/libvirt.box"
52*66ef41d2SThomas Huth    csum = "6e72a2a470e03dbc3c5e808664e057bb4022b390dca88e4c7da6188f26f6a3c9"
539fc33bf4SAlexander von Gluck IV
549fc33bf4SAlexander von Gluck IV    poweroff = "shutdown"
559fc33bf4SAlexander von Gluck IV
569fc33bf4SAlexander von Gluck IV    requirements = [
579fc33bf4SAlexander von Gluck IV        "devel:libbz2",
589fc33bf4SAlexander von Gluck IV        "devel:libcapstone",
599fc33bf4SAlexander von Gluck IV        "devel:libcurl",
609fc33bf4SAlexander von Gluck IV        "devel:libfdt",
619fc33bf4SAlexander von Gluck IV        "devel:libgcrypt",
629fc33bf4SAlexander von Gluck IV        "devel:libgl",
639fc33bf4SAlexander von Gluck IV        "devel:libglib_2.0",
649fc33bf4SAlexander von Gluck IV        "devel:libgnutls",
659fc33bf4SAlexander von Gluck IV        "devel:libgpg_error",
669fc33bf4SAlexander von Gluck IV        "devel:libintl",
679fc33bf4SAlexander von Gluck IV        "devel:libjpeg",
689fc33bf4SAlexander von Gluck IV        "devel:liblzo2",
699fc33bf4SAlexander von Gluck IV        "devel:libncursesw",
709fc33bf4SAlexander von Gluck IV        "devel:libnettle",
719fc33bf4SAlexander von Gluck IV        "devel:libpixman_1",
729fc33bf4SAlexander von Gluck IV        "devel:libpng16",
739fc33bf4SAlexander von Gluck IV        "devel:libsdl2_2.0",
740026be1dSThomas Huth        "devel:libslirp",
759fc33bf4SAlexander von Gluck IV        "devel:libsnappy",
769fc33bf4SAlexander von Gluck IV        "devel:libssh2",
779fc33bf4SAlexander von Gluck IV        "devel:libtasn1",
789fc33bf4SAlexander von Gluck IV        "devel:libusb_1.0",
799fc33bf4SAlexander von Gluck IV        "devel:libz",
809fc33bf4SAlexander von Gluck IV        "ninja",
819fc33bf4SAlexander von Gluck IV    ]
829fc33bf4SAlexander von Gluck IV
839fc33bf4SAlexander von Gluck IV    BUILD_SCRIPT = """
849fc33bf4SAlexander von Gluck IV        set -e;
859fc33bf4SAlexander von Gluck IV        rm -rf /tmp/qemu-test.*
869fc33bf4SAlexander von Gluck IV        cd $(mktemp -d /tmp/qemu-test.XXXXXX);
879fc33bf4SAlexander von Gluck IV        mkdir src build; cd src;
88*66ef41d2SThomas Huth        tar -xf /dev/disk/virtual/virtio_block/1/raw;
899fc33bf4SAlexander von Gluck IV        mkdir -p /usr/bin
909fc33bf4SAlexander von Gluck IV        ln -s /boot/system/bin/env /usr/bin/env
919fc33bf4SAlexander von Gluck IV        cd ../build
920026be1dSThomas Huth        ../src/configure {configure_opts};
939fc33bf4SAlexander von Gluck IV        make --output-sync -j{jobs} {target} {verbose};
949fc33bf4SAlexander von Gluck IV    """
959fc33bf4SAlexander von Gluck IV
969fc33bf4SAlexander von Gluck IV    def build_image(self, img):
979fc33bf4SAlexander von Gluck IV        self.print_step("Downloading disk image")
989fc33bf4SAlexander von Gluck IV        tarball = self._download_with_cache(self.link, sha256sum=self.csum)
999fc33bf4SAlexander von Gluck IV
1009fc33bf4SAlexander von Gluck IV        self.print_step("Extracting disk image")
1019fc33bf4SAlexander von Gluck IV
10263021223SThomas Huth        subprocess.check_call(["tar", "xzf", tarball, "box.img", "-O"],
1039fc33bf4SAlexander von Gluck IV                              stdout=open(img, 'wb'))
1049fc33bf4SAlexander von Gluck IV
1059fc33bf4SAlexander von Gluck IV        self.print_step("Preparing disk image")
1069fc33bf4SAlexander von Gluck IV        self.boot(img)
1079fc33bf4SAlexander von Gluck IV
1089fc33bf4SAlexander von Gluck IV        # Wait for ssh to be available.
1099fc33bf4SAlexander von Gluck IV        self.wait_ssh(wait_root=True, cmd="exit 0")
1109fc33bf4SAlexander von Gluck IV
1119fc33bf4SAlexander von Gluck IV        # Install packages
1129fc33bf4SAlexander von Gluck IV        self.ssh_root("pkgman install -y %s" % " ".join(self.requirements))
1139fc33bf4SAlexander von Gluck IV        self.graceful_shutdown()
1149fc33bf4SAlexander von Gluck IV
1159fc33bf4SAlexander von Gluck IV        self.print_step("All done")
1169fc33bf4SAlexander von Gluck IV
1179fc33bf4SAlexander von Gluck IVif __name__ == "__main__":
1189fc33bf4SAlexander von Gluck IV    sys.exit(basevm.main(HaikuVM, config=HAIKU_CONFIG))
119