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

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))
-- 
2.18.1



  parent reply	other threads:[~2019-05-20 13:04 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 ` Gerd Hoffmann [this message]
2019-05-29 11:50   ` [Qemu-devel] [PATCH v3 10/14] tests/vm: openbsd autoinstall, using serial console Philippe Mathieu-Daudé
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=20190520124716.30472-11-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=brad@comstyle.com \
    --cc=emaste@freebsd.org \
    --cc=fam@euphon.net \
    --cc=kamil@netbsd.org \
    --cc=lwhsu@freebsd.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.