cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

haiku.x86_64 (3244B)


      1#!/usr/bin/env python3
      2#
      3# Haiku VM image
      4#
      5# Copyright 2020 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
     14import os
     15import re
     16import sys
     17import time
     18import socket
     19import subprocess
     20import basevm
     21
     22VAGRANT_KEY_FILE = os.path.join(os.path.dirname(__file__),
     23    "..", "keys", "vagrant")
     24
     25VAGRANT_PUB_KEY_FILE = os.path.join(os.path.dirname(__file__),
     26    "..", "keys", "vagrant.pub")
     27
     28HAIKU_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
     47class HaikuVM(basevm.BaseVM):
     48    name = "haiku"
     49    arch = "x86_64"
     50
     51    link = "https://app.vagrantup.com/haiku-os/boxes/r1beta2-x86_64/versions/20200702/providers/libvirt.box"
     52    csum = "41c38b316e0cbdbc66b5dbaf3612b866700a4f35807cb1eb266a5bf83e9e68d5"
     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:libsnappy",
     75        "devel:libssh2",
     76        "devel:libtasn1",
     77        "devel:libusb_1.0",
     78        "devel:libz",
     79        "ninja",
     80    ]
     81
     82    # https://dev.haiku-os.org/ticket/16512 virtio disk1 shows up as 0 (reversed order)
     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/0/raw;
     89        mkdir -p /usr/bin
     90        ln -s /boot/system/bin/env /usr/bin/env
     91        cd ../build
     92        ../src/configure --disable-slirp {configure_opts};
     93        make --output-sync -j{jobs} {target} {verbose};
     94    """
     95
     96    def build_image(self, img):
     97        self.print_step("Downloading disk image")
     98        tarball = self._download_with_cache(self.link, sha256sum=self.csum)
     99
    100        self.print_step("Extracting disk image")
    101
    102        subprocess.check_call(["tar", "xzf", tarball, "./box.img", "-O"],
    103                              stdout=open(img, 'wb'))
    104
    105        self.print_step("Preparing disk image")
    106        self.boot(img)
    107
    108        # Wait for ssh to be available.
    109        self.wait_ssh(wait_root=True, cmd="exit 0")
    110
    111        # Install packages
    112        self.ssh_root("pkgman install -y %s" % " ".join(self.requirements))
    113        self.graceful_shutdown()
    114
    115        self.print_step("All done")
    116
    117if __name__ == "__main__":
    118    sys.exit(basevm.main(HaikuVM, config=HAIKU_CONFIG))