All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kamil Rytarowski <n54@gmx.com>
To: "Alex Bennée" <alex.bennee@linaro.org>,
	"Gerd Hoffmann" <kraxel@redhat.com>
Cc: "Fam Zheng" <fam@euphon.net>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Ed Maste" <emaste@freebsd.org>,
	qemu-devel@nongnu.org, "Kamil Rytarowski" <kamil@netbsd.org>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Li-Wen Hsu" <lwhsu@freebsd.org>,
	"Brad Smith" <brad@comstyle.com>
Subject: Re: [Qemu-devel] [PATCH v4 09/11] tests/vm: netbsd autoinstall, using serial console
Date: Fri, 5 Jul 2019 12:43:06 +0200	[thread overview]
Message-ID: <5d0e35f4-964e-e6e0-d644-ea19fc9cd029@gmx.com> (raw)
In-Reply-To: <87zhlsvkx1.fsf@zen.linaroharston>


[-- Attachment #1.1: Type: text/plain, Size: 10505 bytes --]

On 05.07.2019 12:24, Alex Bennée wrote:
> 
> Gerd Hoffmann <kraxel@redhat.com> writes:
> 
>> Instead of fetching the prebuilt image from patchew download the install
>> iso and prepare the image locally.  Install to disk, using the serial
>> console.  Create qemu user, configure ssh login.  Install packages
>> needed for qemu builds.
> 
> I've had to drop this from my v3 PR as Peter was seeing a very
> slow/hanging install when running his merge tests. I've tried to
> reproduce and I see it stall while installing packages but nowhere near
> the delay Peter has seen.
> 
> Any pointers on how to debug gratefully received.
> 

Does it use virtio? There were performance issues with virio disk device.

>>
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>> Reviewed-by: Kamil Rytarowski <n54@gmx.com>
>> Tested-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  tests/vm/netbsd | 187 +++++++++++++++++++++++++++++++++++++++++++++---
>>  1 file changed, 177 insertions(+), 10 deletions(-)
>>
>> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
>> index 4c6624ea5ed5..be59a2c1da1d 100755
>> --- a/tests/vm/netbsd
>> +++ b/tests/vm/netbsd
>> @@ -2,10 +2,11 @@
>>  #
>>  # NetBSD VM image
>>  #
>> -# Copyright 2017 Red Hat Inc.
>> +# Copyright 2017-2019 Red Hat Inc.
>>  #
>>  # Authors:
>>  #  Fam Zheng <famz@redhat.com>
>> +#  Gerd Hoffmann <kraxel@redhat.com>
>>  #
>>  # This code is licensed under the GPL version 2 or later.  See
>>  # the COPYING file in the top-level directory.
>> @@ -13,32 +14,198 @@
>>
>>  import os
>>  import sys
>> +import time
>>  import subprocess
>>  import basevm
>>
>>  class NetBSDVM(basevm.BaseVM):
>>      name = "netbsd"
>>      arch = "x86_64"
>> +
>> +    link = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.0/images/NetBSD-8.0-amd64.iso"
>> +    size = "20G"
>> +    pkgs = [
>> +        # tools
>> +        "git-base",
>> +        "pkgconf",
>> +        "xz",
>> +        "python37",
>> +
>> +        # gnu tools
>> +        "bash",
>> +        "gmake",
>> +        "gsed",
>> +        "flex", "bison",
>> +
>> +        # libs: crypto
>> +        "gnutls",
>> +
>> +        # libs: images
>> +        "jpeg",
>> +        "png",
>> +
>> +	# libs: ui
>> +        "SDL2",
>> +        "gtk3+",
>> +        "libxkbcommon",
>> +    ]
>> +
>>      BUILD_SCRIPT = """
>>          set -e;
>> -        rm -rf /var/tmp/qemu-test.*
>> -        cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
>> +        rm -rf /home/qemu/qemu-test.*
>> +        cd $(mktemp -d /home/qemu/qemu-test.XXXXXX);
>> +        mkdir src build; cd src;
>>          tar -xf /dev/rld1a;
>> -        ./configure --python=python2.7 {configure_opts};
>> +        cd ../build
>> +        ../src/configure --python=python3.7 --disable-opengl {configure_opts};
>>          gmake --output-sync -j{jobs} {target} {verbose};
>>      """
>> +    poweroff = "/sbin/poweroff"
>>
>>      def build_image(self, img):
>> -        cimg = self._download_with_cache("http://download.patchew.org/netbsd-7.1-amd64.img.xz",
>> -                                         sha256sum='b633d565b0eac3d02015cd0c81440bd8a7a8df8512615ac1ee05d318be015732')
>> -        img_tmp_xz = img + ".tmp.xz"
>> +        cimg = self._download_with_cache(self.link)
>>          img_tmp = img + ".tmp"
>> -        sys.stderr.write("Extracting the image...\n")
>> -        subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
>> -        subprocess.check_call(["xz", "-dvf", img_tmp_xz])
>> +        iso = img + ".install.iso"
>> +
>> +        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.print_step("Booting installer")
>> +        self.boot(img_tmp, extra_args = [
>> +            "-bios", "pc-bios/bios-256k.bin",
>> +            "-machine", "graphics=off",
>> +            "-cdrom", iso
>> +        ])
>> +        self.console_init()
>> +        self.console_wait("Primary Bootstrap")
>> +
>> +        # serial console boot menu output doesn't work for some
>> +        # reason, so we have to fly blind ...
>> +        for char in list("5consdev com0\n"):
>> +            time.sleep(0.2)
>> +            self.console_send(char)
>> +            self.console_wait("")
>> +        self.console_wait_send("> ", "boot\n")
>> +
>> +        self.console_wait_send("Terminal type",            "xterm\n")
>> +        self.console_wait_send("a: Installation messages", "a\n")
>> +        self.console_wait_send("b: US-English",            "b\n")
>> +        self.console_wait_send("a: Install NetBSD",        "a\n")
>> +        self.console_wait("Shall we continue?")
>> +        self.console_wait_send("b: Yes",                   "b\n")
>> +
>> +        self.console_wait_send("a: ld0",                   "a\n")
>> +        self.console_wait_send("a: This is the correct",   "a\n")
>> +        self.console_wait_send("b: Use the entire disk",   "b\n")
>> +        self.console_wait("NetBSD bootcode")
>> +        self.console_wait_send("a: Yes",                   "a\n")
>> +        self.console_wait_send("b: Use existing part",     "b\n")
>> +        self.console_wait_send("x: Partition sizes ok",    "x\n")
>> +        self.console_wait_send("for your NetBSD disk",     "\n")
>> +        self.console_wait("Shall we continue?")
>> +        self.console_wait_send("b: Yes",                   "b\n")
>> +
>> +        self.console_wait_send("b: Use serial port com0",  "b\n")
>> +        self.console_wait_send("f: Set serial baud rate",  "f\n")
>> +        self.console_wait_send("a: 9600",                  "a\n")
>> +        self.console_wait_send("x: Exit",                  "x\n")
>> +
>> +        self.console_wait_send("a: Full installation",     "a\n")
>> +        self.console_wait_send("a: CD-ROM",                "a\n")
>> +
>> +        self.print_step("Installation started now, this will take a while")
>> +        self.console_wait_send("Hit enter to continue",    "\n")
>> +
>> +        self.console_wait_send("d: Change root password",  "d\n")
>> +        self.console_wait_send("a: Yes",                   "a\n")
>> +        self.console_wait("New password:")
>> +        self.console_send("%s\n" % self.ROOT_PASS)
>> +        self.console_wait("New password:")
>> +        self.console_send("%s\n" % self.ROOT_PASS)
>> +        self.console_wait("Retype new password:")
>> +        self.console_send("%s\n" % self.ROOT_PASS)
>> +
>> +        self.console_wait_send("o: Add a user",            "o\n")
>> +        self.console_wait("username")
>> +        self.console_send("%s\n" % self.GUEST_USER)
>> +        self.console_wait("to group wheel")
>> +        self.console_wait_send("a: Yes",                   "a\n")
>> +        self.console_wait_send("a: /bin/sh",               "a\n")
>> +        self.console_wait("New password:")
>> +        self.console_send("%s\n" % self.GUEST_PASS)
>> +        self.console_wait("New password:")
>> +        self.console_send("%s\n" % self.GUEST_PASS)
>> +        self.console_wait("Retype new password:")
>> +        self.console_send("%s\n" % self.GUEST_PASS)
>> +
>> +        self.console_wait_send("a: Configure network",     "a\n")
>> +        self.console_wait_send("a: vioif0",                "a\n")
>> +        self.console_wait_send("Network media type",       "\n")
>> +        self.console_wait("autoconfiguration")
>> +        self.console_wait_send("a: Yes",                   "a\n")
>> +        self.console_wait_send("DNS domain",               "localnet\n")
>> +        self.console_wait("Are they OK?")
>> +        self.console_wait_send("a: Yes",                   "a\n")
>> +        self.console_wait("installed in /etc")
>> +        self.console_wait_send("a: Yes",                   "a\n")
>> +
>> +        self.console_wait_send("e: Enable install",        "e\n")
>> +        proxy = os.environ.get("http_proxy")
>> +        if not proxy is None:
>> +            self.console_wait_send("f: Proxy",             "f\n")
>> +            self.console_wait("Proxy")
>> +            self.console_send("%s\n" % proxy)
>> +        self.console_wait_send("x: Install pkgin",         "x\n")
>> +        self.console_init(1200)
>> +        self.console_wait_send("Hit enter to continue", "\n")
>> +        self.console_init()
>> +
>> +        self.console_wait_send("g: Enable sshd",           "g\n")
>> +        self.console_wait_send("x: Finished conf",         "x\n")
>> +        self.console_wait_send("Hit enter to continue",    "\n")
>> +
>> +        self.print_step("Installation finished, rebooting")
>> +        self.console_wait_send("d: Reboot the computer",   "d\n")
>> +
>> +        # setup qemu user
>> +        prompt = "localhost$"
>> +        self.console_ssh_init(prompt, self.GUEST_USER, self.GUEST_PASS)
>> +        self.console_wait_send(prompt, "exit\n")
>> +
>> +        # setup root user
>> +        prompt = "localhost#"
>> +        self.console_ssh_init(prompt, "root", self.ROOT_PASS)
>> +        self.console_sshd_config(prompt)
>> +
>> +        # setup virtio-blk #1 (tarfile)
>> +        self.console_wait(prompt)
>> +        self.console_send("echo 'chmod 666 /dev/rld1a' >> /etc/rc.local\n")
>> +
>> +        # turn off mprotect (conflicts with tcg)
>> +        self.console_wait(prompt)
>> +        self.console_send("echo security.pax.mprotect.enabled=0 >> /etc/sysctl.conf\n")
>> +
>> +        self.print_step("Configuration finished, rebooting")
>> +        self.console_wait_send(prompt, "reboot\n")
>> +        self.console_wait("login:")
>> +        self.wait_ssh()
>> +
>> +        self.print_step("Installing packages")
>> +        self.ssh_root_check("pkgin update\n")
>> +        self.ssh_root_check("pkgin -y install %s\n" % " ".join(self.pkgs))
>> +
>> +        # shutdown
>> +        self.ssh_root(self.poweroff)
>> +        self.console_wait("entering state S5")
>> +        self.wait()
>> +
>>          if os.path.exists(img):
>>              os.remove(img)
>>          os.rename(img_tmp, img)
>> +        os.remove(iso)
>> +        self.print_step("All done")
>>
>>  if __name__ == "__main__":
>>      sys.exit(basevm.main(NetBSDVM))
> 
> 
> --
> Alex Bennée
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2019-07-05 10:50 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-17  4:38 [Qemu-devel] [PATCH v4 00/11] tests/vm: serial console autoinstall, misc fixes Gerd Hoffmann
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 01/11] tests/vm: send proxy environment variables over ssh Gerd Hoffmann
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 02/11] tests/vm: use ssh with pty unconditionally Gerd Hoffmann
2019-06-17 16:09   ` Philippe Mathieu-Daudé
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 03/11] tests/vm: run test builds on snapshot Gerd Hoffmann
2019-06-17 16:15   ` Philippe Mathieu-Daudé
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 04/11] tests/vm: proper guest shutdown Gerd Hoffmann
2019-06-17 16:09   ` Philippe Mathieu-Daudé
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 05/11] tests/vm: add vm-boot-{ssh, serial}-<guest> targets Gerd Hoffmann
2019-06-17 16:11   ` Philippe Mathieu-Daudé
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 06/11] tests/vm: serial console support helpers Gerd Hoffmann
2019-06-17 16:12   ` Philippe Mathieu-Daudé
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 07/11] tests/vm: openbsd autoinstall, using serial console Gerd Hoffmann
2019-06-17 16:12   ` Philippe Mathieu-Daudé
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 08/11] tests/vm: freebsd " Gerd Hoffmann
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 09/11] tests/vm: netbsd " Gerd Hoffmann
2019-06-17 16:13   ` Philippe Mathieu-Daudé
2019-07-05 10:24   ` Alex Bennée
2019-07-05 10:43     ` Kamil Rytarowski [this message]
2019-07-05 10:47       ` Philippe Mathieu-Daudé
2019-07-05 10:49         ` Kamil Rytarowski
2019-07-05 10:52       ` Peter Maydell
2019-07-05 11:05         ` Daniel P. Berrangé
2019-07-05 11:10         ` Alex Bennée
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 10/11] tests/vm: fedora " Gerd Hoffmann
2019-06-17 16:13   ` Philippe Mathieu-Daudé
2019-06-17  4:38 ` [Qemu-devel] [PATCH v4 11/11] tests/vm: ubuntu.i386: apt proxy setup Gerd Hoffmann
2019-06-17  9:21 ` [Qemu-devel] [PATCH v4 00/11] tests/vm: serial console autoinstall, misc fixes Alex Bennée
2019-06-17 15:44 ` Alex Bennée

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=5d0e35f4-964e-e6e0-d644-ea19fc9cd029@gmx.com \
    --to=n54@gmx.com \
    --cc=alex.bennee@linaro.org \
    --cc=brad@comstyle.com \
    --cc=emaste@freebsd.org \
    --cc=fam@euphon.net \
    --cc=kamil@netbsd.org \
    --cc=kraxel@redhat.com \
    --cc=lwhsu@freebsd.org \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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 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.