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 09/13] tests/vm: openbsd autoinstall, using serial console
Date: Wed, 8 May 2019 10:56:41 +0200 [thread overview]
Message-ID: <20190508085645.11595-10-kraxel@redhat.com> (raw)
In-Reply-To: <20190508085645.11595-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 | 150 +++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 138 insertions(+), 12 deletions(-)
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index 2105c01a267a..02f07026debe 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -13,34 +13,160 @@
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};
"""
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")
+
+ # 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("halt -p")
+ 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
next prev parent reply other threads:[~2019-05-08 9:08 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-08 8:56 [Qemu-devel] [PATCH 00/13] tests/vm: serial console autoinstall, misc fixes Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 01/13] scripts: use git archive in archive-source Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 02/13] tests/vm: send proxy environment variables over ssh Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 03/13] tests/vm: send locale " Gerd Hoffmann
2019-05-09 7:35 ` Thomas Huth
2019-05-09 8:18 ` Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 04/13] tests/vm: use ssh with pty unconditionally Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 05/13] tests/vm: run test builds on snapshot Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 06/13] tests/vm: add vm-boot-{ssh, serial}-<guest> targets Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 07/13] tests/vm: add DEBUG=1 to help text Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 08/13] tests/vm: serial console support helpers Gerd Hoffmann
2019-05-08 8:56 ` Gerd Hoffmann [this message]
2019-05-08 8:56 ` [Qemu-devel] [PATCH 10/13] tests/vm: freebsd autoinstall, using serial console Gerd Hoffmann
2019-05-08 8:56 ` [Qemu-devel] [PATCH 11/13] tests/vm: netbsd " Gerd Hoffmann
2019-05-08 19:30 ` Kamil Rytarowski
2019-05-09 6:47 ` Gerd Hoffmann
2019-05-09 16:39 ` Richard Henderson
2019-05-09 19:07 ` Kamil Rytarowski
2019-05-09 17:01 ` Kamil Rytarowski
2019-05-08 8:56 ` [Qemu-devel] [PATCH 12/13] tests/vm: fedora " Gerd Hoffmann
2019-05-09 12:00 ` Thomas Huth
2019-05-09 13:10 ` Gerd Hoffmann
2019-05-09 13:23 ` Daniel P. Berrangé
2019-05-08 8:56 ` [Qemu-devel] [PATCH 13/13] tests/vm: ubuntu.i386: apt proxy setup Gerd Hoffmann
2019-05-09 12:12 ` Philippe Mathieu-Daudé
2019-05-09 13:17 ` Gerd Hoffmann
2019-05-09 11:53 ` [Qemu-devel] [PATCH 00/13] tests/vm: serial console autoinstall, misc fixes Thomas Huth
2019-05-09 12:04 ` Philippe Mathieu-Daudé
2019-05-09 12:35 ` Thomas Huth
2019-05-09 13:50 ` Gerd Hoffmann
2019-05-09 13:57 ` Thomas Huth
2019-05-09 19:11 ` Kamil Rytarowski
2019-05-09 18:52 ` Kamil Rytarowski
2019-05-10 4:23 ` Gerd Hoffmann
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=20190508085645.11595-10-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 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).