qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>, qemu-devel@nongnu.org
Cc: "Fam Zheng" <fam@euphon.net>, "Ed Maste" <emaste@freebsd.org>,
	"Kamil Rytarowski" <kamil@netbsd.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Li-Wen Hsu" <lwhsu@freebsd.org>,
	"Brad Smith" <brad@comstyle.com>
Subject: Re: [Qemu-devel] [PATCH v3 10/14] tests/vm: openbsd autoinstall, using serial console
Date: Wed, 29 May 2019 13:50:26 +0200	[thread overview]
Message-ID: <c293af5d-08a1-4890-5584-c7693dcd48a7@redhat.com> (raw)
In-Reply-To: <20190520124716.30472-11-kraxel@redhat.com>

On 5/20/19 2:47 PM, Gerd Hoffmann wrote:
> 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.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  tests/vm/openbsd | 158 +++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 145 insertions(+), 13 deletions(-)
> 
> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
> index 2105c01a267a..c5f0a1521833 100755
> --- a/tests/vm/openbsd
> +++ b/tests/vm/openbsd
> @@ -2,10 +2,11 @@
>  #
>  # OpenBSD 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,34 +14,165 @@
>  
>  import os
>  import sys
> +import socket
>  import subprocess
>  import basevm
>  
>  class OpenBSDVM(basevm.BaseVM):
>      name = "openbsd"
>      arch = "x86_64"
> +
> +    link = "https://cdn.openbsd.org/pub/OpenBSD/6.5/amd64/install65.iso"
> +    csum = "38d1f8cadd502f1c27bf05c5abde6cc505dd28f3f34f8a941048ff9a54f9f608"
> +    size = "20G"
> +    pkgs = [
> +        # tools
> +        "git",
> +        "pkgconf",
> +        "bzip2", "xz",
> +
> +        # gnu tools
> +        "bash",
> +        "gmake",
> +        "gsed",
> +        "bison",
> +
> +        # libs: usb
> +        "libusb1",
> +
> +        # libs: crypto
> +        "gnutls",
> +
> +        # libs: images
> +        "jpeg",
> +        "png",
> +
> +	# libs: ui
> +        "sdl2",
> +        "gtk+3",
> +        "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/rsd1c;
> -        ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4 --python=python2.7 {configure_opts};
> -        gmake --output-sync -j{jobs} {verbose};
> -        # XXX: "gmake check" seems to always hang or fail
> -        #gmake --output-sync -j{jobs} check {verbose};
> +        cd ../build
> +        ../src/configure --cc=cc --python=python3 {configure_opts};
> +        gmake --output-sync -j{jobs} {target} {verbose};
>      """
> +    poweroff = "halt -p"
>  
>      def build_image(self, img):
> -        cimg = self._download_with_cache("http://download.patchew.org/openbsd-6.1-amd64.img.xz",
> -                sha256sum='8c6cedc483e602cfee5e04f0406c64eb99138495e8ca580bc0293bcf0640c1bf')
> -        img_tmp_xz = img + ".tmp.xz"
> +        self.print_step("Downloading install iso")
> +        cimg = self._download_with_cache(self.link, sha256sum=self.csum)
>          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 = [
> +            "-machine", "graphics=off",
> +            "-cdrom", iso
> +        ])
> +        self.console_init()
> +        self.console_wait_send("boot>", "set tty com0\n")
> +        self.console_wait_send("boot>", "\n")
> +
> +        # pre-install configuration
> +        self.console_wait_send("(I)nstall",               "i\n")
> +        self.console_wait_send("Terminal type",           "xterm\n")
> +        self.console_wait_send("System hostname",         "openbsd\n")
> +        self.console_wait_send("Which network interface", "vio0\n")
> +        self.console_wait_send("IPv4 address",            "dhcp\n")
> +        self.console_wait_send("IPv6 address",            "none\n")
> +        self.console_wait_send("Which network interface", "done\n")
> +        self.console_wait_send("DNS domain name",         "localnet\n")
> +        self.console_wait("Password for root account")
> +        self.console_send("%s\n" % self.ROOT_PASS)
> +        self.console_wait("Password for root account")
> +        self.console_send("%s\n" % self.ROOT_PASS)
> +        self.console_wait_send("Start sshd(8)",           "yes\n")
> +        self.console_wait_send("X Window System",         "\n")
> +        self.console_wait_send("xenodm",                  "\n")
> +        self.console_wait_send("console to com0",         "\n")
> +        self.console_wait_send("Which speed",             "\n")
> +
> +        self.console_wait("Setup a user")
> +        self.console_send("%s\n" % self.GUEST_USER)
> +        self.console_wait("Full name")
> +        self.console_send("%s\n" % self.GUEST_USER)
> +        self.console_wait("Password")
> +        self.console_send("%s\n" % self.GUEST_PASS)
> +        self.console_wait("Password")
> +        self.console_send("%s\n" % self.GUEST_PASS)
> +
> +        self.console_wait_send("Allow root ssh login",    "yes\n")
> +        self.console_wait_send("timezone",                "UTC\n")
> +        self.console_wait_send("root disk",               "\n")
> +        self.console_wait_send("(W)hole disk",            "\n")
> +        self.console_wait_send("(A)uto layout",           "\n")
> +        self.console_wait_send("Location of sets",        "cd0\n")
> +        self.console_wait_send("Pathname to the sets",    "\n")
> +        self.console_wait_send("Set name(s)",             "\n")
> +        self.console_wait_send("without verification",    "yes\n")
> +
> +        self.print_step("Installation started now, this will take a while")
> +        self.console_wait_send("Location of sets",        "done\n")
> +
> +        self.console_wait("successfully completed")
> +        self.print_step("Installation finished, rebooting")
> +        self.console_wait_send("(R)eboot",                "reboot\n")
> +
> +        # setup qemu user
> +        prompt = "$"
> +        self.console_ssh_init(prompt, self.GUEST_USER, self.GUEST_PASS)
> +        self.console_wait_send(prompt, "exit\n")
> +
> +        # setup root user
> +        prompt = "openbsd#"
> +        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/rsd1c' >> /etc/rc.local\n")
> +
> +        # enable w+x for /home
> +        self.console_wait(prompt)
> +        self.console_send("sed -i -e '/home/s/rw,/rw,wxallowed,/' /etc/fstab\n")
> +
> +        # tweak datasize limit
> +        self.console_wait(prompt)
> +        self.console_send("sed -i -e 's/\\(datasize[^=]*\\)=[^:]*/\\1=infinity/' /etc/login.conf\n")
> +
> +        # use http (be proxy cache friendly)
> +        self.console_wait(prompt)
> +        self.console_send("sed -i -e 's/https/http/' /etc/installurl\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("pkg_add %s\n" % " ".join(self.pkgs))
> +
> +        # shutdown
> +        self.ssh_root(self.poweroff)
> +        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(OpenBSDVM))
> 

This works like charm.

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>


  reply	other threads:[~2019-05-29 11:51 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-20 12:47 [Qemu-devel] [PATCH v3 00/14] tests/vm: serial console autoinstall, misc fixes Gerd Hoffmann
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 01/14] scripts: use git archive in archive-source Gerd Hoffmann
2019-05-29 11:53   ` Philippe Mathieu-Daudé
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 02/14] tests/vm: python3 fixes Gerd Hoffmann
2019-05-29 11:33   ` Philippe Mathieu-Daudé
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 03/14] tests/vm: send proxy environment variables over ssh Gerd Hoffmann
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 04/14] tests/vm: use ssh with pty unconditionally Gerd Hoffmann
2019-05-20 18:03   ` Philippe Mathieu-Daudé
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 05/14] tests/vm: run test builds on snapshot Gerd Hoffmann
2019-05-20 18:03   ` Philippe Mathieu-Daudé
2019-05-24  8:15   ` Ed Maste
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 06/14] tests/vm: proper guest shutdown Gerd Hoffmann
2019-05-20 18:04   ` Philippe Mathieu-Daudé
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 07/14] tests/vm: add vm-boot-{ssh, serial}-<guest> targets Gerd Hoffmann
2019-05-20 18:56   ` Philippe Mathieu-Daudé
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 08/14] tests/vm: add DEBUG=1 to help text Gerd Hoffmann
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 09/14] tests/vm: serial console support helpers Gerd Hoffmann
2019-05-29 11:31   ` Philippe Mathieu-Daudé
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 10/14] tests/vm: openbsd autoinstall, using serial console Gerd Hoffmann
2019-05-29 11:50   ` Philippe Mathieu-Daudé [this message]
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 11/14] tests/vm: freebsd " Gerd Hoffmann
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 12/14] tests/vm: netbsd " Gerd Hoffmann
2019-05-29 11:32   ` Philippe Mathieu-Daudé
2019-05-29 11:52     ` Philippe Mathieu-Daudé
2019-05-29 12:02       ` Philippe Mathieu-Daudé
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 13/14] tests/vm: fedora " Gerd Hoffmann
2019-05-29 11:31   ` Philippe Mathieu-Daudé
2019-05-20 12:47 ` [Qemu-devel] [PATCH v3 14/14] tests/vm: ubuntu.i386: apt proxy setup Gerd Hoffmann
2019-05-29  5:09 ` [Qemu-devel] [PATCH v3 00/14] tests/vm: serial console autoinstall, misc fixes Gerd Hoffmann
2019-05-29  9:57   ` Alex Bennée
2019-05-30  9:33 ` Alex Bennée
2019-05-30 10:02   ` Philippe Mathieu-Daudé
2019-05-30 10:18     ` Alex Bennée
2019-05-30 10:30       ` Philippe Mathieu-Daudé
2019-06-04  5:30         ` Philippe Mathieu-Daudé
2019-06-12 17:35   ` Alex Bennée
2019-06-13  0:11     ` Kamil Rytarowski
2019-06-13  9:36       ` Alex Bennée
2019-06-13  9:52         ` Gerd Hoffmann
2019-06-13 11:34           ` Alex Bennée
2019-06-13 12:36             ` Gerd Hoffmann
2019-06-13 13:03               ` Alex Bennée
     [not found] ` <155835775478.22.12860360999794172452@5d2e01a8a801>
2019-05-30  9:43   ` 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=c293af5d-08a1-4890-5584-c7693dcd48a7@redhat.com \
    --to=philmd@redhat.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=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 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).