qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: qemu-devel@nongnu.org
Cc: berrange@redhat.com, "Alex Bennée" <alex.bennee@linaro.org>,
	"Fam Zheng" <famz@redhat.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	pbonzini@redhat.com, stefanha@redhat.com,
	"Cleber Rosa" <crosa@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	eblake@redhat.com, "Kamil Rytarowski" <kamil@netbsd.org>
Subject: [Qemu-devel] [PATCH v8 06/13] tests: Add ubuntu.i386 image
Date: Mon, 18 Sep 2017 10:43:55 +0800	[thread overview]
Message-ID: <20170918024402.3265-7-famz@redhat.com> (raw)
In-Reply-To: <20170918024402.3265-1-famz@redhat.com>

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..e70dcb89ce
--- /dev/null
+++ b/tests/vm/ubuntu.i386
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+#
+# Ubuntu i386 image
+#
+# Copyright 2017 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 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()
+        if os.path.exists(img):
+            os.remove(img)
+        os.rename(img_tmp, img)
+        return 0
+
+if __name__ == "__main__":
+    sys.exit(basevm.main(UbuntuX86VM))
-- 
2.13.5

  parent reply	other threads:[~2017-09-18  2:44 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-18  2:43 [Qemu-devel] [PATCH v8 00/13] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 01/13] gitignore: Ignore vm test images Fam Zheng
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 02/13] qemu.py: Add "wait()" method Fam Zheng
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 03/13] scripts: Add archive-source.sh Fam Zheng
2017-09-18  9:26   ` Alex Bennée
2017-09-18 15:14   ` Eric Blake
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 04/13] tests: Add a test key pair Fam Zheng
2017-09-18 15:17   ` Eric Blake
2017-09-19  2:10     ` Fam Zheng
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 05/13] tests: Add vm test lib Fam Zheng
2017-09-18 10:14   ` Alex Bennée
2017-09-18  2:43 ` Fam Zheng [this message]
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 07/13] tests: Add FreeBSD image Fam Zheng
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 08/13] tests: Add NetBSD image Fam Zheng
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 09/13] tests: Add OpenBSD image Fam Zheng
2017-09-18  2:43 ` [Qemu-devel] [PATCH v8 10/13] Makefile: Add rules to run vm tests Fam Zheng
2017-09-18 11:42   ` Alex Bennée
2017-09-18  2:44 ` [Qemu-devel] [PATCH v8 11/13] MAINTAINERS: Add tests/vm entry Fam Zheng
2017-09-18  2:44 ` [Qemu-devel] [PATCH v8 12/13] tests: Add README for vm tests Fam Zheng
2017-09-18  9:43   ` Alex Bennée
2017-09-18 12:03     ` Fam Zheng
2017-09-18 15:20   ` Eric Blake
2017-09-18  2:44 ` [Qemu-devel] [PATCH v8 13/13] docker: Use archive-source.py Fam Zheng
2017-09-18  9:29   ` Alex Bennée
2017-09-18  3:09 ` [Qemu-devel] [PATCH v8 00/13] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170918024402.3265-7-famz@redhat.com \
    --to=famz@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=berrange@redhat.com \
    --cc=crosa@redhat.com \
    --cc=eblake@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=kamil@netbsd.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).