qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] tests/vm: Add Haiku test based on their vagrant images


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH] tests/vm: Add Haiku test based on their vagrant images
Date: Fri, 25 Sep 2020 10:49:25 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0

Hi Alexander,

On 9/6/20 4:41 PM, Alexander von Gluck IV wrote:
> September 6, 2020 9:35 AM, "Alexander von Gluck IV" <kallisti5@unixzen.com> 
> wrote:
>> Signed-off-by: Alexander von Gluck IV <kallisti5@unixzen.com>
>> ---
>> tests/keys/vagrant | 27 +++++++++
>> tests/keys/vagrant.pub | 1 +
>> tests/vm/basevm.py | 5 +-
>> tests/vm/haiku.x86_64 | 121 +++++++++++++++++++++++++++++++++++++++++
>> 4 files changed, 152 insertions(+), 2 deletions(-)
>> create mode 100644 tests/keys/vagrant
>> create mode 100644 tests/keys/vagrant.pub
>> create mode 100755 tests/vm/haiku.x86_64
>>
>> diff --git a/tests/keys/vagrant b/tests/keys/vagrant
>> new file mode 100644
>> index 0000000000..7d6a083909
>> --- /dev/null
>> +++ b/tests/keys/vagrant
>> @@ -0,0 +1,27 @@
>> +-----BEGIN RSA PRIVATE KEY-----
>> +MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI
>>
>> diff --git a/tests/keys/vagrant.pub b/tests/keys/vagrant.pub
>> new file mode 100644
>> index 0000000000..18a9c00fd5
>> --- /dev/null
>> +++ b/tests/keys/vagrant.pub
>> @@ -0,0 +1 @@
>> +ssh-rsa
>> AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oX
> 
> A little background information for context. These are the Vagrant SSH keys 
> which are packed with every vagrant OS image and allow OS access for 
> automation.  The python vm tester knowing of these lets it leverage Vagrant 
> OS images for testing without much work.

Please add this information as comment in the source files.

> 
> 
> 
>> --- a/tests/vm/basevm.py
>> +++ b/tests/vm/basevm.py
>> @@ -44,6 +44,7 @@ DEFAULT_CONFIG = {
>> 'machine' : 'pc',
>> 'guest_user' : "qemu",
>> 'guest_pass' : "qemupass",
>> + 'root_user' : "root",
>> 'root_pass' : "qemupass",
>> 'ssh_key_file' : SSH_KEY_FILE,
>> 'ssh_pub_key_file': SSH_PUB_KEY_FILE,
>> @@ -245,13 +246,13 @@ class BaseVM(object):
>> return self._ssh_do(self._config["guest_user"], cmd, False)
>>
>> def ssh_root(self, *cmd):
>> - return self._ssh_do("root", cmd, False)
>> + return self._ssh_do(self._config["root_user"], cmd, False)
>>
>> def ssh_check(self, *cmd):
>> self._ssh_do(self._config["guest_user"], cmd, True)
>>
>> def ssh_root_check(self, *cmd):
>> - self._ssh_do("root", cmd, True)
>> + self._ssh_do(self._config["root_user"], cmd, True)
>>
>> def build_image(self, img):
>> raise NotImplementedError
> 
> 
> Haiku's user is UID 0, so essentially our root user isn't named root.
> This adds the (optional) ability to override the root username.

Ditto.

> 
> 
>> diff --git a/tests/vm/haiku.x86_64 b/tests/vm/haiku.x86_64
>> new file mode 100755
>> index 0000000000..9777722f51
>> --- /dev/null
>> +++ b/tests/vm/haiku.x86_64
>> @@ -0,0 +1,121 @@
>> +#!/usr/bin/env python3
>> +#
>> +# Haiku VM image
>> +#
>> +# Copyright 2020 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.
>> +#
> 
> 
> This build script works as expected, transferring the qemu archive over
> via the virtio block device and building it.
> 
> More information here (including output of tools):
> https://bugs.launchpad.net/qemu/+bug/1715203
> 
> This purpose of this is trying to prevent the need to remove
> upstream qemu support for Haiku.
> 
> We have some out-of-tree patches to fix the error seen in our ports, i'll
> work on upstreaming these.

Please do, because so far this fail before compiling the 10th file:

slirp/src/tftp.c: In function 'tftp_read_data':
slirp/src/tftp.c:113:50: error: 'O_BINARY' undeclared (first use in this
function); did you mean 'L_INCR'?
         spt->fd = open(spt->filename, O_RDONLY | O_BINARY);
                                                  ^~~~~~~~
                                                  L_INCR

To avoid using 4GB of temporary storage in my HOMEDIR I had
to do this change:

-- >8 --
--- a/tests/vm/haiku.x86_64
+++ b/tests/vm/haiku.x86_64
@@ -93,17 +93,15 @@ class HaikuVM(basevm.BaseVM):

     def build_image(self, img):
         self.print_step("Downloading disk image")
-        cvg = self._download_with_cache(self.link, sha256sum=self.csum)
-        cgz = cvg + ".tar.gz"
-        img_tmp = "./box.img"
+        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")
-
-        subprocess.check_call(["cp", "-f", cvg, cgz])
-        subprocess.check_call(["tar", "xvzf", cgz, img_tmp])
-        subprocess.check_call(["chmod", "666", img_tmp])
-
-        self.boot(img_tmp)
+        self.boot(img)

         # Wait for ssh to be available.
         self.wait_ssh(wait_root=True, cmd="exit 0")
@@ -112,9 +110,6 @@ class HaikuVM(basevm.BaseVM):
         self.ssh_root("pkgman install -y %s" % " ".join(self.requirements))
         self.graceful_shutdown()

-        if os.path.exists(cgz):
-            os.remove(cgz)
-        subprocess.check_call(["mv", img_tmp, img])
         self.print_step("All done")

 if __name__ == "__main__":
---

Note that something is not working well in your script because
the image is extracted/reinstalled each time. This has to be
done once, then we reuse the image for the builds.

Also, please address Thomas comment.

Thanks,

Phil.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]