From nobody Wed Nov 5 12:53:54 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 153507377551627.664500860681756; Thu, 23 Aug 2018 18:22:55 -0700 (PDT) Received: from localhost ([::1]:39404 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ft0oG-0003St-G1 for importer@patchew.org; Thu, 23 Aug 2018 21:22:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36001) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ft0nO-0003AT-3a for qemu-devel@nongnu.org; Thu, 23 Aug 2018 21:21:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ft0nJ-0007jm-PM for qemu-devel@nongnu.org; Thu, 23 Aug 2018 21:21:50 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:52944 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ft0nH-0007bo-Tb for qemu-devel@nongnu.org; Thu, 23 Aug 2018 21:21:44 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 788B45BCB6; Fri, 24 Aug 2018 01:21:39 +0000 (UTC) Received: from lemon.usersys.redhat.com (ovpn-12-121.pek2.redhat.com [10.72.12.121]) by smtp.corp.redhat.com (Postfix) with ESMTP id 390DC2166BA1; Fri, 24 Aug 2018 01:21:33 +0000 (UTC) From: Fam Zheng To: qemu-devel@nongnu.org Date: Fri, 24 Aug 2018 09:21:26 +0800 Message-Id: <20180824012126.22721-1-famz@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Fri, 24 Aug 2018 01:21:39 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Fri, 24 Aug 2018 01:21:39 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'famz@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH] tests: vm: auto_install OpenBSD X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Fam Zheng , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Brad Smith Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Upgrade OpenBSD to 6.3 using auto_install. Especially, drop SDL1, include SDL2. One limitation of this patch is that we need a temporary HTTP server on host 80 port for auto_install, because slirp cannot do guest forward on "host addr". Signed-off-by: Fam Zheng --- tests/vm/basevm.py | 28 ++++++++++++++-- tests/vm/openbsd | 81 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 96 insertions(+), 13 deletions(-) diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py index d7149dea7d..4080039e66 100755 --- a/tests/vm/basevm.py +++ b/tests/vm/basevm.py @@ -65,8 +65,6 @@ class BaseVM(object): self._stdout =3D self._devnull self._args =3D [ \ "-nodefaults", "-m", "4G", - "-netdev", "user,id=3Dvnet,hostfwd=3D:127.0.0.1:0-:22", - "-device", "virtio-net-pci,netdev=3Dvnet", "-vnc", "127.0.0.1:0,to=3D20", "-serial", "file:%s" % os.path.join(self._tmpdir, "serial.out"= )] if vcpus: @@ -145,8 +143,10 @@ class BaseVM(object): "-device", "virtio-blk,drive=3D%s,serial=3D%s,bootindex= =3D1" % (name, name)] =20 - def boot(self, img, extra_args=3D[]): + def boot(self, img, extra_args=3D[], extra_usernet_args=3D""): args =3D self._args + [ + "-netdev", "user,id=3Dvnet,hostfwd=3D:127.0.0.1:0-:22" + extra= _usernet_args, + "-device", "virtio-net-pci,netdev=3Dvnet", "-device", "VGA", "-drive", "file=3D%s,if=3Dnone,id=3Ddrive0,cache=3Dwriteback" = % img, "-device", "virtio-blk,drive=3Ddrive0,bootindex=3D0"] @@ -196,6 +196,28 @@ class BaseVM(object): def qmp(self, *args, **kwargs): return self._guest.qmp(*args, **kwargs) =20 + def start_http_server(self, workdir, ports=3Drange(8010, 8020), sudo= =3DFalse): + p =3D None + token =3D "%d-%d" % (os.getpid(), time.time()) + with open(os.path.join(workdir, token), "w") as f: + f.write("# QEMU VM testing HTTP server token file #") + f.flush() + for port in ports: + cmd =3D ["python3", "-m", "http.server", str(port)] + if sudo: + cmd =3D ["sudo", "-n"] + cmd + p =3D subprocess.Popen(cmd, cwd=3Dworkdir) + for retry in range(5): + if p.poll() !=3D None: + break + if subprocess.call("curl http://127.0.0.1:%d/%s &>/dev/nul= l" % \ + (port, token), + shell=3DTrue) =3D=3D 0: + atexit.register(p.terminate) + return port + time.sleep(0.3) + raise IOError("Failed to start HTTP server") + def parse_args(vm_name): parser =3D optparse.OptionParser( description=3D"VM test utility. Exit codes: " diff --git a/tests/vm/openbsd b/tests/vm/openbsd index 52500ee52b..7e118572a9 100755 --- a/tests/vm/openbsd +++ b/tests/vm/openbsd @@ -14,6 +14,9 @@ import os import sys import subprocess +import time +import atexit +import tempfile import basevm =20 class OpenBSDVM(basevm.BaseVM): @@ -23,22 +26,80 @@ class OpenBSDVM(basevm.BaseVM): rm -rf /var/tmp/qemu-test.* cd $(mktemp -d /var/tmp/qemu-test.XXXXXX); tar -xf /dev/rsd1c; - ./configure --cc=3Dx86_64-unknown-openbsd6.1-gcc-4.9.4 --python=3D= python2.7 {configure_opts}; + ./configure {configure_opts}; gmake --output-sync -j{jobs} {verbose}; # XXX: "gmake check" seems to always hang or fail #gmake --output-sync -j{jobs} check {verbose}; """ =20 + def _install_os(self, img): + tmpdir =3D tempfile.mkdtemp() + pxeboot =3D self._download_with_cache("https://fastly.cdn.openbsd.= org/pub/OpenBSD/6.3/amd64/pxeboot", + sha256sum=3D"60029919798f48ea40ecb123adfed6217f099d5ed9cd1= a6c7de5b544d7b7b0f6") + bsd_rd =3D self._download_with_cache("https://fastly.cdn.openbsd.o= rg/pub/OpenBSD/6.3/amd64/bsd.rd", + sha256sum=3D"1c0adb43a02ae3aee512bcf0829dac0ccb2e4d614b161= 049af7ce530e5da2dfc") + install =3D self._download_with_cache("https://fastly.cdn.openbsd.= org/pub/OpenBSD/6.3/amd64/install63.iso", + sha256sum=3D'ee775405dd7926975befbc3fef23de8c4b5a726c3b507= 5e4848fcd3a2a712ea8') + subprocess.check_call(["qemu-img", "create", img, "32G"]) + subprocess.check_call(["cp", pxeboot, os.path.join(tmpdir, "auto_i= nstall")]) + subprocess.check_call(["cp", bsd_rd, os.path.join(tmpdir, "bsd")]) + + self._gen_install_conf(tmpdir) + try: + self.start_http_server(tmpdir, ports=3D[80], sudo=3DTrue) + except Exception: + sys.stdout.write("Cannot open HTTP server on port 80. Maybe us= e sudo?\n") + sys.exit(1) + # BOOTP filename being auto_install makes sure OpenBSD installer + # not prompt for "auto install mode" + tftp_args =3D ",tftp=3D%s,bootfile=3D/auto_install" % tmpdir + self.boot(img, + extra_args=3D["-boot", "once=3Dn", "-no-reboot", + "-cdrom", install], + extra_usernet_args=3Dtftp_args) + self.wait() + + def _gen_install_conf(self, tmpdir): + contents =3D """ +System hostname =3D qemu-openbsd +Password for root =3D qemupass +Public ssh key for root =3D {pub_key} +Allow root ssh login =3D yes +Network interfaces =3D vio0 +IPv4 address for vio0 =3D dhcp +Setup a user =3D qemu +Password for user =3D qemupass +Public ssh key for user =3D {pub_key} +What timezone are you in =3D US/Eastern +Server =3D fastly.cdn.openbsd.org +Use http =3D yes +Default IPv4 route =3D 10.0.2.2 +Location of sets =3D cd0 +Set name(s) =3D all +Continue without verification =3D yes +""".format(pub_key=3Dbasevm.SSH_PUB_KEY) + with open(os.path.join(tmpdir, "install.conf"), "w") as f: + f.write(contents) + def build_image(self, img): - cimg =3D self._download_with_cache("http://download.patchew.org/op= enbsd-6.1-amd64.img.xz", - sha256sum=3D'8c6cedc483e602cfee5e04f0406c64eb99138495e8ca5= 80bc0293bcf0640c1bf') - img_tmp_xz =3D img + ".tmp.xz" - img_tmp =3D img + ".tmp" - subprocess.check_call(["cp", "-f", cimg, img_tmp_xz]) - subprocess.check_call(["xz", "-df", img_tmp_xz]) - if os.path.exists(img): - os.remove(img) - os.rename(img_tmp, img) + + self._install_os(img + ".tmp") + + self.boot(img + ".tmp") + self.wait_ssh() + + self.ssh_root("usermod -G operator qemu") + self.ssh_root("echo https://fastly.cdn.openbsd.org/pub/OpenBSD > /= etc/installurl") + for pkg in ["git", "gmake", "glib2", "bison", "sdl2"]: + self.ssh_root("pkg_add " + pkg) + self.ssh_root("ln -sf /usr/local/bin/python2.7 /usr/local/bin/pyth= on") + self.ssh_root("ln -sf /usr/local/bin/python2.7-2to3 /usr/local/bin= /2to3") + self.ssh_root("ln -sf /usr/local/bin/python2.7-config /usr/local/b= in/python-config") + self.ssh_root("ln -sf /usr/local/bin/pydoc2.7 /usr/local/bin/pydoc= ") + self.ssh_root("shutdown -p now") + self.wait() + + subprocess.check_call(["mv", img + ".tmp", img]) =20 if __name__ =3D=3D "__main__": sys.exit(basevm.main(OpenBSDVM)) --=20 2.17.1