 66ef41d29e
			
		
	
	
		66ef41d29e
		
	
	
	
	
		
			
			The old Haiku VM based on Beta 3 does not work anymore since it fails to install the additional packages now that Beta 4 has been released. Thanks to Alexander von Gluck IV for providing a new image based on Beta 4, we can now upgrade the test image in our QEMU CI, too, to get this working again. Note that Haiku Beta 4 apparently finally fixed the issue with the enumeration of the virtio-block devices (see the ticket at https://dev.haiku-os.org/ticket/16512 ) - the tarball disk can now be found at index 1 instead of index 0. Message-Id: <20230116083014.55647-1-thuth@redhat.com> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Thomas Huth <thuth@redhat.com>
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.1 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",
 | |
|     ]
 | |
| 
 | |
|     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("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))
 |