Files
qemu-qemu-1/tests/vm/haiku.x86_64
Thomas Huth f2981f9901 tests/vm: Make the haiku VM usable again
The haiku VM bitrotted in the course of time. Make sure to use the
latest version of the repositories here and install missing pieces
like "pip" and "tomli" now.

Since we nowadays also install our own version of meson in our venv,
this also requires a change to our configure script: On Haiku, the
meson binary shows up as pyvenv/non-packaged/bin/meson here, and not
in the expected location pyvenv/bin/meson. Adjust the "meson" variable
to point to that Haiku-specific location to fix this issue. See also:
https://github.com/haiku/haiku/blob/r1beta5/docs/user/storage/storageintro.dox

And finally, with the new toolchain from the beta 5, we also have to
compile with "-pie", otherwise the linker complains about bad relocations
in the object files, so allow compiling with PIE in the configure script
now.

Reviewed-by: Prasad Pandit <pjp@fedoraproject.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20260123184429.5278-1-thuth@redhat.com>
2026-01-27 15:20:43 +01:00

123 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Haiku VM image
#
# Copyright 2020-2022 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/r1beta4-x86_64/versions/20230114/providers/libvirt.box"
csum = "6e72a2a470e03dbc3c5e808664e057bb4022b390dca88e4c7da6188f26f6a3c9"
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:libslirp",
"devel:libsnappy",
"devel:libssh2",
"devel:libtasn1",
"devel:libusb_1.0",
"devel:libz",
"ninja",
"pip",
"tomli_python310",
]
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/1/raw;
mkdir -p /usr/bin
ln -s /boot/system/bin/env /usr/bin/env
cd ../build
../src/configure {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("echo yes | pkgman add-repo https://eu.hpkg.haiku-os.org/haiku/r1beta5/$(getarch)/current")
self.ssh_root("echo yes | pkgman add-repo https://eu.hpkg.haiku-os.org/haikuports/r1beta5/$(getarch)/current")
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))