* [Qemu-devel] [PATCH RFC 1/9] gitignore: Ignore vm test images
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
@ 2017-08-16 7:20 ` Fam Zheng
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 2/9] qemu.py: Add variable vga type Fam Zheng
` (10 subsequent siblings)
11 siblings, 0 replies; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:20 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
Signed-off-by: Fam Zheng <famz@redhat.com>
---
.gitignore | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.gitignore b/.gitignore
index cf65316863..693e2f3009 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,6 +52,8 @@
/vscclient
/vhost-user-scsi
/fsdev/virtfs-proxy-helper
+/tests/vm/*.img
+/tests/vm/*.tmp
*.[1-9]
*.a
*.aux
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [Qemu-devel] [PATCH RFC 2/9] qemu.py: Add variable vga type
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 1/9] gitignore: Ignore vm test images Fam Zheng
@ 2017-08-16 7:20 ` Fam Zheng
2017-08-16 9:18 ` Kamil Rytarowski
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 3/9] qemu.py: Add "wait()" method Fam Zheng
` (9 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:20 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
Some guests behave differently when no VGA is detected. Add a variable
to allow override the "none" default.
Signed-off-by: Fam Zheng <famz@redhat.com>
---
scripts/qemu.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/scripts/qemu.py b/scripts/qemu.py
index 880e3e8219..e5f314efdb 100644
--- a/scripts/qemu.py
+++ b/scripts/qemu.py
@@ -39,6 +39,7 @@ class QEMUMachine(object):
self._iolog = None
self._socket_scm_helper = socket_scm_helper
self._debug = debug
+ self._vga = "none"
# This can be used to add an unused monitor instance.
def add_monitor_telnet(self, ip, port):
@@ -111,7 +112,7 @@ class QEMUMachine(object):
moncdev = 'socket,id=mon,path=%s' % self._monitor_address
return ['-chardev', moncdev,
'-mon', 'chardev=mon,mode=control',
- '-display', 'none', '-vga', 'none']
+ '-display', 'none', '-vga', self._vga]
def _pre_launch(self):
self._qmp = qmp.qmp.QEMUMonitorProtocol(self._monitor_address, server=True,
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 2/9] qemu.py: Add variable vga type
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 2/9] qemu.py: Add variable vga type Fam Zheng
@ 2017-08-16 9:18 ` Kamil Rytarowski
0 siblings, 0 replies; 34+ messages in thread
From: Kamil Rytarowski @ 2017-08-16 9:18 UTC (permalink / raw)
To: Fam Zheng, qemu-devel
Cc: Peter Maydell, Philippe Mathieu-Daudé, Kamil Rytarowski,
stefanha, pbonzini, Alex Bennée
[-- Attachment #1: Type: text/plain, Size: 1431 bytes --]
On 16.08.2017 09:20, Fam Zheng wrote:
> Some guests behave differently when no VGA is detected. Add a variable
> to allow override the "none" default.
>
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
> scripts/qemu.py | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/qemu.py b/scripts/qemu.py
> index 880e3e8219..e5f314efdb 100644
> --- a/scripts/qemu.py
> +++ b/scripts/qemu.py
> @@ -39,6 +39,7 @@ class QEMUMachine(object):
> self._iolog = None
> self._socket_scm_helper = socket_scm_helper
> self._debug = debug
> + self._vga = "none"
>
> # This can be used to add an unused monitor instance.
> def add_monitor_telnet(self, ip, port):
> @@ -111,7 +112,7 @@ class QEMUMachine(object):
> moncdev = 'socket,id=mon,path=%s' % self._monitor_address
> return ['-chardev', moncdev,
> '-mon', 'chardev=mon,mode=control',
> - '-display', 'none', '-vga', 'none']
> + '-display', 'none', '-vga', self._vga]
>
> def _pre_launch(self):
> self._qmp = qmp.qmp.QEMUMonitorProtocol(self._monitor_address, server=True,
>
Not sure if this is related but OpenBSD ships with a patch for vga
(cherry-picked from qemu-devel):
http://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/emulators/qemu/patches/patch-roms_vgabios_vgabios_c?annotate=1.1
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* [Qemu-devel] [PATCH RFC 3/9] qemu.py: Add "wait()" method
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 1/9] gitignore: Ignore vm test images Fam Zheng
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 2/9] qemu.py: Add variable vga type Fam Zheng
@ 2017-08-16 7:20 ` Fam Zheng
2017-08-16 8:32 ` Stefan Hajnoczi
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib Fam Zheng
` (8 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:20 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
Signed-off-by: Fam Zheng <famz@redhat.com>
---
scripts/qemu.py | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/scripts/qemu.py b/scripts/qemu.py
index e5f314efdb..3e7eb44035 100644
--- a/scripts/qemu.py
+++ b/scripts/qemu.py
@@ -144,6 +144,11 @@ class QEMUMachine(object):
self._post_shutdown()
raise
+ def wait(self):
+ self._popen.wait()
+ self._qmp.close()
+ self._post_shutdown()
+
def shutdown(self):
'''Terminate the VM and clean up'''
if self.is_running():
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 3/9] qemu.py: Add "wait()" method
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 3/9] qemu.py: Add "wait()" method Fam Zheng
@ 2017-08-16 8:32 ` Stefan Hajnoczi
2017-08-16 20:50 ` Fam Zheng
0 siblings, 1 reply; 34+ messages in thread
From: Stefan Hajnoczi @ 2017-08-16 8:32 UTC (permalink / raw)
To: Fam Zheng
Cc: qemu-devel, Peter Maydell, Philippe Mathieu-Daudé,
Kamil Rytarowski, stefanha, pbonzini, Alex Bennée
[-- Attachment #1: Type: text/plain, Size: 750 bytes --]
On Wed, Aug 16, 2017 at 03:20:58PM +0800, Fam Zheng wrote:
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
> scripts/qemu.py | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/scripts/qemu.py b/scripts/qemu.py
> index e5f314efdb..3e7eb44035 100644
> --- a/scripts/qemu.py
> +++ b/scripts/qemu.py
> @@ -144,6 +144,11 @@ class QEMUMachine(object):
> self._post_shutdown()
> raise
>
> + def wait(self):
> + self._popen.wait()
> + self._qmp.close()
> + self._post_shutdown()
> +
Please include docstrings for public methods.
Is this method for users who do not use shutdown() because the guest
halts itself?
Why is self._load_io_log() not called?
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 3/9] qemu.py: Add "wait()" method
2017-08-16 8:32 ` Stefan Hajnoczi
@ 2017-08-16 20:50 ` Fam Zheng
0 siblings, 0 replies; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 20:50 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Peter Maydell, qemu-devel, Philippe Mathieu-Daudé,
Kamil Rytarowski, stefanha, pbonzini, Alex Bennée
On Wed, 08/16 09:32, Stefan Hajnoczi wrote:
> On Wed, Aug 16, 2017 at 03:20:58PM +0800, Fam Zheng wrote:
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> > scripts/qemu.py | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/scripts/qemu.py b/scripts/qemu.py
> > index e5f314efdb..3e7eb44035 100644
> > --- a/scripts/qemu.py
> > +++ b/scripts/qemu.py
> > @@ -144,6 +144,11 @@ class QEMUMachine(object):
> > self._post_shutdown()
> > raise
> >
> > + def wait(self):
> > + self._popen.wait()
> > + self._qmp.close()
> > + self._post_shutdown()
> > +
>
> Please include docstrings for public methods.
OK.
>
> Is this method for users who do not use shutdown() because the guest
> halts itself?
Yes, cooperative shutdown (e.g. "shutdown" command from guest or acpi signal) is
cleaner when we want to make sure changes are flushed to disk.
>
> Why is self._load_io_log() not called?
Will add it.
Fam
^ permalink raw reply [flat|nested] 34+ messages in thread
* [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (2 preceding siblings ...)
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 3/9] qemu.py: Add "wait()" method Fam Zheng
@ 2017-08-16 7:20 ` Fam Zheng
2017-08-16 8:55 ` Stefan Hajnoczi
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 5/9] tests: Add ubuntu.i386 image Fam Zheng
` (7 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:20 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
This is the common code to implement a "VM test" to
1) Download and initialize a pre-defined VM that has necessary
dependencies to build QEMU and SSH access.
2) Archive $SRC_PATH to a .tar file.
3) Boot the VM, and pass the source tar file to the guest.
4) SSH into the VM, untar the source tarball, build from the source.
Signed-off-by: Fam Zheng <famz@redhat.com>
---
tests/vm/basevm.py | 246 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 246 insertions(+)
create mode 100755 tests/vm/basevm.py
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
new file mode 100755
index 0000000000..b266bd6dc7
--- /dev/null
+++ b/tests/vm/basevm.py
@@ -0,0 +1,246 @@
+#!/usr/bin/env python
+#
+# VM testing base class
+#
+# Copyright (C) 2017 Red Hat Inc.
+#
+# Authors:
+# Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+import os
+import sys
+import logging
+import time
+import datetime
+sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "scripts"))
+from qemu import QEMUMachine
+import subprocess
+import hashlib
+import argparse
+import atexit
+import tempfile
+import shutil
+
+SSH_KEY = """\
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAopAuOlmLV6LVHdFBj8/eeOwI9CqguIJPp7eAQSZvOiB4Ag/R
+coEhl/RBbrV5Yc/SmSD4PTpJO/iM10RwliNjDb4a3I8q3sykRJu9c9PI/YsH8WN9
++NH2NjKPtJIcKTu287IM5JYxyB6nDoOzILbTyJ1TDR/xH6qYEfBAyiblggdjcvhA
+RTf93QIn39F/xLypXvT1K2O9BJEsnJ8lEUvB2UXhKo/JTfSeZF8wPBeowaP9EONk
+7b+nuJOWHGg68Ji6wVi62tjwl2Szch6lxIhZBpnV7QNRKMfYHP6eIyF4pusazzZq
+Telsq6xI2ghecWLzb/MF5A+rklsGx2FNuJSAJwIDAQABAoIBAHHi4o/8VZNivz0x
+cWXn8erzKV6tUoWQvW85Lj/2RiwJvSlsnYZDkx5af1CpEE2HA/pFT8PNRqsd+MWC
+7AEy710cVsM4BYerBFYQaYxwzblaoojo88LSjVPw3h5Z0iLM8+IMVd36nwuc9dpE
+R8TecMZ1+U4Tl6BgqkK+9xToZRdPKdjS8L5MoFhGN+xY0vRbbJbGaV9Q0IHxLBkB
+rEBV7T1mUynneCHRUQlJQEwJmKpT8MH3IjsUXlG5YvnuuvcQJSNTaW2iDLxuOKp8
+cxW8+qL88zpb1D5dppoIu6rlrugN0azSq70ruFJQPc/A8GQrDKoGgRQiagxNY3u+
+vHZzXlECgYEA0dKO3gfkSxsDBb94sQwskMScqLhcKhztEa8kPxTx6Yqh+x8/scx3
+XhJyOt669P8U1v8a/2Al+s81oZzzfQSzO1Q7gEwSrgBcRMSIoRBUw9uYcy02ngb/
+j/ng3DGivfJztjjiSJwb46FHkJ2JR8mF2UisC6UMXk3NgFY/3vWQx78CgYEAxlcG
+T3hfSWSmTgKRczMJuHQOX9ULfTBIqwP5VqkkkiavzigGRirzb5lgnmuTSPTpF0LB
+XVPjR2M4q+7gzP0Dca3pocrvLEoxjwIKnCbYKnyyvnUoE9qHv4Kr+vDbgWpa2LXG
+JbLmE7tgTCIp20jOPPT4xuDvlbzQZBJ5qCQSoZkCgYEAgrotSSihlCnAOFSTXbu4
+CHp3IKe8xIBBNENq0eK61kcJpOxTQvOha3sSsJsU4JAM6+cFaxb8kseHIqonCj1j
+bhOM/uJmwQJ4el/4wGDsbxriYOBKpyq1D38gGhDS1IW6kk3erl6VAb36WJ/OaGum
+eTpN9vNeQWM4Jj2WjdNx4QECgYAwTdd6mU1TmZCrJRL5ZG+0nYc2rbMrnQvFoqUi
+BvWiJovggHzur90zy73tNzPaq9Ls2FQxf5G1vCN8NCRJqEEjeYCR59OSDMu/EXc2
+CnvQ9SevHOdS1oEDEjcCWZCMFzPi3XpRih1gptzQDe31uuiHjf3cqcGPzTlPdfRt
+D8P92QKBgC4UaBvIRwREVJsdZzpIzm224Bpe8LOmA7DeTnjlT0b3lkGiBJ36/Q0p
+VhYh/6cjX4/iuIs7gJbGon7B+YPB8scmOi3fj0+nkJAONue1mMfBNkba6qQTc6Y2
+5mEKw2/O7/JpND7ucU3OK9plcw/qnrWDgHxl0Iz95+OzUIIagxne
+-----END RSA PRIVATE KEY-----
+"""
+SSH_PUB_KEY = """\
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCikC46WYtXotUd0UGPz9547Aj0KqC4gk+nt4BBJm86IHgCD9FygSGX9EFutXlhz9KZIPg9Okk7+IzXRHCWI2MNvhrcjyrezKREm71z08j9iwfxY3340fY2Mo+0khwpO7bzsgzkljHIHqcOg7MgttPInVMNH/EfqpgR8EDKJuWCB2Ny+EBFN/3dAiff0X/EvKle9PUrY70EkSycnyURS8HZReEqj8lN9J5kXzA8F6jBo/0Q42Ttv6e4k5YcaDrwmLrBWLra2PCXZLNyHqXEiFkGmdXtA1Eox9gc/p4jIXim6xrPNmpN6WyrrEjaCF5xYvNv8wXkD6uSWwbHYU24lIAn qemu-vm-key
+"""
+
+class BaseVM(object):
+ GUEST_USER = "qemu"
+ GUEST_PASS = "qemupass"
+ ROOT_PASS = "qemupass"
+
+ # The script to run in the guest that builds QEMU
+ BUILD_SCRIPT = ""
+ # The guest name, to be overridden by subclasses
+ name = "#base"
+ def __init__(self, debug=False):
+ self._guest = None
+ self.ssh_port = 20022
+ self._tmpdir = tempfile.mkdtemp(prefix="qemu-vm-")
+ atexit.register(shutil.rmtree, self._tmpdir)
+
+ self._ssh_key_file = os.path.join(self._tmpdir, "id_rsa")
+ open(self._ssh_key_file, "w").write(SSH_KEY)
+ subprocess.check_call(["chmod", "600", self._ssh_key_file])
+
+ self._ssh_pub_key_file = os.path.join(self._tmpdir, "id_rsa.pub")
+ open(self._ssh_pub_key_file, "w").write(SSH_PUB_KEY)
+
+ self.debug = debug
+ self._stderr = sys.stderr
+ self._devnull = open("/dev/null", "w")
+ if self.debug:
+ self._stdout = sys.stdout
+ else:
+ self._stdout = self._devnull
+ self._args = [ \
+ "-nodefaults", "-enable-kvm", "-m", "2G",
+ "-smp", os.environ.get("J", "4"), "-cpu", "host",
+ "-netdev", "user,id=vnet,hostfwd=:0.0.0.0:%d-:22" % self.ssh_port,
+ "-device", "virtio-net-pci,netdev=vnet",
+ "-vnc", ":0,to=20",
+ "-serial", "file:%s" % os.path.join(self._tmpdir, "serial.out")]
+
+ self._data_args = []
+
+ def _download_with_cache(self, url):
+ cache_dir = os.path.expanduser("~/.cache/qemu-vm/download")
+ subprocess.check_call(["mkdir", "-p", cache_dir])
+ fname = os.path.join(cache_dir, hashlib.sha1(url).hexdigest())
+ if os.path.exists(fname):
+ return fname
+ logging.debug("Downloading %s to %s...", url, fname)
+ subprocess.check_call(["wget", "-c", url, "-O", fname + ".download"],
+ stdout=self._stdout, stderr=self._stderr)
+ subprocess.check_call(["mv", fname + ".download", fname],
+ stdout=self._stdout, stderr=self._stderr)
+ return fname
+
+ def _ssh_do(self, user, cmd, check, interactive=False):
+ ssh_cmd = ["ssh", "-q",
+ "-o", "StrictHostKeyChecking=no",
+ "-o", "UserKnownHostsFile=/dev/null",
+ "-o", "ConnectTimeout=1",
+ "-p", str(self.ssh_port), "-i", self._ssh_key_file]
+ if interactive:
+ ssh_cmd += ['-t']
+ assert not isinstance(cmd, str)
+ ssh_cmd += ["%s@127.0.0.1" % user] + list(cmd)
+ logging.debug("ssh_cmd: %s", " ".join(ssh_cmd))
+ r = subprocess.call(ssh_cmd,
+ stdin=sys.stdin if interactive else self._devnull,
+ stdout=sys.stdout if interactive else self._stdout,
+ stderr=sys.stderr if interactive else self._stderr)
+ if check and r != 0:
+ raise Exception("SSH command failed: %s" % cmd)
+ return r
+
+ def ssh(self, *cmd):
+ return self._ssh_do(self.GUEST_USER, cmd, False)
+
+ def ssh_interactive(self, *cmd):
+ return self._ssh_do(self.GUEST_USER, cmd, False, True)
+
+ def ssh_root(self, *cmd):
+ return self._ssh_do("root", cmd, False)
+
+ def ssh_check(self, *cmd):
+ self._ssh_do(self.GUEST_USER, cmd, True)
+
+ def ssh_root_check(self, *cmd):
+ self._ssh_do("root", cmd, True)
+
+ def build_image(self, img):
+ raise NotImplementedError
+
+ def add_source_dir(self, data_dir):
+ name = "data-" + hashlib.sha1(data_dir).hexdigest()[:5]
+ tarfile = os.path.join(self._tmpdir, name + ".tar")
+ logging.debug("Creating archive %s for data dir: %s", tarfile, data_dir)
+ subprocess.check_call(["tar", "--exclude-vcs",
+ "--exclude=tests/vm/*.img",
+ "--exclude=*.d",
+ "--exclude=*.o",
+ "--exclude=docker-src.*",
+ "-cf", tarfile, '.'], cwd=data_dir,
+ stdin=self._devnull, stdout=self._stdout)
+ self._data_args += ["-drive",
+ "file=%s,if=none,id=%s,cache=writeback,format=raw" % \
+ (tarfile, name),
+ "-device",
+ "virtio-blk,drive=%s,serial=%s,bootindex=1" % (name, name)]
+
+ def boot(self, img, extra_args=[]):
+ args = self._args + [
+ "-drive", "file=%s,if=none,id=drive0,cache=writeback" % img,
+ "-device", "virtio-blk,drive=drive0,bootindex=0"]
+ args += self._data_args + extra_args
+ logging.debug("QEMU args: %s", " ".join(args))
+ guest = QEMUMachine(binary=os.environ.get("QEMU", "qemu-system-x86_64"),
+ args=args)
+ guest._vga = "std"
+ guest.launch()
+ atexit.register(self.shutdown)
+ self._guest = guest
+
+ def wait_ssh(self, seconds=120):
+ guest_remote = self.GUEST_USER + "@127.0.0.1"
+ starttime = datetime.datetime.now()
+ guest_up = False
+ while (datetime.datetime.now() - starttime).total_seconds() < seconds:
+ if self.ssh("exit 0") == 0:
+ guest_up = True
+ break
+ time.sleep(1)
+ if not guest_up:
+ logging.error("Timeout while waiting for guest to boot up")
+ return 2
+
+ def shutdown(self):
+ self._guest.shutdown()
+
+ def wait(self):
+ self._guest.wait()
+
+ def qmp(self, *args, **kwargs):
+ return self._guest.qmp(*args, **kwargs)
+
+def parse_args(vm_name):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--debug", "-D", action="store_true",
+ help="enable debug output")
+ parser.add_argument("--image", "-i", default="%s.img" % vm_name,
+ help="image file name")
+ parser.add_argument("--force", "-f", action="store_true",
+ help="force build image even if image exists")
+ parser.add_argument("--build-image", "-b", action="store_true",
+ help="build image")
+ parser.add_argument("--build-qemu",
+ help="build QEMU from source in guest")
+ parser.add_argument("--interactive", "-I", action="store_true",
+ help="Interactively run command")
+ return parser.parse_known_args()
+
+def main(vmcls):
+ args, argv = parse_args(vmcls.name)
+ if not argv and not args.build_qemu:
+ print "Nothing to do?"
+ return 1
+ if args.debug:
+ logging.getLogger().setLevel(logging.DEBUG)
+ vm = vmcls(debug=args.debug)
+ if args.build_image:
+ if os.path.exists(args.image) and not args.force:
+ sys.stderr.writelines(["Image file exists: %s\n" % img,
+ "Use --force option to overwrite\n"])
+ return 1
+ return vm.build_image(args.image)
+ if args.build_qemu:
+ vm.add_source_dir(args.build_qemu)
+ cmd = [vm.BUILD_SCRIPT.format(
+ configure_opts = " ".join(argv),
+ jobs=os.environ.get("J", "4"))]
+ else:
+ cmd = argv
+ vm.boot(args.image + ",snapshot=on")
+ vm.wait_ssh()
+ if args.interactive:
+ if vm.ssh_interactive(*cmd) == 0:
+ return 0
+ vm.ssh_interactive()
+ else:
+ return vm.ssh(*cmd)
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib Fam Zheng
@ 2017-08-16 8:55 ` Stefan Hajnoczi
2017-08-16 11:49 ` Eric Blake
2017-08-16 21:03 ` Fam Zheng
0 siblings, 2 replies; 34+ messages in thread
From: Stefan Hajnoczi @ 2017-08-16 8:55 UTC (permalink / raw)
To: Fam Zheng
Cc: qemu-devel, Peter Maydell, Philippe Mathieu-Daudé,
Kamil Rytarowski, stefanha, pbonzini, Alex Bennée
[-- Attachment #1: Type: text/plain, Size: 3507 bytes --]
On Wed, Aug 16, 2017 at 03:20:59PM +0800, Fam Zheng wrote:
> +class BaseVM(object):
> + GUEST_USER = "qemu"
> + GUEST_PASS = "qemupass"
> + ROOT_PASS = "qemupass"
> +
> + # The script to run in the guest that builds QEMU
> + BUILD_SCRIPT = ""
> + # The guest name, to be overridden by subclasses
> + name = "#base"
> + def __init__(self, debug=False):
> + self._guest = None
> + self.ssh_port = 20022
Only one instance of this test can be run per machine due to the
hardcoded SSH port number on the host.
It is possible to use:
-netdev user,id=vnet,hostfwd=:0.0.0.0:0-:22
and then query the port number:
(qemu) info usernet
VLAN -1 (vnet):
Protocol[State] FD Source Address Port Dest. Address Port RecvQ SendQ
TCP[HOST_FORWARD] 15 * 36089 10.0.2.15 22 0 0
The host port is 36089 in this example.
I'm not aware of a QMP equivalent for "info usernet". It may be
necessary to implement a query-usernet command if you don't want to use
HMP.
> + self._tmpdir = tempfile.mkdtemp(prefix="qemu-vm-")
> + atexit.register(shutil.rmtree, self._tmpdir)
> +
> + self._ssh_key_file = os.path.join(self._tmpdir, "id_rsa")
> + open(self._ssh_key_file, "w").write(SSH_KEY)
> + subprocess.check_call(["chmod", "600", self._ssh_key_file])
> +
> + self._ssh_pub_key_file = os.path.join(self._tmpdir, "id_rsa.pub")
> + open(self._ssh_pub_key_file, "w").write(SSH_PUB_KEY)
> +
> + self.debug = debug
> + self._stderr = sys.stderr
> + self._devnull = open("/dev/null", "w")
> + if self.debug:
> + self._stdout = sys.stdout
> + else:
> + self._stdout = self._devnull
> + self._args = [ \
> + "-nodefaults", "-enable-kvm", "-m", "2G",
> + "-smp", os.environ.get("J", "4"), "-cpu", "host",
Can this be a command-line option in main() and a constructor argument
instead of an environment variable? That would be cleaner because the
use of "J" might be surprising to someone who happens to have it set in
their environment.
> + "-netdev", "user,id=vnet,hostfwd=:0.0.0.0:%d-:22" % self.ssh_port,
> + "-device", "virtio-net-pci,netdev=vnet",
> + "-vnc", ":0,to=20",
> + "-serial", "file:%s" % os.path.join(self._tmpdir, "serial.out")]
> +
> + self._data_args = []
> +
> + def _download_with_cache(self, url):
> + cache_dir = os.path.expanduser("~/.cache/qemu-vm/download")
> + subprocess.check_call(["mkdir", "-p", cache_dir])
os.makedirs()
> + fname = os.path.join(cache_dir, hashlib.sha1(url).hexdigest())
> + if os.path.exists(fname):
> + return fname
> + logging.debug("Downloading %s to %s...", url, fname)
> + subprocess.check_call(["wget", "-c", url, "-O", fname + ".download"],
> + stdout=self._stdout, stderr=self._stderr)
It might be important to support image file updates without manually
deleting ~/.cache. You can probably make wget send an HTTP
If-Modified-Since header or something similar. There are 3 cases:
1. Existing file is up-to-date. No download after HEAD request.
2. Existing file is outdated, download the newest version.
3. Failure or timeout, use the old version for now.
> + subprocess.check_call(["mv", fname + ".download", fname],
> + stdout=self._stdout, stderr=self._stderr)
os.rename()
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib
2017-08-16 8:55 ` Stefan Hajnoczi
@ 2017-08-16 11:49 ` Eric Blake
2017-08-16 21:03 ` Fam Zheng
1 sibling, 0 replies; 34+ messages in thread
From: Eric Blake @ 2017-08-16 11:49 UTC (permalink / raw)
To: Stefan Hajnoczi, Fam Zheng
Cc: Peter Maydell, qemu-devel, Philippe Mathieu-Daudé,
Kamil Rytarowski, stefanha, pbonzini, Alex Bennée
[-- Attachment #1: Type: text/plain, Size: 503 bytes --]
On 08/16/2017 03:55 AM, Stefan Hajnoczi wrote:
> I'm not aware of a QMP equivalent for "info usernet". It may be
> necessary to implement a query-usernet command if you don't want to use
> HMP.
It's possible to run any HMP command from within QMP, using
human-monitor-command. Parsing the resulting string is the same as you
would get with pure HMP, though.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib
2017-08-16 8:55 ` Stefan Hajnoczi
2017-08-16 11:49 ` Eric Blake
@ 2017-08-16 21:03 ` Fam Zheng
1 sibling, 0 replies; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 21:03 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, Peter Maydell, Philippe Mathieu-Daudé,
Kamil Rytarowski, stefanha, pbonzini, Alex Bennée
On Wed, 08/16 09:55, Stefan Hajnoczi wrote:
> On Wed, Aug 16, 2017 at 03:20:59PM +0800, Fam Zheng wrote:
> > +class BaseVM(object):
> > + GUEST_USER = "qemu"
> > + GUEST_PASS = "qemupass"
> > + ROOT_PASS = "qemupass"
> > +
> > + # The script to run in the guest that builds QEMU
> > + BUILD_SCRIPT = ""
> > + # The guest name, to be overridden by subclasses
> > + name = "#base"
> > + def __init__(self, debug=False):
> > + self._guest = None
> > + self.ssh_port = 20022
>
> Only one instance of this test can be run per machine due to the
> hardcoded SSH port number on the host.
>
> It is possible to use:
>
> -netdev user,id=vnet,hostfwd=:0.0.0.0:0-:22
>
> and then query the port number:
>
> (qemu) info usernet
> VLAN -1 (vnet):
> Protocol[State] FD Source Address Port Dest. Address Port RecvQ SendQ
> TCP[HOST_FORWARD] 15 * 36089 10.0.2.15 22 0 0
>
> The host port is 36089 in this example.
>
> I'm not aware of a QMP equivalent for "info usernet". It may be
> necessary to implement a query-usernet command if you don't want to use
> HMP.
Sounds good. Will try. Using HMP is good enough to start with, we can add
query-usernet on top.
>
> > + self._tmpdir = tempfile.mkdtemp(prefix="qemu-vm-")
> > + atexit.register(shutil.rmtree, self._tmpdir)
> > +
> > + self._ssh_key_file = os.path.join(self._tmpdir, "id_rsa")
> > + open(self._ssh_key_file, "w").write(SSH_KEY)
> > + subprocess.check_call(["chmod", "600", self._ssh_key_file])
> > +
> > + self._ssh_pub_key_file = os.path.join(self._tmpdir, "id_rsa.pub")
> > + open(self._ssh_pub_key_file, "w").write(SSH_PUB_KEY)
> > +
> > + self.debug = debug
> > + self._stderr = sys.stderr
> > + self._devnull = open("/dev/null", "w")
> > + if self.debug:
> > + self._stdout = sys.stdout
> > + else:
> > + self._stdout = self._devnull
> > + self._args = [ \
> > + "-nodefaults", "-enable-kvm", "-m", "2G",
> > + "-smp", os.environ.get("J", "4"), "-cpu", "host",
>
> Can this be a command-line option in main() and a constructor argument
> instead of an environment variable? That would be cleaner because the
> use of "J" might be surprising to someone who happens to have it set in
> their environment.
Yes, "J" should be handled in the Makefile.
>
> > + "-netdev", "user,id=vnet,hostfwd=:0.0.0.0:%d-:22" % self.ssh_port,
> > + "-device", "virtio-net-pci,netdev=vnet",
> > + "-vnc", ":0,to=20",
> > + "-serial", "file:%s" % os.path.join(self._tmpdir, "serial.out")]
> > +
> > + self._data_args = []
> > +
> > + def _download_with_cache(self, url):
> > + cache_dir = os.path.expanduser("~/.cache/qemu-vm/download")
> > + subprocess.check_call(["mkdir", "-p", cache_dir])
>
> os.makedirs()
OK.
>
> > + fname = os.path.join(cache_dir, hashlib.sha1(url).hexdigest())
> > + if os.path.exists(fname):
> > + return fname
> > + logging.debug("Downloading %s to %s...", url, fname)
> > + subprocess.check_call(["wget", "-c", url, "-O", fname + ".download"],
> > + stdout=self._stdout, stderr=self._stderr)
>
> It might be important to support image file updates without manually
> deleting ~/.cache. You can probably make wget send an HTTP
> If-Modified-Since header or something similar. There are 3 cases:
>
> 1. Existing file is up-to-date. No download after HEAD request.
> 2. Existing file is outdated, download the newest version.
> 3. Failure or timeout, use the old version for now.
Since the URLs are not https, maybe add sha256sum of images in the subclasses so
it is MITM-safe? It is also much simpler code, I think.
>
> > + subprocess.check_call(["mv", fname + ".download", fname],
> > + stdout=self._stdout, stderr=self._stderr)
>
> os.rename()
OK.
Fam
^ permalink raw reply [flat|nested] 34+ messages in thread
* [Qemu-devel] [PATCH RFC 5/9] tests: Add ubuntu.i386 image
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (3 preceding siblings ...)
2017-08-16 7:20 ` [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib Fam Zheng
@ 2017-08-16 7:21 ` Fam Zheng
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 6/9] tests: Add FreeBSD image Fam Zheng
` (6 subsequent siblings)
11 siblings, 0 replies; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:21 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
This adds a 32bit guest.
The official LTS cloud image is downloaded and initialized with
cloud-init.
Signed-off-by: Fam Zheng <famz@redhat.com>
---
tests/vm/ubuntu.i386 | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 88 insertions(+)
create mode 100755 tests/vm/ubuntu.i386
diff --git a/tests/vm/ubuntu.i386 b/tests/vm/ubuntu.i386
new file mode 100755
index 0000000000..b3a9b854ce
--- /dev/null
+++ b/tests/vm/ubuntu.i386
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# Ubuntu i386 image
+#
+# Copyright (C) 2017 Red Hat Inc.
+#
+# Authors:
+# Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+import os
+import sys
+import logging
+import subprocess
+import tempfile
+import time
+import basevm
+
+class UbuntuX86VM(basevm.BaseVM):
+ name = "ubuntu.i386"
+ BUILD_SCRIPT = """
+ set -e;
+ cd $(mktemp -d);
+ sudo chmod a+r /dev/vdb;
+ tar -xf /dev/vdb;
+ ./configure {configure_opts};
+ make -j{jobs};
+ make check;
+ """
+
+ def _gen_cloud_init_iso(self):
+ cidir = self._tmpdir
+ mdata = open(os.path.join(cidir, "meta-data"), "w")
+ mdata.writelines(["instance-id: ubuntu-vm-0\n",
+ "local-hostname: ubuntu-guest\n"])
+ mdata.close()
+ udata = open(os.path.join(cidir, "user-data"), "w")
+ udata.writelines(["#cloud-config\n",
+ "chpasswd:\n",
+ " list: |\n",
+ " root:%s\n" % self.ROOT_PASS,
+ " %s:%s\n" % (self.GUEST_USER, self.GUEST_PASS),
+ " expire: False\n",
+ "users:\n",
+ " - name: %s\n" % self.GUEST_USER,
+ " sudo: ALL=(ALL) NOPASSWD:ALL\n",
+ " ssh-authorized-keys:\n",
+ " - %s\n" % basevm.SSH_PUB_KEY,
+ " - name: root\n",
+ " ssh-authorized-keys:\n",
+ " - %s\n" % basevm.SSH_PUB_KEY])
+ udata.close()
+ subprocess.check_call(["genisoimage", "-output", "cloud-init.iso",
+ "-volid", "cidata", "-joliet", "-rock",
+ "user-data", "meta-data"],
+ cwd=cidir,
+ stdin=self._devnull, stdout=self._stdout,
+ stderr=self._stdout)
+ return os.path.join(cidir, "cloud-init.iso")
+
+ def build_image(self, img):
+ cimg = self._download_with_cache("https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-i386-disk1.img")
+ img_tmp = img + ".tmp"
+ subprocess.check_call(["cp", "-f", cimg, img_tmp])
+ subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
+ self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
+ self.wait_ssh()
+ self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")
+ self.ssh_root_check("apt-get update")
+ self.ssh_root_check("apt-get install -y cloud-initramfs-growroot")
+ # Don't check the status in case the guest hang up too quickly
+ self.ssh_root("sync && reboot")
+ time.sleep(5)
+ self.wait_ssh()
+ # The previous update sometimes doesn't survive a reboot, so do it again
+ self.ssh_root_check("apt-get update")
+ self.ssh_root_check("apt-get build-dep -y qemu")
+ self.ssh_root_check("apt-get install -y libfdt-dev")
+ self.ssh_root("poweroff")
+ self.wait()
+ subprocess.check_call(["mv", img_tmp, img])
+ return 0
+
+if __name__ == "__main__":
+ sys.exit(basevm.main(UbuntuX86VM))
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [Qemu-devel] [PATCH RFC 6/9] tests: Add FreeBSD image
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (4 preceding siblings ...)
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 5/9] tests: Add ubuntu.i386 image Fam Zheng
@ 2017-08-16 7:21 ` Fam Zheng
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 7/9] tests: Add NetBSD image Fam Zheng
` (5 subsequent siblings)
11 siblings, 0 replies; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:21 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
The image is prepared following instructions as in:
https://wiki.qemu.org/Hosts/BSD
Signed-off-by: Fam Zheng <famz@redhat.com>
---
tests/vm/freebsd | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
create mode 100755 tests/vm/freebsd
diff --git a/tests/vm/freebsd b/tests/vm/freebsd
new file mode 100755
index 0000000000..fb23164676
--- /dev/null
+++ b/tests/vm/freebsd
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+#
+# FreeBSD VM image
+#
+# Copyright (C) 2017 Red Hat Inc.
+#
+# Authors:
+# Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+import os
+import sys
+import logging
+import subprocess
+import tempfile
+import time
+import basevm
+
+class FreeBSDVM(basevm.BaseVM):
+ name = "freebsd"
+ BUILD_SCRIPT = """
+ set -e;
+ cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
+ tar -xf /dev/vtbd1;
+ ./configure {configure_opts};
+ gmake -j{jobs};
+ gmake check;
+ """
+
+ def build_image(self, img, rebuild=False):
+ if os.path.exists(img) and not rebuild:
+ return
+ cimg = self._download_with_cache("http://download.patchew.org/freebsd.img.xz")
+ img_tmp_xz = img + ".tmp.xz"
+ img_tmp = img + ".tmp"
+ subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
+ subprocess.check_call(["xz", "-df", img_tmp_xz])
+ subprocess.check_call(["mv", img_tmp, img])
+
+if __name__ == "__main__":
+ sys.exit(basevm.main(FreeBSDVM))
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [Qemu-devel] [PATCH RFC 7/9] tests: Add NetBSD image
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (5 preceding siblings ...)
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 6/9] tests: Add FreeBSD image Fam Zheng
@ 2017-08-16 7:21 ` Fam Zheng
2017-08-16 9:31 ` Kamil Rytarowski
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image Fam Zheng
` (4 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:21 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
The image is prepared following instructions as in:
https://wiki.qemu.org/Hosts/BSD
Signed-off-by: Fam Zheng <famz@redhat.com>
---
tests/vm/netbsd | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
create mode 100755 tests/vm/netbsd
diff --git a/tests/vm/netbsd b/tests/vm/netbsd
new file mode 100755
index 0000000000..4cd07d3b1b
--- /dev/null
+++ b/tests/vm/netbsd
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+#
+# NetBSD VM image
+#
+# Copyright (C) 2017 Red Hat Inc.
+#
+# Authors:
+# Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+import os
+import sys
+import logging
+import subprocess
+import tempfile
+import time
+import basevm
+
+class NetBSDVM(basevm.BaseVM):
+ name = "netbsd"
+ BUILD_SCRIPT = """
+ set -e;
+ cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
+ tar -xf /dev/ld1a;
+ ./configure --python=python2.7 {configure_opts};
+ gmake -j{jobs};
+ gmake check;
+ """
+
+ def build_image(self, img, rebuild=False):
+ if os.path.exists(img) and not rebuild:
+ return
+ cimg = self._download_with_cache("http://localhost:8000/netbsd.img.xz")
+ img_tmp_xz = img + ".tmp.xz"
+ img_tmp = img + ".tmp"
+ subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
+ subprocess.check_call(["xz", "-df", img_tmp_xz])
+ subprocess.check_call(["mv", img_tmp, img])
+
+if __name__ == "__main__":
+ sys.exit(basevm.main(NetBSDVM))
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 7/9] tests: Add NetBSD image
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 7/9] tests: Add NetBSD image Fam Zheng
@ 2017-08-16 9:31 ` Kamil Rytarowski
2017-08-16 10:08 ` Fam Zheng
0 siblings, 1 reply; 34+ messages in thread
From: Kamil Rytarowski @ 2017-08-16 9:31 UTC (permalink / raw)
To: Fam Zheng, qemu-devel
Cc: Peter Maydell, Philippe Mathieu-Daudé, Kamil Rytarowski,
stefanha, pbonzini, Alex Bennée
[-- Attachment #1: Type: text/plain, Size: 1858 bytes --]
On 16.08.2017 09:21, Fam Zheng wrote:
> The image is prepared following instructions as in:
>
> https://wiki.qemu.org/Hosts/BSD
>
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
> tests/vm/netbsd | 44 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
> create mode 100755 tests/vm/netbsd
>
> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> new file mode 100755
> index 0000000000..4cd07d3b1b
> --- /dev/null
> +++ b/tests/vm/netbsd
> @@ -0,0 +1,44 @@
> +#!/usr/bin/env python
> +#
> +# NetBSD VM image
> +#
> +# Copyright (C) 2017 Red Hat Inc.
> +#
> +# Authors:
> +# Fam Zheng <famz@redhat.com>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2. See
> +# the COPYING file in the top-level directory.
> +#
> +
> +import os
> +import sys
> +import logging
> +import subprocess
> +import tempfile
> +import time
> +import basevm
> +
> +class NetBSDVM(basevm.BaseVM):
> + name = "netbsd"
> + BUILD_SCRIPT = """
> + set -e;
> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
> + tar -xf /dev/ld1a;
> + ./configure --python=python2.7 {configure_opts};
> + gmake -j{jobs};
> + gmake check;
> + """
> +
> + def build_image(self, img, rebuild=False):
> + if os.path.exists(img) and not rebuild:
> + return
> + cimg = self._download_with_cache("http://localhost:8000/netbsd.img.xz")
http://download.patchew.org/netbsd.img.xz
> + img_tmp_xz = img + ".tmp.xz"
> + img_tmp = img + ".tmp"
> + subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
> + subprocess.check_call(["xz", "-df", img_tmp_xz])
> + subprocess.check_call(["mv", img_tmp, img])
> +
> +if __name__ == "__main__":
> + sys.exit(basevm.main(NetBSDVM))
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 7/9] tests: Add NetBSD image
2017-08-16 9:31 ` Kamil Rytarowski
@ 2017-08-16 10:08 ` Fam Zheng
0 siblings, 0 replies; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 10:08 UTC (permalink / raw)
To: Kamil Rytarowski
Cc: qemu-devel, Peter Maydell, Philippe Mathieu-Daudé,
Kamil Rytarowski, stefanha, pbonzini, Alex Bennée
On Wed, 08/16 11:31, Kamil Rytarowski wrote:
> On 16.08.2017 09:21, Fam Zheng wrote:
> > The image is prepared following instructions as in:
> >
> > https://wiki.qemu.org/Hosts/BSD
> >
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> > tests/vm/netbsd | 44 ++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 44 insertions(+)
> > create mode 100755 tests/vm/netbsd
> >
> > diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> > new file mode 100755
> > index 0000000000..4cd07d3b1b
> > --- /dev/null
> > +++ b/tests/vm/netbsd
> > @@ -0,0 +1,44 @@
> > +#!/usr/bin/env python
> > +#
> > +# NetBSD VM image
> > +#
> > +# Copyright (C) 2017 Red Hat Inc.
> > +#
> > +# Authors:
> > +# Fam Zheng <famz@redhat.com>
> > +#
> > +# This work is licensed under the terms of the GNU GPL, version 2. See
> > +# the COPYING file in the top-level directory.
> > +#
> > +
> > +import os
> > +import sys
> > +import logging
> > +import subprocess
> > +import tempfile
> > +import time
> > +import basevm
> > +
> > +class NetBSDVM(basevm.BaseVM):
> > + name = "netbsd"
> > + BUILD_SCRIPT = """
> > + set -e;
> > + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
> > + tar -xf /dev/ld1a;
> > + ./configure --python=python2.7 {configure_opts};
> > + gmake -j{jobs};
> > + gmake check;
> > + """
> > +
> > + def build_image(self, img, rebuild=False):
> > + if os.path.exists(img) and not rebuild:
> > + return
> > + cimg = self._download_with_cache("http://localhost:8000/netbsd.img.xz")
>
> http://download.patchew.org/netbsd.img.xz
Yes, weird this is left over. Will fix.
Fam
^ permalink raw reply [flat|nested] 34+ messages in thread
* [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (6 preceding siblings ...)
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 7/9] tests: Add NetBSD image Fam Zheng
@ 2017-08-16 7:21 ` Fam Zheng
2019-01-24 15:52 ` Philippe Mathieu-Daudé
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 9/9] Makefile: Add rules to run vm tests Fam Zheng
` (3 subsequent siblings)
11 siblings, 1 reply; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:21 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
The image is prepared following instructions as in:
https://wiki.qemu.org/Hosts/BSD
Signed-off-by: Fam Zheng <famz@redhat.com>
---
tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
create mode 100755 tests/vm/openbsd
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
new file mode 100755
index 0000000000..d37ff83a59
--- /dev/null
+++ b/tests/vm/openbsd
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+#
+# OpenBSD VM image
+#
+# Copyright (C) 2017 Red Hat Inc.
+#
+# Authors:
+# Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+import os
+import sys
+import logging
+import subprocess
+import tempfile
+import time
+import basevm
+
+class OpenBSDVM(basevm.BaseVM):
+ name = "openbsd"
+ BUILD_SCRIPT = """
+ set -e;
+ cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
+ tar -xf /dev/rsd1c;
+ ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4 --python=python2.7 {configure_opts};
+ gmake -j{jobs};
+ # XXX: "gmake check" seems to always hang or fail
+ #gmake check;
+ """
+
+ def build_image(self, img, rebuild=False):
+ if os.path.exists(img) and not rebuild:
+ return
+ cimg = self._download_with_cache("http://download.patchew.org/openbsd.img.xz")
+ img_tmp_xz = img + ".tmp.xz"
+ img_tmp = img + ".tmp"
+ subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
+ subprocess.check_call(["xz", "-df", img_tmp_xz])
+ subprocess.check_call(["mv", img_tmp, img])
+
+if __name__ == "__main__":
+ sys.exit(basevm.main(OpenBSDVM))
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image Fam Zheng
@ 2019-01-24 15:52 ` Philippe Mathieu-Daudé
2019-01-24 15:56 ` Kamil Rytarowski
2019-01-24 16:27 ` Peter Maydell
0 siblings, 2 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-01-24 15:52 UTC (permalink / raw)
To: Fam Zheng, qemu-devel, Alex Bennée, Brad Smith,
Peter Maydell
Cc: berrange, stefanha, pbonzini, Kamil Rytarowski
On 8/16/17 9:21 AM, Fam Zheng wrote:
> The image is prepared following instructions as in:
>
> https://wiki.qemu.org/Hosts/BSD
>
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
> tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 45 insertions(+)
> create mode 100755 tests/vm/openbsd
>
> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
> new file mode 100755
> index 0000000000..d37ff83a59
> --- /dev/null
> +++ b/tests/vm/openbsd
> @@ -0,0 +1,45 @@
> +#!/usr/bin/env python
> +#
> +# OpenBSD VM image
> +#
> +# Copyright (C) 2017 Red Hat Inc.
> +#
> +# Authors:
> +# Fam Zheng <famz@redhat.com>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2. See
> +# the COPYING file in the top-level directory.
> +#
> +
> +import os
> +import sys
> +import logging
> +import subprocess
> +import tempfile
> +import time
> +import basevm
> +
> +class OpenBSDVM(basevm.BaseVM):
> + name = "openbsd"
> + BUILD_SCRIPT = """
> + set -e;
> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
> + tar -xf /dev/rsd1c;
> + ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4 --python=python2.7 {configure_opts};
> + gmake -j{jobs};
> + # XXX: "gmake check" seems to always hang or fail
> + #gmake check;
OK, Now it makes more sense...
After spending various hours trying to fix various issues on OpenBSD, I
notice that we never ran tests on this OS.
The only binary I can run is qemu-img, the rest seems useless.
I'll summarize in a different thread.
> + """
> +
> + def build_image(self, img, rebuild=False):
> + if os.path.exists(img) and not rebuild:
> + return
> + cimg = self._download_with_cache("http://download.patchew.org/openbsd.img.xz")
> + img_tmp_xz = img + ".tmp.xz"
> + img_tmp = img + ".tmp"
> + subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
> + subprocess.check_call(["xz", "-df", img_tmp_xz])
> + subprocess.check_call(["mv", img_tmp, img])
> +
> +if __name__ == "__main__":
> + sys.exit(basevm.main(OpenBSDVM))
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-24 15:52 ` Philippe Mathieu-Daudé
@ 2019-01-24 15:56 ` Kamil Rytarowski
2019-01-24 16:10 ` Philippe Mathieu-Daudé
2019-01-24 16:27 ` Peter Maydell
1 sibling, 1 reply; 34+ messages in thread
From: Kamil Rytarowski @ 2019-01-24 15:56 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, Fam Zheng, qemu-devel,
Alex Bennée, Brad Smith, Peter Maydell
Cc: pbonzini, Kamil Rytarowski, stefanha
[-- Attachment #1: Type: text/plain, Size: 2349 bytes --]
On 24.01.2019 16:52, Philippe Mathieu-Daudé wrote:
> On 8/16/17 9:21 AM, Fam Zheng wrote:
>> The image is prepared following instructions as in:
>>
>> https://wiki.qemu.org/Hosts/BSD
>>
>> Signed-off-by: Fam Zheng <famz@redhat.com>
>> ---
>> tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 45 insertions(+)
>> create mode 100755 tests/vm/openbsd
>>
>> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
>> new file mode 100755
>> index 0000000000..d37ff83a59
>> --- /dev/null
>> +++ b/tests/vm/openbsd
>> @@ -0,0 +1,45 @@
>> +#!/usr/bin/env python
>> +#
>> +# OpenBSD VM image
>> +#
>> +# Copyright (C) 2017 Red Hat Inc.
>> +#
>> +# Authors:
>> +# Fam Zheng <famz@redhat.com>
>> +#
>> +# This work is licensed under the terms of the GNU GPL, version 2. See
>> +# the COPYING file in the top-level directory.
>> +#
>> +
>> +import os
>> +import sys
>> +import logging
>> +import subprocess
>> +import tempfile
>> +import time
>> +import basevm
>> +
>> +class OpenBSDVM(basevm.BaseVM):
>> + name = "openbsd"
>> + BUILD_SCRIPT = """
>> + set -e;
>> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
>> + tar -xf /dev/rsd1c;
>> + ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4 --python=python2.7 {configure_opts};
>> + gmake -j{jobs};
>> + # XXX: "gmake check" seems to always hang or fail
>> + #gmake check;
>
> OK, Now it makes more sense...
>
> After spending various hours trying to fix various issues on OpenBSD, I
> notice that we never ran tests on this OS.
> The only binary I can run is qemu-img, the rest seems useless.
> I'll summarize in a different thread.
>
Is this W^X related?
>> + """
>> +
>> + def build_image(self, img, rebuild=False):
>> + if os.path.exists(img) and not rebuild:
>> + return
>> + cimg = self._download_with_cache("http://download.patchew.org/openbsd.img.xz")
>> + img_tmp_xz = img + ".tmp.xz"
>> + img_tmp = img + ".tmp"
>> + subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
>> + subprocess.check_call(["xz", "-df", img_tmp_xz])
>> + subprocess.check_call(["mv", img_tmp, img])
>> +
>> +if __name__ == "__main__":
>> + sys.exit(basevm.main(OpenBSDVM))
>>
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 850 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-24 15:56 ` Kamil Rytarowski
@ 2019-01-24 16:10 ` Philippe Mathieu-Daudé
2019-01-24 16:52 ` Daniel P. Berrangé
0 siblings, 1 reply; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-01-24 16:10 UTC (permalink / raw)
To: Kamil Rytarowski, Fam Zheng, qemu-devel, Alex Bennée,
Brad Smith, Peter Maydell
Cc: pbonzini, Kamil Rytarowski, stefanha
[-- Attachment #1: Type: text/plain, Size: 4747 bytes --]
On 1/24/19 4:56 PM, Kamil Rytarowski wrote:
> On 24.01.2019 16:52, Philippe Mathieu-Daudé wrote:
>> On 8/16/17 9:21 AM, Fam Zheng wrote:
>>> The image is prepared following instructions as in:
>>>
>>> https://wiki.qemu.org/Hosts/BSD
>>>
>>> Signed-off-by: Fam Zheng <famz@redhat.com>
>>> ---
>>> tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 45 insertions(+)
>>> create mode 100755 tests/vm/openbsd
>>>
>>> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
>>> new file mode 100755
>>> index 0000000000..d37ff83a59
>>> --- /dev/null
>>> +++ b/tests/vm/openbsd
>>> @@ -0,0 +1,45 @@
>>> +#!/usr/bin/env python
>>> +#
>>> +# OpenBSD VM image
>>> +#
>>> +# Copyright (C) 2017 Red Hat Inc.
>>> +#
>>> +# Authors:
>>> +# Fam Zheng <famz@redhat.com>
>>> +#
>>> +# This work is licensed under the terms of the GNU GPL, version 2. See
>>> +# the COPYING file in the top-level directory.
>>> +#
>>> +
>>> +import os
>>> +import sys
>>> +import logging
>>> +import subprocess
>>> +import tempfile
>>> +import time
>>> +import basevm
>>> +
>>> +class OpenBSDVM(basevm.BaseVM):
>>> + name = "openbsd"
>>> + BUILD_SCRIPT = """
>>> + set -e;
>>> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
>>> + tar -xf /dev/rsd1c;
>>> + ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4 --python=python2.7 {configure_opts};
>>> + gmake -j{jobs};
>>> + # XXX: "gmake check" seems to always hang or fail
>>> + #gmake check;
>>
>> OK, Now it makes more sense...
>>
>> After spending various hours trying to fix various issues on OpenBSD, I
>> notice that we never ran tests on this OS.
>> The only binary I can run is qemu-img, the rest seems useless.
>> I'll summarize in a different thread.
>>
>
> Is this W^X related?
Part of it could be but I'm not sure.
The 6.1 VM provided by Fam has /usr/local mounted with wxallowed, I
tried building/running there and nothing changed, mmap() still returns
ENOTSUP:
(gdb) bt
#0 0x000017e3c156c50a in _thread_sys___syscall () at {standard input}:5
#1 0x000017e3c15e5d7a in *_libc_mmap (addr=Variable "addr" is not
available.
) at /usr/local/lib/libc/sys/mmap.c:47
#2 0x000017e17d9abc8b in alloc_code_gen_buffer () at
/usr/local/qemu/accel/tcg/translate-all.c:1064
#3 0x000017e17d9abd04 in code_gen_alloc (tb_size=0) at
/usr/local/qemu/accel/tcg/translate-all.c:1112
#4 0x000017e17d9abe81 in tcg_exec_init (tb_size=0) at
/usr/local/qemu/accel/tcg/translate-all.c:1149
#5 0x000017e17d9897e9 in tcg_init (ms=0x17e45e456800) at
/usr/local/qemu/accel/tcg/tcg-all.c:66
#6 0x000017e17d9891b8 in accel_init_machine (acc=0x17e3c3f50800,
ms=0x17e45e456800) at /usr/local/qemu/accel/accel.c:63
#7 0x000017e17d989312 in configure_accelerator (ms=0x17e45e456800,
progname=0x7f7fffff07b0 "lm32-softmmu/qemu-system-lm32") at
/usr/local/qemu/accel/accel.c:111
#8 0x000017e17d9d8616 in main (argc=1, argv=0x7f7fffff06b8,
envp=0x7f7fffff06c8) at vl.c:4325
Since the current script build into /var/tmp (which is symlinked to
/tmp) I also mounted /tmp wxallowed using the following patch:
-- >8 --
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -39,6 +39,12 @@ class OpenBSDVM(basevm.BaseVM):
if os.path.exists(img):
os.rename(img_tmp, img)
+ self.boot(img)
+ self.wait_ssh()
+ self.ssh_root_check("sed -E -i 's_(/tmp\ ffs)\ ([^\ ]*)_\\1
\\2,wxallowed_' /etc/fstab")
+ self.ssh_root_check("cat /etc/fstab")
+ self.ssh_root("halt -p")
+ self.wait()
---
$ mount
/dev/sd0a on / type ffs (local)
/dev/sd0k on /home type ffs (local, nodev, nosuid)
/dev/sd0d on /tmp type ffs (local, nodev, nosuid, wxallowed)
/dev/sd0f on /usr type ffs (local, nodev)
/dev/sd0g on /usr/X11R6 type ffs (local, nodev)
/dev/sd0h on /usr/local type ffs (local, nodev, wxallowed)
/dev/sd0j on /usr/obj type ffs (local, nodev, nosuid)
/dev/sd0i on /usr/src type ffs (local, nodev, nosuid)
/dev/sd0e on /var type ffs (local, nodev, nosuid)
Still no progress.
>
>>> + """
>>> +
>>> + def build_image(self, img, rebuild=False):
>>> + if os.path.exists(img) and not rebuild:
>>> + return
>>> + cimg = self._download_with_cache("http://download.patchew.org/openbsd.img.xz")
>>> + img_tmp_xz = img + ".tmp.xz"
>>> + img_tmp = img + ".tmp"
>>> + subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
>>> + subprocess.check_call(["xz", "-df", img_tmp_xz])
>>> + subprocess.check_call(["mv", img_tmp, img])
>>> +
>>> +if __name__ == "__main__":
>>> + sys.exit(basevm.main(OpenBSDVM))
>>>
>>
>
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-24 16:10 ` Philippe Mathieu-Daudé
@ 2019-01-24 16:52 ` Daniel P. Berrangé
2019-01-25 0:48 ` Brad Smith
0 siblings, 1 reply; 34+ messages in thread
From: Daniel P. Berrangé @ 2019-01-24 16:52 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Kamil Rytarowski, Fam Zheng, qemu-devel, Alex Bennée,
Brad Smith, Peter Maydell, pbonzini, Kamil Rytarowski, stefanha
On Thu, Jan 24, 2019 at 05:10:19PM +0100, Philippe Mathieu-Daudé wrote:
> On 1/24/19 4:56 PM, Kamil Rytarowski wrote:
> > On 24.01.2019 16:52, Philippe Mathieu-Daudé wrote:
> >> On 8/16/17 9:21 AM, Fam Zheng wrote:
> >>> The image is prepared following instructions as in:
> >>>
> >>> https://wiki.qemu.org/Hosts/BSD
> >>>
> >>> Signed-off-by: Fam Zheng <famz@redhat.com>
> >>> ---
> >>> tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
> >>> 1 file changed, 45 insertions(+)
> >>> create mode 100755 tests/vm/openbsd
> >>>
> >>> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
> >>> new file mode 100755
> >>> index 0000000000..d37ff83a59
> >>> --- /dev/null
> >>> +++ b/tests/vm/openbsd
> >>> @@ -0,0 +1,45 @@
> >>> +#!/usr/bin/env python
> >>> +#
> >>> +# OpenBSD VM image
> >>> +#
> >>> +# Copyright (C) 2017 Red Hat Inc.
> >>> +#
> >>> +# Authors:
> >>> +# Fam Zheng <famz@redhat.com>
> >>> +#
> >>> +# This work is licensed under the terms of the GNU GPL, version 2. See
> >>> +# the COPYING file in the top-level directory.
> >>> +#
> >>> +
> >>> +import os
> >>> +import sys
> >>> +import logging
> >>> +import subprocess
> >>> +import tempfile
> >>> +import time
> >>> +import basevm
> >>> +
> >>> +class OpenBSDVM(basevm.BaseVM):
> >>> + name = "openbsd"
> >>> + BUILD_SCRIPT = """
> >>> + set -e;
> >>> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
> >>> + tar -xf /dev/rsd1c;
> >>> + ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4 --python=python2.7 {configure_opts};
> >>> + gmake -j{jobs};
> >>> + # XXX: "gmake check" seems to always hang or fail
> >>> + #gmake check;
> >>
> >> OK, Now it makes more sense...
> >>
> >> After spending various hours trying to fix various issues on OpenBSD, I
> >> notice that we never ran tests on this OS.
> >> The only binary I can run is qemu-img, the rest seems useless.
> >> I'll summarize in a different thread.
> >>
> >
> > Is this W^X related?
>
> Part of it could be but I'm not sure.
>
> The 6.1 VM provided by Fam has /usr/local mounted with wxallowed, I
> tried building/running there and nothing changed, mmap() still returns
> ENOTSUP:
ENOTSUP from mmap is certainly what you'd expect from the W^X scenario
https://undeadly.org/cgi?action=article&sid=20160527203200
"W^X violations are no longer permitted by default. A kernel log message
is generated, and mprotect/mmap return ENOTSUP. If the sysctl(8) flag
kern.wxabort is set then a SIGABRT occurs instead, for gdb use or coredump
creation."
> Since the current script build into /var/tmp (which is symlinked to
> /tmp) I also mounted /tmp wxallowed using the following patch:
>
> -- >8 --
> --- a/tests/vm/openbsd
> +++ b/tests/vm/openbsd
> @@ -39,6 +39,12 @@ class OpenBSDVM(basevm.BaseVM):
> if os.path.exists(img):
> os.rename(img_tmp, img)
> + self.boot(img)
> + self.wait_ssh()
> + self.ssh_root_check("sed -E -i 's_(/tmp\ ffs)\ ([^\ ]*)_\\1
> \\2,wxallowed_' /etc/fstab")
> + self.ssh_root_check("cat /etc/fstab")
> + self.ssh_root("halt -p")
> + self.wait()
> ---
>
> $ mount
> /dev/sd0a on / type ffs (local)
> /dev/sd0k on /home type ffs (local, nodev, nosuid)
> /dev/sd0d on /tmp type ffs (local, nodev, nosuid, wxallowed)
> /dev/sd0f on /usr type ffs (local, nodev)
> /dev/sd0g on /usr/X11R6 type ffs (local, nodev)
> /dev/sd0h on /usr/local type ffs (local, nodev, wxallowed)
> /dev/sd0j on /usr/obj type ffs (local, nodev, nosuid)
> /dev/sd0i on /usr/src type ffs (local, nodev, nosuid)
> /dev/sd0e on /var type ffs (local, nodev, nosuid)
>
> Still no progress.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-24 16:52 ` Daniel P. Berrangé
@ 2019-01-25 0:48 ` Brad Smith
2019-01-25 6:24 ` Thomas Huth
2019-01-25 18:15 ` Philippe Mathieu-Daudé
0 siblings, 2 replies; 34+ messages in thread
From: Brad Smith @ 2019-01-25 0:48 UTC (permalink / raw)
To: Daniel P. Berrangé, Philippe Mathieu-Daudé
Cc: Kamil Rytarowski, Fam Zheng, qemu-devel, Alex Bennée,
Peter Maydell, pbonzini, Kamil Rytarowski, stefanha
On 1/24/2019 11:52 AM, Daniel P. Berrangé wrote:
> On Thu, Jan 24, 2019 at 05:10:19PM +0100, Philippe Mathieu-Daudé wrote:
>> On 1/24/19 4:56 PM, Kamil Rytarowski wrote:
>>> On 24.01.2019 16:52, Philippe Mathieu-Daudé wrote:
>>>> On 8/16/17 9:21 AM, Fam Zheng wrote:
>>>>> The image is prepared following instructions as in:
>>>>>
>>>>> https://wiki.qemu.org/Hosts/BSD
>>>>>
>>>>> Signed-off-by: Fam Zheng <famz@redhat.com>
>>>>> ---
>>>>> tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
>>>>> 1 file changed, 45 insertions(+)
>>>>> create mode 100755 tests/vm/openbsd
>>>>>
>>>>> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
>>>>> new file mode 100755
>>>>> index 0000000000..d37ff83a59
>>>>> --- /dev/null
>>>>> +++ b/tests/vm/openbsd
>>>>> @@ -0,0 +1,45 @@
>>>>> +#!/usr/bin/env python
>>>>> +#
>>>>> +# OpenBSD VM image
>>>>> +#
>>>>> +# Copyright (C) 2017 Red Hat Inc.
>>>>> +#
>>>>> +# Authors:
>>>>> +# Fam Zheng <famz@redhat.com>
>>>>> +#
>>>>> +# This work is licensed under the terms of the GNU GPL, version 2. See
>>>>> +# the COPYING file in the top-level directory.
>>>>> +#
>>>>> +
>>>>> +import os
>>>>> +import sys
>>>>> +import logging
>>>>> +import subprocess
>>>>> +import tempfile
>>>>> +import time
>>>>> +import basevm
>>>>> +
>>>>> +class OpenBSDVM(basevm.BaseVM):
>>>>> + name = "openbsd"
>>>>> + BUILD_SCRIPT = """
>>>>> + set -e;
>>>>> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
>>>>> + tar -xf /dev/rsd1c;
>>>>> + ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4 --python=python2.7 {configure_opts};
>>>>> + gmake -j{jobs};
>>>>> + # XXX: "gmake check" seems to always hang or fail
>>>>> + #gmake check;
>>>> OK, Now it makes more sense...
>>>>
>>>> After spending various hours trying to fix various issues on OpenBSD, I
>>>> notice that we never ran tests on this OS.
>>>> The only binary I can run is qemu-img, the rest seems useless.
>>>> I'll summarize in a different thread.
>>>>
>>> Is this W^X related?
>> Part of it could be but I'm not sure.
>>
>> The 6.1 VM provided by Fam has /usr/local mounted with wxallowed, I
>> tried building/running there and nothing changed, mmap() still returns
>> ENOTSUP:
> ENOTSUP from mmap is certainly what you'd expect from the W^X scenario
>
> https://undeadly.org/cgi?action=article&sid=20160527203200
>
> "W^X violations are no longer permitted by default. A kernel log message
> is generated, and mprotect/mmap return ENOTSUP. If the sysctl(8) flag
> kern.wxabort is set then a SIGABRT occurs instead, for gdb use or coredump
> creation."
Yes, this policy change was introduced with 6.0.
Our ports tree has an option which results in the QEMU binaries being
linked with "-z wxneeded".
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-25 0:48 ` Brad Smith
@ 2019-01-25 6:24 ` Thomas Huth
2019-01-25 18:27 ` Brad Smith
2019-01-25 18:15 ` Philippe Mathieu-Daudé
1 sibling, 1 reply; 34+ messages in thread
From: Thomas Huth @ 2019-01-25 6:24 UTC (permalink / raw)
To: Brad Smith, Daniel P. Berrangé, Philippe Mathieu-Daudé
Cc: Fam Zheng, Peter Maydell, qemu-devel, Kamil Rytarowski, stefanha,
pbonzini, Kamil Rytarowski, Alex Bennée
On 2019-01-25 01:48, Brad Smith wrote:
> On 1/24/2019 11:52 AM, Daniel P. Berrangé wrote:
>
>> On Thu, Jan 24, 2019 at 05:10:19PM +0100, Philippe Mathieu-Daudé wrote:
>>> On 1/24/19 4:56 PM, Kamil Rytarowski wrote:
>>>> On 24.01.2019 16:52, Philippe Mathieu-Daudé wrote:
>>>>> On 8/16/17 9:21 AM, Fam Zheng wrote:
>>>>>> The image is prepared following instructions as in:
>>>>>>
>>>>>> https://wiki.qemu.org/Hosts/BSD
>>>>>>
>>>>>> Signed-off-by: Fam Zheng <famz@redhat.com>
>>>>>> ---
>>>>>> tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
>>>>>> 1 file changed, 45 insertions(+)
>>>>>> create mode 100755 tests/vm/openbsd
>>>>>>
>>>>>> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
>>>>>> new file mode 100755
>>>>>> index 0000000000..d37ff83a59
>>>>>> --- /dev/null
>>>>>> +++ b/tests/vm/openbsd
>>>>>> @@ -0,0 +1,45 @@
>>>>>> +#!/usr/bin/env python
>>>>>> +#
>>>>>> +# OpenBSD VM image
>>>>>> +#
>>>>>> +# Copyright (C) 2017 Red Hat Inc.
>>>>>> +#
>>>>>> +# Authors:
>>>>>> +# Fam Zheng <famz@redhat.com>
>>>>>> +#
>>>>>> +# This work is licensed under the terms of the GNU GPL, version
>>>>>> 2. See
>>>>>> +# the COPYING file in the top-level directory.
>>>>>> +#
>>>>>> +
>>>>>> +import os
>>>>>> +import sys
>>>>>> +import logging
>>>>>> +import subprocess
>>>>>> +import tempfile
>>>>>> +import time
>>>>>> +import basevm
>>>>>> +
>>>>>> +class OpenBSDVM(basevm.BaseVM):
>>>>>> + name = "openbsd"
>>>>>> + BUILD_SCRIPT = """
>>>>>> + set -e;
>>>>>> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
>>>>>> + tar -xf /dev/rsd1c;
>>>>>> + ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4
>>>>>> --python=python2.7 {configure_opts};
>>>>>> + gmake -j{jobs};
>>>>>> + # XXX: "gmake check" seems to always hang or fail
>>>>>> + #gmake check;
>>>>> OK, Now it makes more sense...
>>>>>
>>>>> After spending various hours trying to fix various issues on
>>>>> OpenBSD, I
>>>>> notice that we never ran tests on this OS.
>>>>> The only binary I can run is qemu-img, the rest seems useless.
>>>>> I'll summarize in a different thread.
>>>>>
>>>> Is this W^X related?
>>> Part of it could be but I'm not sure.
>>>
>>> The 6.1 VM provided by Fam has /usr/local mounted with wxallowed, I
>>> tried building/running there and nothing changed, mmap() still returns
>>> ENOTSUP:
>> ENOTSUP from mmap is certainly what you'd expect from the W^X scenario
>>
>> https://undeadly.org/cgi?action=article&sid=20160527203200
>>
>> "W^X violations are no longer permitted by default. A kernel log
>> message
>> is generated, and mprotect/mmap return ENOTSUP. If the sysctl(8) flag
>> kern.wxabort is set then a SIGABRT occurs instead, for gdb use or
>> coredump
>> creation."
>
> Yes, this policy change was introduced with 6.0.
>
> Our ports tree has an option which results in the QEMU binaries being
> linked with "-z wxneeded".
Then it's maybe high time to send such changes upstream now ;-)
Thomas
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-25 6:24 ` Thomas Huth
@ 2019-01-25 18:27 ` Brad Smith
2019-01-25 18:38 ` Peter Maydell
0 siblings, 1 reply; 34+ messages in thread
From: Brad Smith @ 2019-01-25 18:27 UTC (permalink / raw)
To: Thomas Huth, Daniel P. Berrangé, Philippe Mathieu-Daudé
Cc: Fam Zheng, Peter Maydell, qemu-devel, Kamil Rytarowski, stefanha,
pbonzini, Kamil Rytarowski, Alex Bennée
On 1/25/2019 1:24 AM, Thomas Huth wrote:
> On 2019-01-25 01:48, Brad Smith wrote:
>> On 1/24/2019 11:52 AM, Daniel P. Berrangé wrote:
>>
>>> On Thu, Jan 24, 2019 at 05:10:19PM +0100, Philippe Mathieu-Daudé wrote:
>>>> On 1/24/19 4:56 PM, Kamil Rytarowski wrote:
>>>>> On 24.01.2019 16:52, Philippe Mathieu-Daudé wrote:
>>>>>> On 8/16/17 9:21 AM, Fam Zheng wrote:
>>>>>>> The image is prepared following instructions as in:
>>>>>>>
>>>>>>> https://wiki.qemu.org/Hosts/BSD
>>>>>>>
>>>>>>> Signed-off-by: Fam Zheng <famz@redhat.com>
>>>>>>> ---
>>>>>>> tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
>>>>>>> 1 file changed, 45 insertions(+)
>>>>>>> create mode 100755 tests/vm/openbsd
>>>>>>>
>>>>>>> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
>>>>>>> new file mode 100755
>>>>>>> index 0000000000..d37ff83a59
>>>>>>> --- /dev/null
>>>>>>> +++ b/tests/vm/openbsd
>>>>>>> @@ -0,0 +1,45 @@
>>>>>>> +#!/usr/bin/env python
>>>>>>> +#
>>>>>>> +# OpenBSD VM image
>>>>>>> +#
>>>>>>> +# Copyright (C) 2017 Red Hat Inc.
>>>>>>> +#
>>>>>>> +# Authors:
>>>>>>> +# Fam Zheng <famz@redhat.com>
>>>>>>> +#
>>>>>>> +# This work is licensed under the terms of the GNU GPL, version
>>>>>>> 2. See
>>>>>>> +# the COPYING file in the top-level directory.
>>>>>>> +#
>>>>>>> +
>>>>>>> +import os
>>>>>>> +import sys
>>>>>>> +import logging
>>>>>>> +import subprocess
>>>>>>> +import tempfile
>>>>>>> +import time
>>>>>>> +import basevm
>>>>>>> +
>>>>>>> +class OpenBSDVM(basevm.BaseVM):
>>>>>>> + name = "openbsd"
>>>>>>> + BUILD_SCRIPT = """
>>>>>>> + set -e;
>>>>>>> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
>>>>>>> + tar -xf /dev/rsd1c;
>>>>>>> + ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4
>>>>>>> --python=python2.7 {configure_opts};
>>>>>>> + gmake -j{jobs};
>>>>>>> + # XXX: "gmake check" seems to always hang or fail
>>>>>>> + #gmake check;
>>>>>> OK, Now it makes more sense...
>>>>>>
>>>>>> After spending various hours trying to fix various issues on
>>>>>> OpenBSD, I
>>>>>> notice that we never ran tests on this OS.
>>>>>> The only binary I can run is qemu-img, the rest seems useless.
>>>>>> I'll summarize in a different thread.
>>>>>>
>>>>> Is this W^X related?
>>>> Part of it could be but I'm not sure.
>>>>
>>>> The 6.1 VM provided by Fam has /usr/local mounted with wxallowed, I
>>>> tried building/running there and nothing changed, mmap() still returns
>>>> ENOTSUP:
>>> ENOTSUP from mmap is certainly what you'd expect from the W^X scenario
>>>
>>> https://undeadly.org/cgi?action=article&sid=20160527203200
>>>
>>> "W^X violations are no longer permitted by default. A kernel log
>>> message
>>> is generated, and mprotect/mmap return ENOTSUP. If the sysctl(8) flag
>>> kern.wxabort is set then a SIGABRT occurs instead, for gdb use or
>>> coredump
>>> creation."
>> Yes, this policy change was introduced with 6.0.
>>
>> Our ports tree has an option which results in the QEMU binaries being
>> linked with "-z wxneeded".
> Then it's maybe high time to send such changes upstream now ;-)
I have not considered submitting such a patch as it's just a workaround
for an
issue within QEMU. Everything else that we had as local patches or local
build
fiddling to build things properly has been integrated in some manner.
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-25 18:27 ` Brad Smith
@ 2019-01-25 18:38 ` Peter Maydell
2019-01-25 23:04 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 34+ messages in thread
From: Peter Maydell @ 2019-01-25 18:38 UTC (permalink / raw)
To: Brad Smith
Cc: Thomas Huth, Daniel P. Berrangé, Philippe Mathieu-Daudé,
Fam Zheng, QEMU Developers, Kamil Rytarowski, Stefan Hajnoczi,
Paolo Bonzini, Kamil Rytarowski, Alex Bennée
On Fri, 25 Jan 2019 at 18:36, Brad Smith <brad@comstyle.com> wrote:
>
> On 1/25/2019 1:24 AM, Thomas Huth wrote:
>
> > On 2019-01-25 01:48, Brad Smith wrote:
> >> Our ports tree has an option which results in the QEMU binaries being
> >> linked with "-z wxneeded".
> > Then it's maybe high time to send such changes upstream now ;-)
>
>
> I have not considered submitting such a patch as it's just a workaround
> for an
> issue within QEMU. Everything else that we had as local patches or local
> build
> fiddling to build things properly has been integrated in some manner.
We'll happily take a patch that fixes the underlying issue properly
if you'd prefer...
thanks
-- PMM
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-25 18:38 ` Peter Maydell
@ 2019-01-25 23:04 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-01-25 23:04 UTC (permalink / raw)
To: Peter Maydell, Brad Smith
Cc: Thomas Huth, Daniel P. Berrangé, Fam Zheng, QEMU Developers,
Kamil Rytarowski, Stefan Hajnoczi, Paolo Bonzini,
Kamil Rytarowski, Alex Bennée
On 1/25/19 7:38 PM, Peter Maydell wrote:
> On Fri, 25 Jan 2019 at 18:36, Brad Smith <brad@comstyle.com> wrote:
>>
>> On 1/25/2019 1:24 AM, Thomas Huth wrote:
>>
>>> On 2019-01-25 01:48, Brad Smith wrote:
>>>> Our ports tree has an option which results in the QEMU binaries being
>>>> linked with "-z wxneeded".
>>> Then it's maybe high time to send such changes upstream now ;-)
>>
>>
>> I have not considered submitting such a patch as it's just a workaround
>> for an
>> issue within QEMU. Everything else that we had as local patches or local
>> build
>> fiddling to build things properly has been integrated in some manner.
>
> We'll happily take a patch that fixes the underlying issue properly
> if you'd prefer...
I sent "configure: Disable W^X on OpenBSD" to help upstream developers
to test their patches on OpenBSD here:
https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg06674.html
Regards,
Phil.
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-25 0:48 ` Brad Smith
2019-01-25 6:24 ` Thomas Huth
@ 2019-01-25 18:15 ` Philippe Mathieu-Daudé
1 sibling, 0 replies; 34+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-01-25 18:15 UTC (permalink / raw)
To: Brad Smith, Daniel P. Berrangé
Cc: Kamil Rytarowski, Fam Zheng, qemu-devel, Alex Bennée,
Peter Maydell, pbonzini, Kamil Rytarowski, stefanha
On 1/25/19 1:48 AM, Brad Smith wrote:
> On 1/24/2019 11:52 AM, Daniel P. Berrangé wrote:
>
>> On Thu, Jan 24, 2019 at 05:10:19PM +0100, Philippe Mathieu-Daudé wrote:
>>> On 1/24/19 4:56 PM, Kamil Rytarowski wrote:
>>>> On 24.01.2019 16:52, Philippe Mathieu-Daudé wrote:
>>>>> On 8/16/17 9:21 AM, Fam Zheng wrote:
>>>>>> The image is prepared following instructions as in:
>>>>>>
>>>>>> https://wiki.qemu.org/Hosts/BSD
>>>>>>
>>>>>> Signed-off-by: Fam Zheng <famz@redhat.com>
>>>>>> ---
>>>>>> tests/vm/openbsd | 45 +++++++++++++++++++++++++++++++++++++++++++++
>>>>>> 1 file changed, 45 insertions(+)
>>>>>> create mode 100755 tests/vm/openbsd
>>>>>>
>>>>>> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
>>>>>> new file mode 100755
>>>>>> index 0000000000..d37ff83a59
>>>>>> --- /dev/null
>>>>>> +++ b/tests/vm/openbsd
>>>>>> @@ -0,0 +1,45 @@
>>>>>> +#!/usr/bin/env python
>>>>>> +#
>>>>>> +# OpenBSD VM image
>>>>>> +#
>>>>>> +# Copyright (C) 2017 Red Hat Inc.
>>>>>> +#
>>>>>> +# Authors:
>>>>>> +# Fam Zheng <famz@redhat.com>
>>>>>> +#
>>>>>> +# This work is licensed under the terms of the GNU GPL, version
>>>>>> 2. See
>>>>>> +# the COPYING file in the top-level directory.
>>>>>> +#
>>>>>> +
>>>>>> +import os
>>>>>> +import sys
>>>>>> +import logging
>>>>>> +import subprocess
>>>>>> +import tempfile
>>>>>> +import time
>>>>>> +import basevm
>>>>>> +
>>>>>> +class OpenBSDVM(basevm.BaseVM):
>>>>>> + name = "openbsd"
>>>>>> + BUILD_SCRIPT = """
>>>>>> + set -e;
>>>>>> + cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
>>>>>> + tar -xf /dev/rsd1c;
>>>>>> + ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4
>>>>>> --python=python2.7 {configure_opts};
>>>>>> + gmake -j{jobs};
>>>>>> + # XXX: "gmake check" seems to always hang or fail
>>>>>> + #gmake check;
>>>>> OK, Now it makes more sense...
>>>>>
>>>>> After spending various hours trying to fix various issues on
>>>>> OpenBSD, I
>>>>> notice that we never ran tests on this OS.
>>>>> The only binary I can run is qemu-img, the rest seems useless.
>>>>> I'll summarize in a different thread.
>>>>>
>>>> Is this W^X related?
>>> Part of it could be but I'm not sure.
>>>
>>> The 6.1 VM provided by Fam has /usr/local mounted with wxallowed, I
>>> tried building/running there and nothing changed, mmap() still returns
>>> ENOTSUP:
>> ENOTSUP from mmap is certainly what you'd expect from the W^X scenario
>>
>> https://undeadly.org/cgi?action=article&sid=20160527203200
>>
>> "W^X violations are no longer permitted by default. A kernel log
>> message
>> is generated, and mprotect/mmap return ENOTSUP. If the sysctl(8) flag
>> kern.wxabort is set then a SIGABRT occurs instead, for gdb use or
>> coredump
>> creation."
>
> Yes, this policy change was introduced with 6.0.
>
> Our ports tree has an option which results in the QEMU binaries being
> linked with "-z wxneeded".
I was preparing a draft about deprecating/removing OpenBSD support
because it is broken/untested... For sure it is untested.
/me feeling he lost 2 days...
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image
2019-01-24 15:52 ` Philippe Mathieu-Daudé
2019-01-24 15:56 ` Kamil Rytarowski
@ 2019-01-24 16:27 ` Peter Maydell
1 sibling, 0 replies; 34+ messages in thread
From: Peter Maydell @ 2019-01-24 16:27 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: Fam Zheng, QEMU Developers, Alex Bennée, Brad Smith,
Daniel P. Berrange, Stefan Hajnoczi, Paolo Bonzini,
Kamil Rytarowski
On Thu, 24 Jan 2019 at 15:52, Philippe Mathieu-Daudé <philmd@redhat.com> wrote:
> After spending various hours trying to fix various issues on OpenBSD, I
> notice that we never ran tests on this OS.
When I was running tests on a custom OpenBSD VM rather than
using the tests/vm one I'm pretty sure I used to run "make check"
on it, so I was a bit surprised to see that tests weren't run
for the tests/vm setup, but I never cared enough to try to
find out why...
thanks
-- PMM
^ permalink raw reply [flat|nested] 34+ messages in thread
* [Qemu-devel] [PATCH RFC 9/9] Makefile: Add rules to run vm tests
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (7 preceding siblings ...)
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image Fam Zheng
@ 2017-08-16 7:21 ` Fam Zheng
2017-08-16 7:46 ` [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) no-reply
` (2 subsequent siblings)
11 siblings, 0 replies; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 7:21 UTC (permalink / raw)
To: qemu-devel
Cc: berrange, Alex Bennée, Fam Zheng,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
Signed-off-by: Fam Zheng <famz@redhat.com>
---
Makefile | 2 ++
configure | 2 +-
tests/vm/Makefile.include | 41 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 44 insertions(+), 1 deletion(-)
create mode 100644 tests/vm/Makefile.include
diff --git a/Makefile b/Makefile
index 81447b1f08..2798a5ca69 100644
--- a/Makefile
+++ b/Makefile
@@ -813,6 +813,7 @@ endif
-include $(wildcard *.d tests/*.d)
include $(SRC_PATH)/tests/docker/Makefile.include
+include $(SRC_PATH)/tests/vm/Makefile.include
.PHONY: help
help:
@@ -836,6 +837,7 @@ help:
@echo 'Test targets:'
@echo ' check - Run all tests (check-help for details)'
@echo ' docker - Help about targets running tests inside Docker containers'
+ @echo ' vm-test - Help about targets running tests inside VM'
@echo ''
@echo 'Documentation targets:'
@echo ' html info pdf txt'
diff --git a/configure b/configure
index dd73cce62f..9a3052e9ad 100755
--- a/configure
+++ b/configure
@@ -6544,7 +6544,7 @@ if test "$ccache_cpp2" = "yes"; then
fi
# build tree in object directory in case the source is not in the current directory
-DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
+DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
DIRS="$DIRS docs docs/interop fsdev"
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
DIRS="$DIRS roms/seabios roms/vgabios"
diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
new file mode 100644
index 0000000000..e24350f18b
--- /dev/null
+++ b/tests/vm/Makefile.include
@@ -0,0 +1,41 @@
+# Makefile for VM tests
+
+.PHONY: vm-build-all
+
+IMAGES := ubuntu.i386 freebsd netbsd openbsd
+IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
+
+.PRECIOUS: $(IMAGE_FILES)
+
+vm-test:
+ @echo "vm-test: Test QEMU in preconfigured virtual machines"
+ @echo
+ @echo " vm-build-ubuntu.i386 - Build QEMU in ubuntu i386 VM"
+ @echo " vm-build-freebsd - Build QEMU in FreeBSD VM"
+ @echo " vm-build-netbsd - Build QEMU in NetBSD VM"
+ @echo " vm-build-freebsd - Build QEMU in OpenBSD VM"
+
+vm-build-all: $(addprefix vm-build-, $(IMAGES))
+
+tests/vm/%.img: $(SRC_PATH)/tests/vm/%
+ $(call quiet-command, \
+ $(SRC_PATH)/tests/vm/$* \
+ $(if $(V)$(DEBUG), --debug) \
+ --image "$@" \
+ --force \
+ --build-image $@, \
+ " VM-IMAGE $*")
+
+
+# Build in VM $(IMAGE)
+vm-build-%: tests/vm/%.img
+ $(call quiet-command, \
+ $(SRC_PATH)/tests/vm/$* \
+ $(if $(V)$(DEBUG), --debug) \
+ $(if $(DEBUG), --interactive) \
+ --image "$<" \
+ --build-qemu $(SRC_PATH) \
+ $(if $(TARGET_DIRS), --target-list=$(TARGET_DIRS), \
+ $(if $(TARGET_LIST), --target-list=$(TARGET_LIST))), \
+ " VM-BUILD $(IMAGE)")
+
--
2.13.4
^ permalink raw reply related [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux)
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (8 preceding siblings ...)
2017-08-16 7:21 ` [Qemu-devel] [PATCH RFC 9/9] Makefile: Add rules to run vm tests Fam Zheng
@ 2017-08-16 7:46 ` no-reply
2017-08-16 8:56 ` Stefan Hajnoczi
2017-08-16 9:24 ` Kamil Rytarowski
11 siblings, 0 replies; 34+ messages in thread
From: no-reply @ 2017-08-16 7:46 UTC (permalink / raw)
To: famz
Cc: qemu-devel, peter.maydell, f4bug, kamil, stefanha, pbonzini,
alex.bennee
Hi,
This series seems to have some coding style problems. See output below for
more information:
Message-id: 20170816072104.24420-1-famz@redhat.com
Subject: [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux)
Type: series
=== TEST SCRIPT BEGIN ===
#!/bin/bash
BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0
git config --local diff.renamelimit 0
git config --local diff.renames True
commits="$(git log --format=%H --reverse $BASE..)"
for c in $commits; do
echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..."
if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
failed=1
echo
fi
n=$((n+1))
done
exit $failed
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
055464f200 Makefile: Add rules to run vm tests
a51bbb970d tests: Add OpenBSD image
ad7b5b619b tests: Add NetBSD image
e80f6022ec tests: Add FreeBSD image
cc87c43c6d tests: Add ubuntu.i386 image
9bb54d6c23 tests: Add vm test lib
5c83acfced qemu.py: Add "wait()" method
64ca3a8cde qemu.py: Add variable vga type
8c873e4307 gitignore: Ignore vm test images
=== OUTPUT BEGIN ===
Checking PATCH 1/9: gitignore: Ignore vm test images...
Checking PATCH 2/9: qemu.py: Add variable vga type...
Checking PATCH 3/9: qemu.py: Add "wait()" method...
Checking PATCH 4/9: tests: Add vm test lib...
ERROR: line over 90 characters
#83: FILE: tests/vm/basevm.py:58:
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCikC46WYtXotUd0UGPz9547Aj0KqC4gk+nt4BBJm86IHgCD9FygSGX9EFutXlhz9KZIPg9Okk7+IzXRHCWI2MNvhrcjyrezKREm71z08j9iwfxY3340fY2Mo+0khwpO7bzsgzkljHIHqcOg7MgttPInVMNH/EfqpgR8EDKJuWCB2Ny+EBFN/3dAiff0X/EvKle9PUrY70EkSycnyURS8HZReEqj8lN9J5kXzA8F6jBo/0Q42Ttv6e4k5YcaDrwmLrBWLra2PCXZLNyHqXEiFkGmdXtA1Eox9gc/p4jIXim6xrPNmpN6WyrrEjaCF5xYvNv8wXkD6uSWwbHYU24lIAn qemu-vm-key
WARNING: line over 80 characters
#187: FILE: tests/vm/basevm.py:162:
+ "file=%s,if=none,id=%s,cache=writeback,format=raw" % \
WARNING: line over 80 characters
#190: FILE: tests/vm/basevm.py:165:
+ "virtio-blk,drive=%s,serial=%s,bootindex=1" % (name, name)]
total: 1 errors, 2 warnings, 246 lines checked
Your patch has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
Checking PATCH 5/9: tests: Add ubuntu.i386 image...
Checking PATCH 6/9: tests: Add FreeBSD image...
Checking PATCH 7/9: tests: Add NetBSD image...
Checking PATCH 8/9: tests: Add OpenBSD image...
Checking PATCH 9/9: Makefile: Add rules to run vm tests...
=== OUTPUT END ===
Test command exited with code: 1
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux)
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (9 preceding siblings ...)
2017-08-16 7:46 ` [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) no-reply
@ 2017-08-16 8:56 ` Stefan Hajnoczi
2017-08-16 9:24 ` Kamil Rytarowski
11 siblings, 0 replies; 34+ messages in thread
From: Stefan Hajnoczi @ 2017-08-16 8:56 UTC (permalink / raw)
To: Cleber Rosa
Cc: qemu-devel, Peter Maydell, Philippe Mathieu-Daudé,
Kamil Rytarowski, stefanha, pbonzini, Alex Bennée, Fam Zheng
[-- Attachment #1: Type: text/plain, Size: 2220 bytes --]
On Wed, Aug 16, 2017 at 03:20:55PM +0800, Fam Zheng wrote:
> Build tests in one 32 bit Linux guest and three BSD images are defined in this
> series. This is a more managable way than the manually maintained virtual
> machines in patchew. Also, one big advantage of ephemeral VMs over long running
> guests is the reduced RAM usage of host, which makes it possible to have one
> host test all these BSD variants and probably more.
>
> The BSD guest templates are manually prepared following
>
> https://wiki.qemu.org/Hosts/BSD
>
> as it is not easy to automate. (The ideal approach is like the ubuntu.i386
> script, which configures the guest on top of an official released image, fully
> automatically.)
>
> Need for help: "gmake check" in the added OpenBSD image fails with -ENOMEM
> errors, even if I change "-m 2G" to "-m 8G" when starting VM. Ideas? And there
> is a warning from ./configure about OpenBSD going to be unsupported in coming
> releases, is it still the case?
>
> Fam
>
> Fam Zheng (9):
> gitignore: Ignore vm test images
> qemu.py: Add variable vga type
> qemu.py: Add "wait()" method
> tests: Add vm test lib
> tests: Add ubuntu.i386 image
> tests: Add FreeBSD image
> tests: Add NetBSD image
> tests: Add OpenBSD image
> Makefile: Add rules to run vm tests
>
> .gitignore | 2 +
> Makefile | 2 +
> configure | 2 +-
> scripts/qemu.py | 8 +-
> tests/vm/Makefile.include | 41 ++++++++
> tests/vm/basevm.py | 246 ++++++++++++++++++++++++++++++++++++++++++++++
> tests/vm/freebsd | 44 +++++++++
> tests/vm/netbsd | 44 +++++++++
> tests/vm/openbsd | 45 +++++++++
> tests/vm/ubuntu.i386 | 88 +++++++++++++++++
> 10 files changed, 520 insertions(+), 2 deletions(-)
> create mode 100644 tests/vm/Makefile.include
> create mode 100755 tests/vm/basevm.py
> create mode 100755 tests/vm/freebsd
> create mode 100755 tests/vm/netbsd
> create mode 100755 tests/vm/openbsd
> create mode 100755 tests/vm/ubuntu.i386
Adding Cleber to CC since he's looking into QEMU test infrastructure
improvements.
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux)
2017-08-16 7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
` (10 preceding siblings ...)
2017-08-16 8:56 ` Stefan Hajnoczi
@ 2017-08-16 9:24 ` Kamil Rytarowski
2017-08-16 10:13 ` Fam Zheng
11 siblings, 1 reply; 34+ messages in thread
From: Kamil Rytarowski @ 2017-08-16 9:24 UTC (permalink / raw)
To: Fam Zheng, qemu-devel
Cc: berrange, Alex Bennée, Philippe Mathieu-Daudé, stefanha,
pbonzini, Peter Maydell, Kamil Rytarowski
[-- Attachment #1: Type: text/plain, Size: 2353 bytes --]
On 16.08.2017 09:20, Fam Zheng wrote:
> Build tests in one 32 bit Linux guest and three BSD images are defined in this
> series. This is a more managable way than the manually maintained virtual
> machines in patchew. Also, one big advantage of ephemeral VMs over long running
> guests is the reduced RAM usage of host, which makes it possible to have one
> host test all these BSD variants and probably more.
>
Thank you for your work on this!
> The BSD guest templates are manually prepared following
>
> https://wiki.qemu.org/Hosts/BSD
>
> as it is not easy to automate. (The ideal approach is like the ubuntu.i386
> script, which configures the guest on top of an official released image, fully
> automatically.)
>
For the reference, inside the NetBSD infrastructure we use homegrown Anita:
http://pkgsrc.se/misc/py-anita
> Need for help: "gmake check" in the added OpenBSD image fails with -ENOMEM
> errors, even if I change "-m 2G" to "-m 8G" when starting VM. Ideas? And there
> is a warning from ./configure about OpenBSD going to be unsupported in coming
> releases, is it still the case?
>
I'm not sure about their defaults. Please check ulimit and perhaps
/etc/login.conf.
> Fam
>
> Fam Zheng (9):
> gitignore: Ignore vm test images
> qemu.py: Add variable vga type
> qemu.py: Add "wait()" method
> tests: Add vm test lib
> tests: Add ubuntu.i386 image
> tests: Add FreeBSD image
> tests: Add NetBSD image
> tests: Add OpenBSD image
> Makefile: Add rules to run vm tests
>
> .gitignore | 2 +
> Makefile | 2 +
> configure | 2 +-
> scripts/qemu.py | 8 +-
> tests/vm/Makefile.include | 41 ++++++++
> tests/vm/basevm.py | 246 ++++++++++++++++++++++++++++++++++++++++++++++
> tests/vm/freebsd | 44 +++++++++
> tests/vm/netbsd | 44 +++++++++
> tests/vm/openbsd | 45 +++++++++
> tests/vm/ubuntu.i386 | 88 +++++++++++++++++
> 10 files changed, 520 insertions(+), 2 deletions(-)
> create mode 100644 tests/vm/Makefile.include
> create mode 100755 tests/vm/basevm.py
> create mode 100755 tests/vm/freebsd
> create mode 100755 tests/vm/netbsd
> create mode 100755 tests/vm/openbsd
> create mode 100755 tests/vm/ubuntu.i386
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux)
2017-08-16 9:24 ` Kamil Rytarowski
@ 2017-08-16 10:13 ` Fam Zheng
2017-08-16 10:10 ` Kamil Rytarowski
0 siblings, 1 reply; 34+ messages in thread
From: Fam Zheng @ 2017-08-16 10:13 UTC (permalink / raw)
To: Kamil Rytarowski
Cc: qemu-devel, berrange, Alex Bennée,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell,
Kamil Rytarowski
On Wed, 08/16 11:24, Kamil Rytarowski wrote:
> On 16.08.2017 09:20, Fam Zheng wrote:
> > Build tests in one 32 bit Linux guest and three BSD images are defined in this
> > series. This is a more managable way than the manually maintained virtual
> > machines in patchew. Also, one big advantage of ephemeral VMs over long running
> > guests is the reduced RAM usage of host, which makes it possible to have one
> > host test all these BSD variants and probably more.
> >
>
> Thank you for your work on this!
>
> > The BSD guest templates are manually prepared following
> >
> > https://wiki.qemu.org/Hosts/BSD
> >
> > as it is not easy to automate. (The ideal approach is like the ubuntu.i386
> > script, which configures the guest on top of an official released image, fully
> > automatically.)
> >
>
> For the reference, inside the NetBSD infrastructure we use homegrown Anita:
>
> http://pkgsrc.se/misc/py-anita
Looks cool. Is it suitable for using to implement tests/vm/netbsd? Is there a
user documentation?
Fam
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux)
2017-08-16 10:13 ` Fam Zheng
@ 2017-08-16 10:10 ` Kamil Rytarowski
0 siblings, 0 replies; 34+ messages in thread
From: Kamil Rytarowski @ 2017-08-16 10:10 UTC (permalink / raw)
To: Fam Zheng
Cc: qemu-devel, berrange, Alex Bennée,
Philippe Mathieu-Daudé, stefanha, pbonzini, Peter Maydell
[-- Attachment #1: Type: text/plain, Size: 1490 bytes --]
On 16.08.2017 12:13, Fam Zheng wrote:
> On Wed, 08/16 11:24, Kamil Rytarowski wrote:
>> On 16.08.2017 09:20, Fam Zheng wrote:
>>> Build tests in one 32 bit Linux guest and three BSD images are defined in this
>>> series. This is a more managable way than the manually maintained virtual
>>> machines in patchew. Also, one big advantage of ephemeral VMs over long running
>>> guests is the reduced RAM usage of host, which makes it possible to have one
>>> host test all these BSD variants and probably more.
>>>
>>
>> Thank you for your work on this!
>>
>>> The BSD guest templates are manually prepared following
>>>
>>> https://wiki.qemu.org/Hosts/BSD
>>>
>>> as it is not easy to automate. (The ideal approach is like the ubuntu.i386
>>> script, which configures the guest on top of an official released image, fully
>>> automatically.)
>>>
>>
>> For the reference, inside the NetBSD infrastructure we use homegrown Anita:
>>
>> http://pkgsrc.se/misc/py-anita
>
> Looks cool. Is it suitable for using to implement tests/vm/netbsd? Is there a
> user documentation?
>
> Fam
>
Documentation:
http://www.gson.org/netbsd/anita/
I'm not sure if it is suitable. It was designed with a different goal -
to verify the process of installation and execution of ATF (regress)
tests. The process of clean installation of NetBSD for every patch is
overkill... however this might be a source of inspiration. (I've not
been digging into the source code).
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 34+ messages in thread