Re: [PATCH 1/1] tests/vm: Allow to set qemu-img path

2019-12-03 Thread Philippe Mathieu-Daudé

On 11/14/19 2:42 PM, Wainer dos Santos Moschetta wrote:

By default VM build test use qemu-img from system's PATH to
create the image disk. Due the lack of qemu-img on the system
or the desire to simply use a version built with QEMU, it would
be nice to allow one to set its path. So this patch makes that
possible by reading the path to qemu-img from QEMU_IMG if set,
otherwise it fallback to default behavior.

Signed-off-by: Wainer dos Santos Moschetta 


Reviewed-by: Philippe Mathieu-Daudé 


---
  docs/devel/testing.rst| 6 --
  tests/vm/Makefile.include | 1 +
  tests/vm/basevm.py| 5 +
  tests/vm/centos   | 2 +-
  tests/vm/fedora   | 4 +---
  tests/vm/freebsd  | 3 +--
  tests/vm/netbsd   | 3 +--
  tests/vm/openbsd  | 3 +--
  tests/vm/ubuntu.i386  | 2 +-
  9 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
index 8e981e062d..9be6cd4410 100644
--- a/docs/devel/testing.rst
+++ b/docs/devel/testing.rst
@@ -418,13 +418,15 @@ access, so they SHOULD NOT be exposed to external 
interfaces if you are
  concerned about attackers taking control of the guest and potentially
  exploiting a QEMU security bug to compromise the host.
  
-QEMU binary


+QEMU binaries
+-
  
  By default, qemu-system-x86_64 is searched in $PATH to run the guest. If there

  isn't one, or if it is older than 2.10, the test won't work. In this case,
  provide the QEMU binary in env var: ``QEMU=/path/to/qemu-2.10+``.
  
+Likewise the path to qemu-img can be set in QEMU_IMG environment variable.

+
  Make jobs
  -
  
diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include

index fea348e845..9e7c46a473 100644
--- a/tests/vm/Makefile.include
+++ b/tests/vm/Makefile.include
@@ -34,6 +34,7 @@ vm-help vm-test:
@echo "DEBUG=1  - Enable verbose output on host and 
interactive debugging"
@echo "V=1  - Enable verbose ouput on host 
and guest commands"
@echo "QEMU=/path/to/qemu   - Change path to QEMU 
binary"
+   @echo "QEMU_IMG=/path/to/qemu-img   - Change path to qemu-img 
tool"
  
  vm-build-all: $(addprefix vm-build-, $(IMAGES))
  
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py

index 91a9226026..d1efeb3646 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -152,6 +152,11 @@ class BaseVM(object):
  def build_image(self, img):
  raise NotImplementedError
  
+def exec_qemu_img(self, *args):

+cmd = [os.environ.get("QEMU_IMG", "qemu-img")]
+cmd.extend(list(args))
+subprocess.check_call(cmd)
+
  def add_source_dir(self, src_dir):
  name = "data-" + hashlib.sha1(src_dir.encode("utf-8")).hexdigest()[:5]
  tarfile = os.path.join(self._tmpdir, name + ".tar")
diff --git a/tests/vm/centos b/tests/vm/centos
index 53976f1c4c..eac07dacd6 100755
--- a/tests/vm/centos
+++ b/tests/vm/centos
@@ -68,7 +68,7 @@ class CentosVM(basevm.BaseVM):
  sys.stderr.write("Extracting the image...\n")
  subprocess.check_call(["ln", "-f", cimg, img_tmp + ".xz"])
  subprocess.check_call(["xz", "--keep", "-dvf", img_tmp + ".xz"])
-subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
+self.exec_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")
diff --git a/tests/vm/fedora b/tests/vm/fedora
index 7fec1479fb..8e270fc0f0 100755
--- a/tests/vm/fedora
+++ b/tests/vm/fedora
@@ -74,9 +74,7 @@ class FedoraVM(basevm.BaseVM):
  
  self.print_step("Preparing iso and disk image")

  subprocess.check_call(["cp", "-f", cimg, iso])
-subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
-   img_tmp, self.size])
-
+self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
  self.print_step("Booting installer")
  self.boot(img_tmp, extra_args = [
  "-bios", "pc-bios/bios-256k.bin",
diff --git a/tests/vm/freebsd b/tests/vm/freebsd
index 2a19461a90..1825cc5821 100755
--- a/tests/vm/freebsd
+++ b/tests/vm/freebsd
@@ -82,8 +82,7 @@ class FreeBSDVM(basevm.BaseVM):
  self.print_step("Preparing iso and disk image")
  subprocess.check_call(["cp", "-f", cimg, iso_xz])
  subprocess.check_call(["xz", "-dvf", iso_xz])
-subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
-   img_tmp, self.size])
+self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
  
  self.print_step("Booting installer")

  self.boot(img_tmp, extra_args = [
diff --git a/tests/vm/netbsd b/tests/vm/netbsd
index 611e6cc5b5..ec6f3563b2 100755
--- a/tests/vm/netbsd
+++ b/tests/vm/netbsd
@@ -77,8 +77,7 

Re: [PATCH 1/1] tests/vm: Allow to set qemu-img path

2019-12-03 Thread Alex Bennée


Wainer dos Santos Moschetta  writes:

> By default VM build test use qemu-img from system's PATH to
> create the image disk. Due the lack of qemu-img on the system
> or the desire to simply use a version built with QEMU, it would
> be nice to allow one to set its path. So this patch makes that
> possible by reading the path to qemu-img from QEMU_IMG if set,
> otherwise it fallback to default behavior.
>
> Signed-off-by: Wainer dos Santos Moschetta 

Queued to testing/next, thanks.

> ---
>  docs/devel/testing.rst| 6 --
>  tests/vm/Makefile.include | 1 +
>  tests/vm/basevm.py| 5 +
>  tests/vm/centos   | 2 +-
>  tests/vm/fedora   | 4 +---
>  tests/vm/freebsd  | 3 +--
>  tests/vm/netbsd   | 3 +--
>  tests/vm/openbsd  | 3 +--
>  tests/vm/ubuntu.i386  | 2 +-
>  9 files changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
> index 8e981e062d..9be6cd4410 100644
> --- a/docs/devel/testing.rst
> +++ b/docs/devel/testing.rst
> @@ -418,13 +418,15 @@ access, so they SHOULD NOT be exposed to external 
> interfaces if you are
>  concerned about attackers taking control of the guest and potentially
>  exploiting a QEMU security bug to compromise the host.
>  
> -QEMU binary
> 
> +QEMU binaries
> +-
>  
>  By default, qemu-system-x86_64 is searched in $PATH to run the guest. If 
> there
>  isn't one, or if it is older than 2.10, the test won't work. In this case,
>  provide the QEMU binary in env var: ``QEMU=/path/to/qemu-2.10+``.
>  
> +Likewise the path to qemu-img can be set in QEMU_IMG environment variable.
> +
>  Make jobs
>  -
>  
> diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
> index fea348e845..9e7c46a473 100644
> --- a/tests/vm/Makefile.include
> +++ b/tests/vm/Makefile.include
> @@ -34,6 +34,7 @@ vm-help vm-test:
>   @echo "DEBUG=1   - Enable verbose output on 
> host and interactive debugging"
>   @echo "V=1   - Enable verbose ouput on host 
> and guest commands"
>   @echo "QEMU=/path/to/qemu- Change path to QEMU binary"
> + @echo "QEMU_IMG=/path/to/qemu-img- Change path to qemu-img tool"
>  
>  vm-build-all: $(addprefix vm-build-, $(IMAGES))
>  
> diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
> index 91a9226026..d1efeb3646 100755
> --- a/tests/vm/basevm.py
> +++ b/tests/vm/basevm.py
> @@ -152,6 +152,11 @@ class BaseVM(object):
>  def build_image(self, img):
>  raise NotImplementedError
>  
> +def exec_qemu_img(self, *args):
> +cmd = [os.environ.get("QEMU_IMG", "qemu-img")]
> +cmd.extend(list(args))
> +subprocess.check_call(cmd)
> +
>  def add_source_dir(self, src_dir):
>  name = "data-" + 
> hashlib.sha1(src_dir.encode("utf-8")).hexdigest()[:5]
>  tarfile = os.path.join(self._tmpdir, name + ".tar")
> diff --git a/tests/vm/centos b/tests/vm/centos
> index 53976f1c4c..eac07dacd6 100755
> --- a/tests/vm/centos
> +++ b/tests/vm/centos
> @@ -68,7 +68,7 @@ class CentosVM(basevm.BaseVM):
>  sys.stderr.write("Extracting the image...\n")
>  subprocess.check_call(["ln", "-f", cimg, img_tmp + ".xz"])
>  subprocess.check_call(["xz", "--keep", "-dvf", img_tmp + ".xz"])
> -subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
> +self.exec_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")
> diff --git a/tests/vm/fedora b/tests/vm/fedora
> index 7fec1479fb..8e270fc0f0 100755
> --- a/tests/vm/fedora
> +++ b/tests/vm/fedora
> @@ -74,9 +74,7 @@ class FedoraVM(basevm.BaseVM):
>  
>  self.print_step("Preparing iso and disk image")
>  subprocess.check_call(["cp", "-f", cimg, iso])
> -subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -   img_tmp, self.size])
> -
> +self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>  self.print_step("Booting installer")
>  self.boot(img_tmp, extra_args = [
>  "-bios", "pc-bios/bios-256k.bin",
> diff --git a/tests/vm/freebsd b/tests/vm/freebsd
> index 2a19461a90..1825cc5821 100755
> --- a/tests/vm/freebsd
> +++ b/tests/vm/freebsd
> @@ -82,8 +82,7 @@ class FreeBSDVM(basevm.BaseVM):
>  self.print_step("Preparing iso and disk image")
>  subprocess.check_call(["cp", "-f", cimg, iso_xz])
>  subprocess.check_call(["xz", "-dvf", iso_xz])
> -subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -   img_tmp, self.size])
> +self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>  
>  self.print_step("Booting installer")
>  self.boot(img_tmp, extra_args = [
>