From patchwork Wed Jun 19 19:40:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 167268 Delivered-To: patch@linaro.org Received: by 2002:a92:4782:0:0:0:0:0 with SMTP id e2csp1146910ilk; Wed, 19 Jun 2019 13:05:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqy2Uk/jD8BlltvpTpH5OxahqXXbqDEOMO12IhWPYl9AurmK1PlNkR0qmy3axxXQCxyp8R2U X-Received: by 2002:a17:906:7855:: with SMTP id p21mr47309019ejm.287.1560974736812; Wed, 19 Jun 2019 13:05:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560974736; cv=none; d=google.com; s=arc-20160816; b=iVYIGlGfHuL/S1WM4V31PEewNmqDsAqJMf/UwXJ9xkMaXNTOczzZfqRd1KdvJdw1Od jBwXkA9KKEldW58zGEtFwK7vlpRk9SsW8fyvgnNOsGbjcVyDuVIyVQDp6JeaiNCcv0OY bKJQuHRpHS7Rv5mw43a+PKhQLWC1rFWRSDvwhcBHbdkPPkudl+sSPOtwTj6d96RpFNQu mqcrUwABs7v3e/hbG2JgIAqDhytjbvPf+wZ2RirioJSHbGzYCF3Th099hOIZfPxFtwcf nLT6euXm/m1ctwxn9lb/x+7il+ir9tPtaOCkfWfjx1mk0TzUV0OVXi7+bfZh2Og861PO MAWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=iMCV1pDp/0RdCyrr4HygA4HO+17huZdMnbc+nwmxn6o=; b=wLhxCcpnf6gVyGbBjdYFYmCQIU7AuU5jjFzdx8JvZv3+sF9MYzQFEBS4AXANdNCDll NvIAOwB2sevW4I2Jl5waGhWkF9ZObg24vlOCrRvG3kGEQsXqV9NbFp5cUy7YeSs8si8i Le7kbW1Ce8ZT77UiF8RetTarYZffgoSw0+HGz7oMPyWkoy7c1G07BPHbOnpZVXCg1wk7 3XjXRI4c93JnTX4xZcq26i2gt3l7xUsYs6tNYNwcR5Q2ohGGjzaGgg0yYlEOSMf/rKpq 4W8JasDj4Odw1nh9GovjyDxaxrNUo7fPGY7OHSUY5pgsukJgVpxSuIuBbSHjN9naF4WN W0tA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=n5NMR8S0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id w13si15797416edc.372.2019.06.19.13.05.36 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 19 Jun 2019 13:05:36 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=n5NMR8S0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:41604 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdgpr-0001S6-BL for patch@linaro.org; Wed, 19 Jun 2019 16:05:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55987) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdgYp-0003vZ-T5 for qemu-devel@nongnu.org; Wed, 19 Jun 2019 15:48:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdgYk-00066A-SG for qemu-devel@nongnu.org; Wed, 19 Jun 2019 15:47:57 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]:46368) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hdgYi-0005aY-SW for qemu-devel@nongnu.org; Wed, 19 Jun 2019 15:47:53 -0400 Received: by mail-wr1-x435.google.com with SMTP id n4so458320wrw.13 for ; Wed, 19 Jun 2019 12:47:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iMCV1pDp/0RdCyrr4HygA4HO+17huZdMnbc+nwmxn6o=; b=n5NMR8S0IaqUZP0JCP7N97Nu3QEEqkIKnt4rlGAHww4kSwGQScCStX3HnvP0qxzVjD jSUEr6r1NWu81pCWlI5/byXi5Hi9WCKso194FfWM7SQESPYIH68WPB1x9B0H4DUGe0a9 M784/7Mxn23v2yt1dVy+UAdPnSRgj9D5hdIpDl8SxaLHA2iebbW0CMjkXnWqZC7l31WC PcRWN2jTRGKoCziJHbG35Cvs9j+rHmwle+I2CNDloYS/KLmiLdKQGf0yvc5RlFqacUKc 2+AIB/gxXqGHLGR0NzHZ5NEteK52THmPXpBVr/mi+rk+R0ip4AGrYPZNMCbwouB+mmuE stzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iMCV1pDp/0RdCyrr4HygA4HO+17huZdMnbc+nwmxn6o=; b=hl5/YwdbMnpBin1/9bTVdWaNSKpCuJIzyGCv+OD2NacyFt4+mgkPGRPnzjCGWKXTtn U7/MZMCZRrDSiDP0WIa1no/PRzbm3QT61mpCKyR5M4IEaKwOxxYg6WuNn9V8t4k8ygaP Rd6u0j3zbqbjogsgPUw4Xljv/1FtPL+EMPQBglZLcqAQVZwBHZHUyILuFStWHVtI6RTW uMtZHaTWD0tk71fe8xaak3EOP1fxID1GNUimaKQadXxGMd+s95PN+mf7NjJBtfixj32M 45msqiJEhzSe4M0BZwq9YIYwCEx8s0c1Zv2+QEBDzLsJgXwUf6lQzciSUxnsraxk280h 1CrA== X-Gm-Message-State: APjAAAUcd+zb2/Ti8Cd/0qkeIeaeQDwPXKfw6QpsoWiJERydbZBocoJf VhXyjttWiznZIDDarnrilX/GzQ== X-Received: by 2002:a5d:4fc8:: with SMTP id h8mr550940wrw.124.1560973639157; Wed, 19 Jun 2019 12:47:19 -0700 (PDT) Received: from zen.linaroharston ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id 32sm38584306wra.35.2019.06.19.12.47.18 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 19 Jun 2019 12:47:18 -0700 (PDT) Received: from zen.linaroharston. (localhost [127.0.0.1]) by zen.linaroharston (Postfix) with ESMTP id 6DE491FF9C; Wed, 19 Jun 2019 20:40:22 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Date: Wed, 19 Jun 2019 20:40:16 +0100 Message-Id: <20190619194021.8240-13-alex.bennee@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190619194021.8240-1-alex.bennee@linaro.org> References: <20190619194021.8240-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::435 Subject: [Qemu-devel] [PATCH v1 12/17] tests/vm: freebsd autoinstall, using serial console X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , =?utf-8?q?Alex_Benn=C3=A9e?= , Thomas Huth , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Gerd Hoffmann Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Gerd Hoffmann 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. Note that freebsd package downloads are delivered as non-cachable content, so I had to configure squid with "ignore-no-store ignore-private ignore-reload" for pkgmir.geo.freebsd.org to make the caching actually work. Signed-off-by: Gerd Hoffmann Reviewed-by: Philippe Mathieu-Daudé Tested-by: Philippe Mathieu-Daudé Tested-by: Thomas Huth Message-Id: <20190617043858.8290-9-kraxel@redhat.com> --- tests/vm/freebsd | 182 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 172 insertions(+), 10 deletions(-) -- 2.20.1 Signed-off-by: Alex Bennée diff --git a/tests/vm/freebsd b/tests/vm/freebsd index 091be1a065..2a19461a90 100755 --- a/tests/vm/freebsd +++ b/tests/vm/freebsd @@ -2,41 +2,203 @@ # # FreeBSD VM image # -# Copyright 2017 Red Hat Inc. +# Copyright 2017-2019 Red Hat Inc. # # Authors: # Fam Zheng +# Gerd Hoffmann # # This code is licensed under the GPL version 2 or later. See # the COPYING file in the top-level directory. # import os +import re import sys +import time +import socket import subprocess import basevm class FreeBSDVM(basevm.BaseVM): name = "freebsd" arch = "x86_64" + + link = "https://download.freebsd.org/ftp/releases/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-disc1.iso.xz" + csum = "1d40015bea89d05b8bd13e2ed80c40b522a9ec1abd8e7c8b80954fb485fb99db" + size = "20G" + pkgs = [ + # build tools + "git", + "pkgconf", + "bzip2", + + # gnu tools + "bash", + "gmake", + "gsed", + "flex", "bison", + + # libs: crypto + "gnutls", + + # libs: images + "jpeg-turbo", + "png", + + # libs: ui + "sdl2", + "gtk3", + "libxkbcommon", + + # libs: opengl + "libepoxy", + "mesa-libs", + ] + 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/vtbd1; - ./configure {configure_opts}; + cd ../build + ../src/configure --python=python3.6 {configure_opts}; gmake --output-sync -j{jobs} {target} {verbose}; """ + def console_boot_serial(self): + self.console_wait_send("Autoboot", "3") + self.console_wait_send("OK", "set console=comconsole\n") + self.console_wait_send("OK", "boot\n") + def build_image(self, img): - cimg = self._download_with_cache("http://download.patchew.org/freebsd-11.1-amd64.img.xz", - sha256sum='adcb771549b37bc63826c501f05121a206ed3d9f55f49145908f7e1432d65891') - 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(["ln", "-f", cimg, img_tmp_xz]) - subprocess.check_call(["xz", "--keep", "-dvf", img_tmp_xz]) + iso = img + ".install.iso" + iso_xz = iso + ".xz" + + self.print_step("Preparing iso and disk image") + subprocess.check_call(["cp", "-f", cimg, iso_xz]) + subprocess.check_call(["xz", "-dvf", iso_xz]) + 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_boot_serial() + self.console_wait_send("Console type", "xterm\n") + + # pre-install configuration + self.console_wait_send("Welcome", "\n") + self.console_wait_send("Keymap Selection", "\n") + self.console_wait_send("Set Hostname", "freebsd\n") + self.console_wait_send("Distribution Select", "\n") + self.console_wait_send("Partitioning", "\n") + self.console_wait_send("Partition", "\n") + self.console_wait_send("Scheme", "\n") + self.console_wait_send("Editor", "f") + self.console_wait_send("Confirmation", "c") + + self.print_step("Installation started now, this will take a while") + + # post-install configuration + 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("Network Configuration", "\n") + self.console_wait_send("IPv4", "y") + self.console_wait_send("DHCP", "y") + self.console_wait_send("IPv6", "n") + self.console_wait_send("Resolver", "\n") + + self.console_wait_send("Time Zone Selector", "a\n") + self.console_wait_send("Confirmation", "y") + self.console_wait_send("Time & Date", "\n") + self.console_wait_send("Time & Date", "\n") + + self.console_wait_send("System Configuration", "\n") + self.console_wait_send("System Hardening", "\n") + + # qemu user + self.console_wait_send("Add User Accounts", "y") + self.console_wait("Username") + self.console_send("%s\n" % self.GUEST_USER) + self.console_wait("Full name") + self.console_send("%s\n" % self.GUEST_USER) + self.console_wait_send("Uid", "\n") + self.console_wait_send("Login group", "\n") + self.console_wait_send("Login group", "\n") + self.console_wait_send("Login class", "\n") + self.console_wait_send("Shell", "\n") + self.console_wait_send("Home directory", "\n") + self.console_wait_send("Home directory perm", "\n") + self.console_wait_send("Use password", "\n") + self.console_wait_send("Use an empty password", "\n") + self.console_wait_send("Use a random password", "\n") + self.console_wait("Enter password:") + self.console_send("%s\n" % self.GUEST_PASS) + self.console_wait("Enter password again:") + self.console_send("%s\n" % self.GUEST_PASS) + self.console_wait_send("Lock out", "\n") + self.console_wait_send("OK", "yes\n") + self.console_wait_send("Add another user", "no\n") + + self.console_wait_send("Final Configuration", "\n") + self.console_wait_send("Manual Configuration", "\n") + self.console_wait_send("Complete", "\n") + + self.print_step("Installation finished, rebooting") + self.console_boot_serial() + + # 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 = "root@freebsd:~ #" + self.console_ssh_init(prompt, "root", self.ROOT_PASS) + self.console_sshd_config(prompt) + + # setup serial console + self.console_wait(prompt) + self.console_send("echo 'console=comconsole' >> /boot/loader.conf\n") + + # setup boot delay + self.console_wait(prompt) + self.console_send("echo 'autoboot_delay=1' >> /boot/loader.conf\n") + + # setup virtio-blk #1 (tarfile) + self.console_wait(prompt) + self.console_send("echo 'chmod 666 /dev/vtbd1' >> /etc/rc.local\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 install -y %s\n" % " ".join(self.pkgs)) + + # shutdown + self.ssh_root(self.poweroff) + self.console_wait("Uptime:") + 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(FreeBSDVM))