blob: 2eb736dae125f6b6150307ae7f16a3808fa0d7d1 [file] [log] [blame]
Alexander von Gluck IV9fc33bf2020-10-27 11:21:21 +01001#!/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",
Alexander von Gluck IV9fc33bf2020-10-27 11:21:21 +010080 ]
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))