All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests
@ 2018-07-12  1:28 Fam Zheng
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 1/4] tests: Add an option for snapshot (default: off) Fam Zheng
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Fam Zheng @ 2018-07-12  1:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: pbonzini, Fam Zheng, Alex Bennée, Philippe Mathieu-Daudé

v3: Add 'make vm-test' document. [Phil]

v2: Drop archive-source.sh changes.
    The new test depends on the iotests nbd fix I posted today to pass.

Docker testing on patchew has long suffered from 'make check' hangings. The
cleanness of VM testing is the cure. Now let's add a CentOS 7 image to run the
tests.  It's purely ad-hoc, but hopefully still easy to understand and use for
everyone.

The first patch makes passing source code from host to the container in VM
working, and is a nice clean up.

The second patch makes caches work, to speed up repetitive runs like on
patchew.

The last patch adds the new image that does the job. Two out of three docker
tests running on patchew.org are added to the image. I'll wait for Peter to fix
the 'docker-test-quick@centos6' hanging (oob test) before adding it too.

Fam

Fam Zheng (4):
  tests: Add an option for snapshot (default: off)
  tests/vm: Pass verbose flag into VM make commands
  tests: Allow overriding archive path with SRC_ARCHIVE
  tests: Add centos VM testing

 tests/docker/Makefile.include |  7 ++-
 tests/vm/Makefile.include     |  3 +-
 tests/vm/basevm.py            | 10 ++++-
 tests/vm/centos               | 84 +++++++++++++++++++++++++++++++++++
 tests/vm/freebsd              |  4 +-
 tests/vm/netbsd               |  4 +-
 tests/vm/openbsd              |  4 +-
 tests/vm/ubuntu.i386          |  4 +-
 8 files changed, 107 insertions(+), 13 deletions(-)
 create mode 100755 tests/vm/centos

-- 
2.17.1

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 1/4] tests: Add an option for snapshot (default: off)
  2018-07-12  1:28 [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Fam Zheng
@ 2018-07-12  1:28 ` Fam Zheng
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 2/4] tests/vm: Pass verbose flag into VM make commands Fam Zheng
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Fam Zheng @ 2018-07-12  1:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: pbonzini, Fam Zheng, Alex Bennée, Philippe Mathieu-Daudé

Not using snapshot has the benefit of automatically persisting useful
test harnesses, such as docker images and ccache database. Although it
will lose some cleanness, it is imaginably useful for patchew.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 tests/vm/basevm.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 3643117816..e5d6a328d5 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -216,6 +216,8 @@ def parse_args(vm_name):
                       help="build QEMU from source in guest")
     parser.add_option("--interactive", "-I", action="store_true",
                       help="Interactively run command")
+    parser.add_option("--snapshot", "-s", action="store_true",
+                      help="run tests with a snapshot")
     parser.disable_interspersed_args()
     return parser.parse_args()
 
@@ -241,7 +243,10 @@ def main(vmcls):
                    jobs=args.jobs)]
         else:
             cmd = argv
-        vm.boot(args.image + ",snapshot=on")
+        img = args.image
+        if args.snapshot:
+            img += ",snapshot=on"
+        vm.boot(img)
         vm.wait_ssh()
     except Exception as e:
         if isinstance(e, SystemExit) and e.code == 0:
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 2/4] tests/vm: Pass verbose flag into VM make commands
  2018-07-12  1:28 [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Fam Zheng
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 1/4] tests: Add an option for snapshot (default: off) Fam Zheng
@ 2018-07-12  1:28 ` Fam Zheng
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 3/4] tests: Allow overriding archive path with SRC_ARCHIVE Fam Zheng
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Fam Zheng @ 2018-07-12  1:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: pbonzini, Fam Zheng, Alex Bennée, Philippe Mathieu-Daudé

Our Makefile has:

vm-build-%: tests/vm/%.img
	$(call quiet-command, \
		$(SRC_PATH)/tests/vm/$* \
		$(if $(V)$(DEBUG), --debug) \
		$(if $(DEBUG), --interactive) \

the intention of which is to let the make command in VM have V=1 if
V=1 is set. We pass this to the BUILD_SCRIPT format.

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Fam Zheng <famz@redhat.com>
---
 tests/vm/basevm.py   | 3 ++-
 tests/vm/freebsd     | 4 ++--
 tests/vm/netbsd      | 4 ++--
 tests/vm/openbsd     | 4 ++--
 tests/vm/ubuntu.i386 | 4 ++--
 5 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index e5d6a328d5..25361c6b7d 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -240,7 +240,8 @@ def main(vmcls):
             vm.add_source_dir(args.build_qemu)
             cmd = [vm.BUILD_SCRIPT.format(
                    configure_opts = " ".join(argv),
-                   jobs=args.jobs)]
+                   jobs=args.jobs,
+                   verbose="1" if args.debug else "")]
         else:
             cmd = argv
         img = args.image
diff --git a/tests/vm/freebsd b/tests/vm/freebsd
index 039dad8f69..b20612a6c9 100755
--- a/tests/vm/freebsd
+++ b/tests/vm/freebsd
@@ -23,8 +23,8 @@ class FreeBSDVM(basevm.BaseVM):
         cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
         tar -xf /dev/vtbd1;
         ./configure {configure_opts};
-        gmake -j{jobs};
-        gmake check;
+        gmake -j{jobs} V={verbose};
+        gmake check V={verbose};
     """
 
     def build_image(self, img):
diff --git a/tests/vm/netbsd b/tests/vm/netbsd
index 3972d8b45c..3f9d34a208 100755
--- a/tests/vm/netbsd
+++ b/tests/vm/netbsd
@@ -23,8 +23,8 @@ class NetBSDVM(basevm.BaseVM):
         cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
         tar -xf /dev/rld1a;
         ./configure --python=python2.7 {configure_opts};
-        gmake -j{jobs};
-        gmake check;
+        gmake -j{jobs} V={verbose};
+        gmake check V={verbose};
     """
 
     def build_image(self, img):
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index 6ae16d97fd..3285c1abde 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -23,9 +23,9 @@ class OpenBSDVM(basevm.BaseVM):
         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};
+        gmake -j{jobs} V={verbose};
         # XXX: "gmake check" seems to always hang or fail
-        #gmake check;
+        #gmake check V={verbose};
     """
 
     def build_image(self, img):
diff --git a/tests/vm/ubuntu.i386 b/tests/vm/ubuntu.i386
index fc319e0e6e..b4eaa0dedc 100755
--- a/tests/vm/ubuntu.i386
+++ b/tests/vm/ubuntu.i386
@@ -25,8 +25,8 @@ class UbuntuX86VM(basevm.BaseVM):
         sudo chmod a+r /dev/vdb;
         tar -xf /dev/vdb;
         ./configure {configure_opts};
-        make -j{jobs};
-        make check;
+        make -j{jobs} V={verbose};
+        make check V={verbose};
     """
 
     def _gen_cloud_init_iso(self):
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 3/4] tests: Allow overriding archive path with SRC_ARCHIVE
  2018-07-12  1:28 [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Fam Zheng
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 1/4] tests: Add an option for snapshot (default: off) Fam Zheng
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 2/4] tests/vm: Pass verbose flag into VM make commands Fam Zheng
@ 2018-07-12  1:28 ` Fam Zheng
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing Fam Zheng
  2018-07-12 14:50 ` [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Philippe Mathieu-Daudé
  4 siblings, 0 replies; 12+ messages in thread
From: Fam Zheng @ 2018-07-12  1:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: pbonzini, Fam Zheng, Alex Bennée, Philippe Mathieu-Daudé

In VM based tests, the source archive is created in host, we don't have
to run archive-source.sh again, as it complicates the Makefile and
scripts.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 tests/docker/Makefile.include | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index b2a7e761cc..f0525b91a7 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -27,8 +27,11 @@ DOCKER_SRC_COPY := $(BUILD_DIR)/docker-src.$(CUR_TIME)
 
 $(DOCKER_SRC_COPY):
 	@mkdir $@
-	$(call quiet-command, cd $(SRC_PATH) && scripts/archive-source.sh $@/qemu.tar, \
-		"GEN", "$@/qemu.tar")
+	$(if $(SRC_ARCHIVE), \
+		$(call quiet-command, cp "$(SRC_ARCHIVE)" $@/qemu.tar, \
+			"CP", "$@/qemu.tar"), \
+		$(call quiet-command, cd $(SRC_PATH) && scripts/archive-source.sh $@/qemu.tar, \
+			"GEN", "$@/qemu.tar"))
 	$(call quiet-command, cp $(SRC_PATH)/tests/docker/run $@/run, \
 		"COPY","RUNNER")
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing
  2018-07-12  1:28 [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Fam Zheng
                   ` (2 preceding siblings ...)
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 3/4] tests: Allow overriding archive path with SRC_ARCHIVE Fam Zheng
@ 2018-07-12  1:28 ` Fam Zheng
  2018-07-12 15:02   ` Philippe Mathieu-Daudé
  2018-07-16  1:34   ` Philippe Mathieu-Daudé
  2018-07-12 14:50 ` [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Philippe Mathieu-Daudé
  4 siblings, 2 replies; 12+ messages in thread
From: Fam Zheng @ 2018-07-12  1:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: pbonzini, Fam Zheng, Alex Bennée, Philippe Mathieu-Daudé

This one does docker testing in the VM. It is intended to replace the
native docker testing on patchew testers.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 tests/vm/Makefile.include |  3 +-
 tests/vm/centos           | 84 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 1 deletion(-)
 create mode 100755 tests/vm/centos

diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
index 5daa2a3b73..af19b7a4e6 100644
--- a/tests/vm/Makefile.include
+++ b/tests/vm/Makefile.include
@@ -2,7 +2,7 @@
 
 .PHONY: vm-build-all
 
-IMAGES := ubuntu.i386 freebsd netbsd openbsd
+IMAGES := ubuntu.i386 freebsd netbsd openbsd centos
 IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
 
 .PRECIOUS: $(IMAGE_FILES)
@@ -14,6 +14,7 @@ vm-test:
 	@echo "  vm-build-freebsd                - Build QEMU in FreeBSD VM"
 	@echo "  vm-build-netbsd                 - Build QEMU in NetBSD VM"
 	@echo "  vm-build-openbsd                - Build QEMU in OpenBSD VM"
+	@echo "  vm-build-centos                 - Build QEMU in CentOS VM, with Docker"
 
 vm-build-all: $(addprefix vm-build-, $(IMAGES))
 
diff --git a/tests/vm/centos b/tests/vm/centos
new file mode 100755
index 0000000000..afd560c564
--- /dev/null
+++ b/tests/vm/centos
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+#
+# CentOS image
+#
+# Copyright 2018 Red Hat Inc.
+#
+# Authors:
+#  Fam Zheng <famz@redhat.com>
+#
+# This code is licensed under the GPL version 2 or later.  See
+# the COPYING file in the top-level directory.
+#
+
+import os
+import sys
+import subprocess
+import basevm
+import time
+
+class CentosVM(basevm.BaseVM):
+    name = "centos"
+    BUILD_SCRIPT = """
+        set -e;
+        cd $(mktemp -d);
+        export SRC_ARCHIVE=/dev/vdb;
+        sudo chmod a+r $SRC_ARCHIVE;
+        tar -xf $SRC_ARCHIVE;
+        make docker-test-block@centos7 V={verbose} J={jobs};
+        make docker-test-quick@centos7 V={verbose} J={jobs};
+        make docker-test-mingw@fedora V={verbose} J={jobs};
+    """
+
+    def _gen_cloud_init_iso(self):
+        cidir = self._tmpdir
+        mdata = open(os.path.join(cidir, "meta-data"), "w")
+        mdata.writelines(["instance-id: centos-vm-0\n",
+                          "local-hostname: centos-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,
+                          "locale: en_US.UTF-8\n"])
+        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.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.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(["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("yum update -y")
+        self.ssh_root_check("yum install -y docker make git")
+        self.ssh_root_check("systemctl enable docker")
+        self.ssh_root("poweroff")
+        self.wait()
+        if os.path.exists(img):
+            os.remove(img)
+        os.rename(img_tmp, img)
+        return 0
+
+if __name__ == "__main__":
+    sys.exit(basevm.main(CentosVM))
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests
  2018-07-12  1:28 [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Fam Zheng
                   ` (3 preceding siblings ...)
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing Fam Zheng
@ 2018-07-12 14:50 ` Philippe Mathieu-Daudé
  4 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-07-12 14:50 UTC (permalink / raw)
  To: Fam Zheng, qemu-devel; +Cc: Alex Bennée, pbonzini

On 07/11/2018 10:28 PM, Fam Zheng wrote:
> v3: Add 'make vm-test' document. [Phil]
> 
> v2: Drop archive-source.sh changes.
>     The new test depends on the iotests nbd fix I posted today to pass.
> 
> Docker testing on patchew has long suffered from 'make check' hangings. The
> cleanness of VM testing is the cure. Now let's add a CentOS 7 image to run the
> tests.  It's purely ad-hoc, but hopefully still easy to understand and use for
> everyone.
> 
> The first patch makes passing source code from host to the container in VM
> working, and is a nice clean up.
> 
> The second patch makes caches work, to speed up repetitive runs like on
> patchew.
> 
> The last patch adds the new image that does the job. Two out of three docker
> tests running on patchew.org are added to the image. I'll wait for Peter to fix
> the 'docker-test-quick@centos6' hanging (oob test) before adding it too.
> 
> Fam
> 
> Fam Zheng (4):
>   tests: Add an option for snapshot (default: off)
>   tests/vm: Pass verbose flag into VM make commands
>   tests: Allow overriding archive path with SRC_ARCHIVE
>   tests: Add centos VM testing

Series:
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> 
>  tests/docker/Makefile.include |  7 ++-
>  tests/vm/Makefile.include     |  3 +-
>  tests/vm/basevm.py            | 10 ++++-
>  tests/vm/centos               | 84 +++++++++++++++++++++++++++++++++++
>  tests/vm/freebsd              |  4 +-
>  tests/vm/netbsd               |  4 +-
>  tests/vm/openbsd              |  4 +-
>  tests/vm/ubuntu.i386          |  4 +-
>  8 files changed, 107 insertions(+), 13 deletions(-)
>  create mode 100755 tests/vm/centos
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing Fam Zheng
@ 2018-07-12 15:02   ` Philippe Mathieu-Daudé
  2018-07-13  7:18     ` Fam Zheng
  2018-07-16  1:34   ` Philippe Mathieu-Daudé
  1 sibling, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-07-12 15:02 UTC (permalink / raw)
  To: Fam Zheng, qemu-devel; +Cc: pbonzini, Alex Bennée

Hi Fam,

On 07/11/2018 10:28 PM, Fam Zheng wrote:
> This one does docker testing in the VM. It is intended to replace the
> native docker testing on patchew testers.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  tests/vm/Makefile.include |  3 +-
>  tests/vm/centos           | 84 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 86 insertions(+), 1 deletion(-)
>  create mode 100755 tests/vm/centos
> 
> diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
> index 5daa2a3b73..af19b7a4e6 100644
> --- a/tests/vm/Makefile.include
> +++ b/tests/vm/Makefile.include
> @@ -2,7 +2,7 @@
>  
>  .PHONY: vm-build-all
>  
> -IMAGES := ubuntu.i386 freebsd netbsd openbsd
> +IMAGES := ubuntu.i386 freebsd netbsd openbsd centos
>  IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
>  
>  .PRECIOUS: $(IMAGE_FILES)
> @@ -14,6 +14,7 @@ vm-test:
>  	@echo "  vm-build-freebsd                - Build QEMU in FreeBSD VM"
>  	@echo "  vm-build-netbsd                 - Build QEMU in NetBSD VM"
>  	@echo "  vm-build-openbsd                - Build QEMU in OpenBSD VM"
> +	@echo "  vm-build-centos                 - Build QEMU in CentOS VM, with Docker"
>  
>  vm-build-all: $(addprefix vm-build-, $(IMAGES))
>  
> diff --git a/tests/vm/centos b/tests/vm/centos
> new file mode 100755
> index 0000000000..afd560c564
> --- /dev/null
> +++ b/tests/vm/centos
> @@ -0,0 +1,84 @@
> +#!/usr/bin/env python
> +#
> +# CentOS image
> +#
> +# Copyright 2018 Red Hat Inc.
> +#
> +# Authors:
> +#  Fam Zheng <famz@redhat.com>
> +#
> +# This code is licensed under the GPL version 2 or later.  See
> +# the COPYING file in the top-level directory.
> +#
> +
> +import os
> +import sys
> +import subprocess
> +import basevm
> +import time
> +
> +class CentosVM(basevm.BaseVM):
> +    name = "centos"
> +    BUILD_SCRIPT = """
> +        set -e;
> +        cd $(mktemp -d);
> +        export SRC_ARCHIVE=/dev/vdb;
> +        sudo chmod a+r $SRC_ARCHIVE;
> +        tar -xf $SRC_ARCHIVE;
> +        make docker-test-block@centos7 V={verbose} J={jobs};
> +        make docker-test-quick@centos7 V={verbose} J={jobs};
> +        make docker-test-mingw@fedora V={verbose} J={jobs};
> +    """
> +
> +    def _gen_cloud_init_iso(self):
> +        cidir = self._tmpdir
> +        mdata = open(os.path.join(cidir, "meta-data"), "w")
> +        mdata.writelines(["instance-id: centos-vm-0\n",
> +                          "local-hostname: centos-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,
> +                          "locale: en_US.UTF-8\n"])
> +        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.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.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(["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")

Here I had to add:

  for k, v in os.environ.iteritems():
      if k.lower() == "http_proxy":
          self.ssh_root_check("echo 'proxy=" + v + "' >> /etc/yum.conf")

I understood we will fix this corporate firewall issue later in basevm,
still I couldn't test your series without.

> +        self.ssh_root_check("yum update -y")
> +        self.ssh_root_check("yum install -y docker make git")
> +        self.ssh_root_check("systemctl enable docker")
> +        self.ssh_root("poweroff")
> +        self.wait()
> +        if os.path.exists(img):
> +            os.remove(img)
> +        os.rename(img_tmp, img)
> +        return 0
> +
> +if __name__ == "__main__":
> +    sys.exit(basevm.main(CentosVM))
> 

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing
  2018-07-12 15:02   ` Philippe Mathieu-Daudé
@ 2018-07-13  7:18     ` Fam Zheng
  2018-07-16  1:41       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 12+ messages in thread
From: Fam Zheng @ 2018-07-13  7:18 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé; +Cc: qemu-devel, pbonzini, Alex Bennée

On Thu, 07/12 12:02, Philippe Mathieu-Daudé wrote:
> Hi Fam,
> 
> On 07/11/2018 10:28 PM, Fam Zheng wrote:
> > This one does docker testing in the VM. It is intended to replace the
> > native docker testing on patchew testers.
> > 
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> >  tests/vm/Makefile.include |  3 +-
> >  tests/vm/centos           | 84 +++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 86 insertions(+), 1 deletion(-)
> >  create mode 100755 tests/vm/centos
> > 
> > diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
> > index 5daa2a3b73..af19b7a4e6 100644
> > --- a/tests/vm/Makefile.include
> > +++ b/tests/vm/Makefile.include
> > @@ -2,7 +2,7 @@
> >  
> >  .PHONY: vm-build-all
> >  
> > -IMAGES := ubuntu.i386 freebsd netbsd openbsd
> > +IMAGES := ubuntu.i386 freebsd netbsd openbsd centos
> >  IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
> >  
> >  .PRECIOUS: $(IMAGE_FILES)
> > @@ -14,6 +14,7 @@ vm-test:
> >  	@echo "  vm-build-freebsd                - Build QEMU in FreeBSD VM"
> >  	@echo "  vm-build-netbsd                 - Build QEMU in NetBSD VM"
> >  	@echo "  vm-build-openbsd                - Build QEMU in OpenBSD VM"
> > +	@echo "  vm-build-centos                 - Build QEMU in CentOS VM, with Docker"
> >  
> >  vm-build-all: $(addprefix vm-build-, $(IMAGES))
> >  
> > diff --git a/tests/vm/centos b/tests/vm/centos
> > new file mode 100755
> > index 0000000000..afd560c564
> > --- /dev/null
> > +++ b/tests/vm/centos
> > @@ -0,0 +1,84 @@
> > +#!/usr/bin/env python
> > +#
> > +# CentOS image
> > +#
> > +# Copyright 2018 Red Hat Inc.
> > +#
> > +# Authors:
> > +#  Fam Zheng <famz@redhat.com>
> > +#
> > +# This code is licensed under the GPL version 2 or later.  See
> > +# the COPYING file in the top-level directory.
> > +#
> > +
> > +import os
> > +import sys
> > +import subprocess
> > +import basevm
> > +import time
> > +
> > +class CentosVM(basevm.BaseVM):
> > +    name = "centos"
> > +    BUILD_SCRIPT = """
> > +        set -e;
> > +        cd $(mktemp -d);
> > +        export SRC_ARCHIVE=/dev/vdb;
> > +        sudo chmod a+r $SRC_ARCHIVE;
> > +        tar -xf $SRC_ARCHIVE;
> > +        make docker-test-block@centos7 V={verbose} J={jobs};
> > +        make docker-test-quick@centos7 V={verbose} J={jobs};
> > +        make docker-test-mingw@fedora V={verbose} J={jobs};
> > +    """
> > +
> > +    def _gen_cloud_init_iso(self):
> > +        cidir = self._tmpdir
> > +        mdata = open(os.path.join(cidir, "meta-data"), "w")
> > +        mdata.writelines(["instance-id: centos-vm-0\n",
> > +                          "local-hostname: centos-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,
> > +                          "locale: en_US.UTF-8\n"])
> > +        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.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.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(["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")
> 
> Here I had to add:
> 
>   for k, v in os.environ.iteritems():
>       if k.lower() == "http_proxy":
>           self.ssh_root_check("echo 'proxy=" + v + "' >> /etc/yum.conf")
> 
> I understood we will fix this corporate firewall issue later in basevm,
> still I couldn't test your series without.

Could you test this patch?

diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 25361c6b7d..4bc1a657d3 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -106,7 +106,10 @@ class BaseVM(object):
         if interactive:
             ssh_cmd += ['-t']
         assert not isinstance(cmd, str)
-        ssh_cmd += ["%s@127.0.0.1" % user] + list(cmd)
+        env_names = ['ftp_proxy', 'http_proxy', 'https_proxy']
+        envs = ["%s=%s" % (k, v) for k, v in os.environ.items() \
+                if k.lower() in env_names]
+        ssh_cmd += ["%s@127.0.0.1" % user] + envs + list(cmd)
         logging.debug("ssh_cmd: %s", " ".join(ssh_cmd))
         r = subprocess.call(ssh_cmd)
         if check and r != 0:

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing
  2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing Fam Zheng
  2018-07-12 15:02   ` Philippe Mathieu-Daudé
@ 2018-07-16  1:34   ` Philippe Mathieu-Daudé
  2018-07-16  2:10     ` Fam Zheng
  1 sibling, 1 reply; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-07-16  1:34 UTC (permalink / raw)
  To: Fam Zheng, qemu-devel; +Cc: pbonzini, Alex Bennée

Hi Fam,

On 07/11/2018 10:28 PM, Fam Zheng wrote:
> This one does docker testing in the VM. It is intended to replace the
> native docker testing on patchew testers.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  tests/vm/Makefile.include |  3 +-
>  tests/vm/centos           | 84 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 86 insertions(+), 1 deletion(-)
>  create mode 100755 tests/vm/centos
> 
> diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
> index 5daa2a3b73..af19b7a4e6 100644
> --- a/tests/vm/Makefile.include
> +++ b/tests/vm/Makefile.include
> @@ -2,7 +2,7 @@
>  
>  .PHONY: vm-build-all

Can we have a vm-clean-all rule too?

>  
> -IMAGES := ubuntu.i386 freebsd netbsd openbsd
> +IMAGES := ubuntu.i386 freebsd netbsd openbsd centos
>  IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
>  
>  .PRECIOUS: $(IMAGE_FILES)
> @@ -14,6 +14,7 @@ vm-test:
>  	@echo "  vm-build-freebsd                - Build QEMU in FreeBSD VM"
>  	@echo "  vm-build-netbsd                 - Build QEMU in NetBSD VM"
>  	@echo "  vm-build-openbsd                - Build QEMU in OpenBSD VM"
> +	@echo "  vm-build-centos                 - Build QEMU in CentOS VM, with Docker"
>  
>  vm-build-all: $(addprefix vm-build-, $(IMAGES))
>  
> diff --git a/tests/vm/centos b/tests/vm/centos
> new file mode 100755
> index 0000000000..afd560c564
> --- /dev/null
> +++ b/tests/vm/centos
> @@ -0,0 +1,84 @@
> +#!/usr/bin/env python
> +#
> +# CentOS image
> +#
> +# Copyright 2018 Red Hat Inc.
> +#
> +# Authors:
> +#  Fam Zheng <famz@redhat.com>
> +#
> +# This code is licensed under the GPL version 2 or later.  See
> +# the COPYING file in the top-level directory.
> +#
> +
> +import os
> +import sys
> +import subprocess
> +import basevm
> +import time
> +
> +class CentosVM(basevm.BaseVM):
> +    name = "centos"
> +    BUILD_SCRIPT = """
> +        set -e;
> +        cd $(mktemp -d);
> +        export SRC_ARCHIVE=/dev/vdb;
> +        sudo chmod a+r $SRC_ARCHIVE;
> +        tar -xf $SRC_ARCHIVE;
> +        make docker-test-block@centos7 V={verbose} J={jobs};
> +        make docker-test-quick@centos7 V={verbose} J={jobs};
> +        make docker-test-mingw@fedora V={verbose} J={jobs};
> +    """
> +
> +    def _gen_cloud_init_iso(self):
> +        cidir = self._tmpdir
> +        mdata = open(os.path.join(cidir, "meta-data"), "w")
> +        mdata.writelines(["instance-id: centos-vm-0\n",
> +                          "local-hostname: centos-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,
> +                          "locale: en_US.UTF-8\n"])
> +        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.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.xz")
> +        img_tmp = img + ".tmp"
> +        subprocess.check_call(["cp", "-f", cimg, img_tmp + ".xz"])
> +        subprocess.check_call(["xz", "-df", img_tmp + ".xz"])

Not related to this patch, but I noticed when building out-of-tree (i.e.
different ./configure options, or applying on different branches) we
create the vm image in each out-of-tree directory, and never clean them
(I ran out of disk space).

Since we use the same vm image, shouldn't we use the cache dir to store it?

> +        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("yum update -y")
> +        self.ssh_root_check("yum install -y docker make git")
> +        self.ssh_root_check("systemctl enable docker")
> +        self.ssh_root("poweroff")
> +        self.wait()
> +        if os.path.exists(img):
> +            os.remove(img)
> +        os.rename(img_tmp, img)
> +        return 0
> +
> +if __name__ == "__main__":
> +    sys.exit(basevm.main(CentosVM))
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing
  2018-07-13  7:18     ` Fam Zheng
@ 2018-07-16  1:41       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-07-16  1:41 UTC (permalink / raw)
  To: Fam Zheng; +Cc: qemu-devel, pbonzini, Alex Bennée

Hi Fam,

On 07/13/2018 04:18 AM, Fam Zheng wrote:
> On Thu, 07/12 12:02, Philippe Mathieu-Daudé wrote:
>> Hi Fam,
>>
>> On 07/11/2018 10:28 PM, Fam Zheng wrote:
>>> This one does docker testing in the VM. It is intended to replace the
>>> native docker testing on patchew testers.
>>>
>>> Signed-off-by: Fam Zheng <famz@redhat.com>
>>> ---
>>>  tests/vm/Makefile.include |  3 +-
>>>  tests/vm/centos           | 84 +++++++++++++++++++++++++++++++++++++++
>>>  2 files changed, 86 insertions(+), 1 deletion(-)
>>>  create mode 100755 tests/vm/centos
>>>
>>> diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
>>> index 5daa2a3b73..af19b7a4e6 100644
>>> --- a/tests/vm/Makefile.include
>>> +++ b/tests/vm/Makefile.include
>>> @@ -2,7 +2,7 @@
>>>  
>>>  .PHONY: vm-build-all
>>>  
>>> -IMAGES := ubuntu.i386 freebsd netbsd openbsd
>>> +IMAGES := ubuntu.i386 freebsd netbsd openbsd centos
>>>  IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
>>>  
>>>  .PRECIOUS: $(IMAGE_FILES)
>>> @@ -14,6 +14,7 @@ vm-test:
>>>  	@echo "  vm-build-freebsd                - Build QEMU in FreeBSD VM"
>>>  	@echo "  vm-build-netbsd                 - Build QEMU in NetBSD VM"
>>>  	@echo "  vm-build-openbsd                - Build QEMU in OpenBSD VM"
>>> +	@echo "  vm-build-centos                 - Build QEMU in CentOS VM, with Docker"
>>>  
>>>  vm-build-all: $(addprefix vm-build-, $(IMAGES))
>>>  
>>> diff --git a/tests/vm/centos b/tests/vm/centos
>>> new file mode 100755
>>> index 0000000000..afd560c564
>>> --- /dev/null
>>> +++ b/tests/vm/centos
>>> @@ -0,0 +1,84 @@
>>> +#!/usr/bin/env python
>>> +#
>>> +# CentOS image
>>> +#
>>> +# Copyright 2018 Red Hat Inc.
>>> +#
>>> +# Authors:
>>> +#  Fam Zheng <famz@redhat.com>
>>> +#
>>> +# This code is licensed under the GPL version 2 or later.  See
>>> +# the COPYING file in the top-level directory.
>>> +#
>>> +
>>> +import os
>>> +import sys
>>> +import subprocess
>>> +import basevm
>>> +import time
>>> +
>>> +class CentosVM(basevm.BaseVM):
>>> +    name = "centos"
>>> +    BUILD_SCRIPT = """
>>> +        set -e;
>>> +        cd $(mktemp -d);
>>> +        export SRC_ARCHIVE=/dev/vdb;
>>> +        sudo chmod a+r $SRC_ARCHIVE;
>>> +        tar -xf $SRC_ARCHIVE;
>>> +        make docker-test-block@centos7 V={verbose} J={jobs};
>>> +        make docker-test-quick@centos7 V={verbose} J={jobs};
>>> +        make docker-test-mingw@fedora V={verbose} J={jobs};
>>> +    """
>>> +
>>> +    def _gen_cloud_init_iso(self):
>>> +        cidir = self._tmpdir
>>> +        mdata = open(os.path.join(cidir, "meta-data"), "w")
>>> +        mdata.writelines(["instance-id: centos-vm-0\n",
>>> +                          "local-hostname: centos-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,
>>> +                          "locale: en_US.UTF-8\n"])
>>> +        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.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.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(["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")
>>
>> Here I had to add:
>>
>>   for k, v in os.environ.iteritems():
>>       if k.lower() == "http_proxy":
>>           self.ssh_root_check("echo 'proxy=" + v + "' >> /etc/yum.conf")
>>
>> I understood we will fix this corporate firewall issue later in basevm,
>> still I couldn't test your series without.
> 
> Could you test this patch?
> 
> diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
> index 25361c6b7d..4bc1a657d3 100755
> --- a/tests/vm/basevm.py
> +++ b/tests/vm/basevm.py
> @@ -106,7 +106,10 @@ class BaseVM(object):
>          if interactive:
>              ssh_cmd += ['-t']
>          assert not isinstance(cmd, str)
> -        ssh_cmd += ["%s@127.0.0.1" % user] + list(cmd)
> +        env_names = ['ftp_proxy', 'http_proxy', 'https_proxy']
> +        envs = ["%s=%s" % (k, v) for k, v in os.environ.items() \
> +                if k.lower() in env_names]
> +        ssh_cmd += ["%s@127.0.0.1" % user] + envs + list(cmd)
>          logging.debug("ssh_cmd: %s", " ".join(ssh_cmd))
>          r = subprocess.call(ssh_cmd)
>          if check and r != 0:
> 

Apparently neither yum nor apt uses these environment variables.
This seems to be a security feature, only a power-user can edit the
configuration file.

Your patch should help user command such git or curl, but I didn't
notice problem with git because the archive-source.sh script already
provides the vm with the git submodule, so the vm's git doesn't access
the network.

Regards,

Phil.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing
  2018-07-16  1:34   ` Philippe Mathieu-Daudé
@ 2018-07-16  2:10     ` Fam Zheng
  2018-07-17  1:09       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 12+ messages in thread
From: Fam Zheng @ 2018-07-16  2:10 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé; +Cc: qemu-devel, pbonzini, Alex Bennée

On Sun, 07/15 22:34, Philippe Mathieu-Daudé wrote:
> Hi Fam,
> 
> On 07/11/2018 10:28 PM, Fam Zheng wrote:
> > This one does docker testing in the VM. It is intended to replace the
> > native docker testing on patchew testers.
> > 
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> >  tests/vm/Makefile.include |  3 +-
> >  tests/vm/centos           | 84 +++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 86 insertions(+), 1 deletion(-)
> >  create mode 100755 tests/vm/centos
> > 
> > diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
> > index 5daa2a3b73..af19b7a4e6 100644
> > --- a/tests/vm/Makefile.include
> > +++ b/tests/vm/Makefile.include
> > @@ -2,7 +2,7 @@
> >  
> >  .PHONY: vm-build-all
> 
> Can we have a vm-clean-all rule too?

Yes, sure!

> 
> >  
> > -IMAGES := ubuntu.i386 freebsd netbsd openbsd
> > +IMAGES := ubuntu.i386 freebsd netbsd openbsd centos
> >  IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
> >  
> >  .PRECIOUS: $(IMAGE_FILES)
> > @@ -14,6 +14,7 @@ vm-test:
> >  	@echo "  vm-build-freebsd                - Build QEMU in FreeBSD VM"
> >  	@echo "  vm-build-netbsd                 - Build QEMU in NetBSD VM"
> >  	@echo "  vm-build-openbsd                - Build QEMU in OpenBSD VM"
> > +	@echo "  vm-build-centos                 - Build QEMU in CentOS VM, with Docker"
> >  
> >  vm-build-all: $(addprefix vm-build-, $(IMAGES))
> >  
> > diff --git a/tests/vm/centos b/tests/vm/centos
> > new file mode 100755
> > index 0000000000..afd560c564
> > --- /dev/null
> > +++ b/tests/vm/centos
> > @@ -0,0 +1,84 @@
> > +#!/usr/bin/env python
> > +#
> > +# CentOS image
> > +#
> > +# Copyright 2018 Red Hat Inc.
> > +#
> > +# Authors:
> > +#  Fam Zheng <famz@redhat.com>
> > +#
> > +# This code is licensed under the GPL version 2 or later.  See
> > +# the COPYING file in the top-level directory.
> > +#
> > +
> > +import os
> > +import sys
> > +import subprocess
> > +import basevm
> > +import time
> > +
> > +class CentosVM(basevm.BaseVM):
> > +    name = "centos"
> > +    BUILD_SCRIPT = """
> > +        set -e;
> > +        cd $(mktemp -d);
> > +        export SRC_ARCHIVE=/dev/vdb;
> > +        sudo chmod a+r $SRC_ARCHIVE;
> > +        tar -xf $SRC_ARCHIVE;
> > +        make docker-test-block@centos7 V={verbose} J={jobs};
> > +        make docker-test-quick@centos7 V={verbose} J={jobs};
> > +        make docker-test-mingw@fedora V={verbose} J={jobs};
> > +    """
> > +
> > +    def _gen_cloud_init_iso(self):
> > +        cidir = self._tmpdir
> > +        mdata = open(os.path.join(cidir, "meta-data"), "w")
> > +        mdata.writelines(["instance-id: centos-vm-0\n",
> > +                          "local-hostname: centos-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,
> > +                          "locale: en_US.UTF-8\n"])
> > +        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.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.xz")
> > +        img_tmp = img + ".tmp"
> > +        subprocess.check_call(["cp", "-f", cimg, img_tmp + ".xz"])
> > +        subprocess.check_call(["xz", "-df", img_tmp + ".xz"])
> 
> Not related to this patch, but I noticed when building out-of-tree (i.e.
> different ./configure options, or applying on different branches) we
> create the vm image in each out-of-tree directory, and never clean them
> (I ran out of disk space).

Buy more disks. :)

The image files are added as .PRECIOUS: targets. Cleaning them up from Makefile
automatically is the opposite of it.

> 
> Since we use the same vm image, shouldn't we use the cache dir to store it?

Each has pros and cons. I think using the cache dir makes it behave more like
Docker images where you have a global one and switching git branches or repos
may result in a rebuild. Docker has the checksum so even after you touch the
Dockerfile, it knows NOT to rebuild the Docker image if the definition hasn't
changed. In VM tests we don't have that, so I'm expecting more image rebuilds
than necessary can happen and it's a waste of time.

I use in-tree make for VM and Docker tests, and one out-of-tree for building
QEMU. I think the point of having multiple out-of-tree dir is to have multiple
copies of whatever artifacts the source tree creates, no?

> 
> > +        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("yum update -y")
> > +        self.ssh_root_check("yum install -y docker make git")
> > +        self.ssh_root_check("systemctl enable docker")
> > +        self.ssh_root("poweroff")
> > +        self.wait()
> > +        if os.path.exists(img):
> > +            os.remove(img)
> > +        os.rename(img_tmp, img)
> > +        return 0
> > +
> > +if __name__ == "__main__":
> > +    sys.exit(basevm.main(CentosVM))
> > 

Fam

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing
  2018-07-16  2:10     ` Fam Zheng
@ 2018-07-17  1:09       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 12+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-07-17  1:09 UTC (permalink / raw)
  To: Fam Zheng, Alex Bennée, Daniel P. Berrange; +Cc: qemu-devel, pbonzini

On 07/15/2018 11:10 PM, Fam Zheng wrote:
> On Sun, 07/15 22:34, Philippe Mathieu-Daudé wrote:
>> On 07/11/2018 10:28 PM, Fam Zheng wrote:
>>> This one does docker testing in the VM. It is intended to replace the
>>> native docker testing on patchew testers.
>>>
>>> Signed-off-by: Fam Zheng <famz@redhat.com>
>>> ---
>>>  tests/vm/Makefile.include |  3 +-
>>>  tests/vm/centos           | 84 +++++++++++++++++++++++++++++++++++++++
>>>  2 files changed, 86 insertions(+), 1 deletion(-)
>>>  create mode 100755 tests/vm/centos
>>>
>>> diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
>>> index 5daa2a3b73..af19b7a4e6 100644
>>> --- a/tests/vm/Makefile.include
>>> +++ b/tests/vm/Makefile.include
>>> @@ -2,7 +2,7 @@
>>>  
>>>  .PHONY: vm-build-all
>>
>> Can we have a vm-clean-all rule too?
> 
> Yes, sure!
> 
>>
>>>  
>>> -IMAGES := ubuntu.i386 freebsd netbsd openbsd
>>> +IMAGES := ubuntu.i386 freebsd netbsd openbsd centos
>>>  IMAGE_FILES := $(patsubst %, tests/vm/%.img, $(IMAGES))
>>>  
>>>  .PRECIOUS: $(IMAGE_FILES)
>>> @@ -14,6 +14,7 @@ vm-test:
>>>  	@echo "  vm-build-freebsd                - Build QEMU in FreeBSD VM"
>>>  	@echo "  vm-build-netbsd                 - Build QEMU in NetBSD VM"
>>>  	@echo "  vm-build-openbsd                - Build QEMU in OpenBSD VM"
>>> +	@echo "  vm-build-centos                 - Build QEMU in CentOS VM, with Docker"
>>>  
>>>  vm-build-all: $(addprefix vm-build-, $(IMAGES))
>>>  
>>> diff --git a/tests/vm/centos b/tests/vm/centos
>>> new file mode 100755
>>> index 0000000000..afd560c564
>>> --- /dev/null
>>> +++ b/tests/vm/centos
>>> @@ -0,0 +1,84 @@
>>> +#!/usr/bin/env python
>>> +#
>>> +# CentOS image
>>> +#
>>> +# Copyright 2018 Red Hat Inc.
>>> +#
>>> +# Authors:
>>> +#  Fam Zheng <famz@redhat.com>
>>> +#
>>> +# This code is licensed under the GPL version 2 or later.  See
>>> +# the COPYING file in the top-level directory.
>>> +#
>>> +
>>> +import os
>>> +import sys
>>> +import subprocess
>>> +import basevm
>>> +import time
>>> +
>>> +class CentosVM(basevm.BaseVM):
>>> +    name = "centos"
>>> +    BUILD_SCRIPT = """
>>> +        set -e;
>>> +        cd $(mktemp -d);
>>> +        export SRC_ARCHIVE=/dev/vdb;
>>> +        sudo chmod a+r $SRC_ARCHIVE;
>>> +        tar -xf $SRC_ARCHIVE;
>>> +        make docker-test-block@centos7 V={verbose} J={jobs};
>>> +        make docker-test-quick@centos7 V={verbose} J={jobs};
>>> +        make docker-test-mingw@fedora V={verbose} J={jobs};
>>> +    """
>>> +
>>> +    def _gen_cloud_init_iso(self):
>>> +        cidir = self._tmpdir
>>> +        mdata = open(os.path.join(cidir, "meta-data"), "w")
>>> +        mdata.writelines(["instance-id: centos-vm-0\n",
>>> +                          "local-hostname: centos-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,
>>> +                          "locale: en_US.UTF-8\n"])
>>> +        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.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.xz")
>>> +        img_tmp = img + ".tmp"
>>> +        subprocess.check_call(["cp", "-f", cimg, img_tmp + ".xz"])
>>> +        subprocess.check_call(["xz", "-df", img_tmp + ".xz"])
>>
>> Not related to this patch, but I noticed when building out-of-tree (i.e.
>> different ./configure options, or applying on different branches) we
>> create the vm image in each out-of-tree directory, and never clean them
>> (I ran out of disk space).
> 
> Buy more disks. :)
> 
> The image files are added as .PRECIOUS: targets. Cleaning them up from Makefile
> automatically is the opposite of it.
> 
>>
>> Since we use the same vm image, shouldn't we use the cache dir to store it?
> 
> Each has pros and cons. I think using the cache dir makes it behave more like
> Docker images where you have a global one and switching git branches or repos
> may result in a rebuild. Docker has the checksum so even after you touch the
> Dockerfile, it knows NOT to rebuild the Docker image if the definition hasn't
> changed. In VM tests we don't have that, so I'm expecting more image rebuilds
> than necessary can happen and it's a waste of time.
> 
> I use in-tree make for VM and Docker tests, and one out-of-tree for building
> QEMU. I think the point of having multiple out-of-tree dir is to have multiple
> copies of whatever artifacts the source tree creates, no?

Yes, you are correct, there is no point in running out-of-tree VM tests,
since the archive-source.sh script provides a clean snapshot of the
tree, out-of-tree configs are irrelevant.

Docker tests already take benefit of out-of-tree builds.

So the only problem I see here is if the tree is read-only (see
96089f6d0e88), which we can fix later if someone ever complains.

>>
>>> +        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("yum update -y")
>>> +        self.ssh_root_check("yum install -y docker make git")
>>> +        self.ssh_root_check("systemctl enable docker")
>>> +        self.ssh_root("poweroff")
>>> +        self.wait()
>>> +        if os.path.exists(img):
>>> +            os.remove(img)
>>> +        os.rename(img_tmp, img)
>>> +        return 0
>>> +
>>> +if __name__ == "__main__":
>>> +    sys.exit(basevm.main(CentosVM))
>>>

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2018-07-17  1:10 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-12  1:28 [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Fam Zheng
2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 1/4] tests: Add an option for snapshot (default: off) Fam Zheng
2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 2/4] tests/vm: Pass verbose flag into VM make commands Fam Zheng
2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 3/4] tests: Allow overriding archive path with SRC_ARCHIVE Fam Zheng
2018-07-12  1:28 ` [Qemu-devel] [PATCH v3 4/4] tests: Add centos VM testing Fam Zheng
2018-07-12 15:02   ` Philippe Mathieu-Daudé
2018-07-13  7:18     ` Fam Zheng
2018-07-16  1:41       ` Philippe Mathieu-Daudé
2018-07-16  1:34   ` Philippe Mathieu-Daudé
2018-07-16  2:10     ` Fam Zheng
2018-07-17  1:09       ` Philippe Mathieu-Daudé
2018-07-12 14:50 ` [Qemu-devel] [PATCH v3 0/4] Add a CentOS test image to run docker tests Philippe Mathieu-Daudé

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.