Re: [PATCH 1/1] tests/vm: Allow to set qemu-img path
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
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 = [ >