qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

haiku.x86_64 (3257B)


      1 #!/usr/bin/env python3
      2 #
      3 # Haiku VM image
      4 #
      5 # Copyright 2020-2022 Haiku, Inc.
      6 #
      7 # Authors:
      8 #  Alexander von Gluck IV <kallisti5@unixzen.com>
      9 #
     10 # This code is licensed under the GPL version 2 or later.  See
     11 # the COPYING file in the top-level directory.
     12 #
     13 
     14 import os
     15 import re
     16 import sys
     17 import time
     18 import socket
     19 import subprocess
     20 import basevm
     21 
     22 VAGRANT_KEY_FILE = os.path.join(os.path.dirname(__file__),
     23     "..", "keys", "vagrant")
     24 
     25 VAGRANT_PUB_KEY_FILE = os.path.join(os.path.dirname(__file__),
     26     "..", "keys", "vagrant.pub")
     27 
     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,
     45 }
     46 
     47 class HaikuVM(basevm.BaseVM):
     48     name = "haiku"
     49     arch = "x86_64"
     50 
     51     link = "https://app.vagrantup.com/haiku-os/boxes/r1beta3-x86_64/versions/20220216/providers/libvirt.box"
     52     csum = "e67d4aacbcc687013d5cc91990ddd86cc5d70a5d28432ae2691944f8ce5d5041"
     53 
     54     poweroff = "shutdown"
     55 
     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     ]
     82 
     83     # https://dev.haiku-os.org/ticket/16512 virtio disk1 shows up as 0 (reversed order)
     84     BUILD_SCRIPT = """
     85         set -e;
     86         rm -rf /tmp/qemu-test.*
     87         cd $(mktemp -d /tmp/qemu-test.XXXXXX);
     88         mkdir src build; cd src;
     89         tar -xf /dev/disk/virtual/virtio_block/0/raw;
     90         mkdir -p /usr/bin
     91         ln -s /boot/system/bin/env /usr/bin/env
     92         cd ../build
     93         ../src/configure {configure_opts};
     94         make --output-sync -j{jobs} {target} {verbose};
     95     """
     96 
     97     def build_image(self, img):
     98         self.print_step("Downloading disk image")
     99         tarball = self._download_with_cache(self.link, sha256sum=self.csum)
    100 
    101         self.print_step("Extracting disk image")
    102 
    103         subprocess.check_call(["tar", "xzf", tarball, "box.img", "-O"],
    104                               stdout=open(img, 'wb'))
    105 
    106         self.print_step("Preparing disk image")
    107         self.boot(img)
    108 
    109         # Wait for ssh to be available.
    110         self.wait_ssh(wait_root=True, cmd="exit 0")
    111 
    112         # Install packages
    113         self.ssh_root("pkgman install -y %s" % " ".join(self.requirements))
    114         self.graceful_shutdown()
    115 
    116         self.print_step("All done")
    117 
    118 if __name__ == "__main__":
    119     sys.exit(basevm.main(HaikuVM, config=HAIKU_CONFIG))