qemu/tests/vm/fedora
Paolo Bonzini 170ed475cd tests/vm: do not specify -bios option
When running from the build tree, the executable is able to find
the BIOS on its own; when running from the source tree, a firmware
blob should already be installed and there is no guarantee that
the one in the source tree works with the QEMU that is being used for
the installation.

Just remove the -bios option, since it is unnecessary and in fact
there are other x86 VM tests that do not bother specifying it.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-07-06 09:27:58 +02:00

191 lines
6.4 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Fedora VM image
#
# Copyright 2019 Red Hat Inc.
#
# Authors:
# 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.
#
import os
import re
import sys
import time
import socket
import subprocess
import basevm
class FedoraVM(basevm.BaseVM):
name = "fedora"
arch = "x86_64"
base = "https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/"
link = base + "Server/x86_64/iso/Fedora-Server-netinst-x86_64-30-1.2.iso"
repo = base + "Server/x86_64/os/"
full = base + "Everything/x86_64/os/"
csum = "5e4eac4566d8c572bfb3bcf54b7d6c82006ec3c6c882a2c9235c6d3494d7b100"
size = "20G"
pkgs = [
# tools
'git-core',
'gcc', 'binutils', 'make', 'ninja-build',
# perl
'perl',
# libs: usb
'"pkgconfig(libusb-1.0)"',
'"pkgconfig(libusbredirparser-0.5)"',
# libs: crypto
'"pkgconfig(gnutls)"',
# libs: ui
'"pkgconfig(sdl2)"',
'"pkgconfig(gtk+-3.0)"',
'"pkgconfig(ncursesw)"',
# libs: audio
'"pkgconfig(libpulse)"',
'"pkgconfig(alsa)"',
# libs: migration
'"pkgconfig(libzstd)"',
]
BUILD_SCRIPT = """
set -e;
rm -rf /home/qemu/qemu-test.*
cd $(mktemp -d /home/qemu/qemu-test.XXXXXX);
mkdir src build; cd src;
tar -xf /dev/vdb;
cd ../build
../src/configure --python=python3 {configure_opts};
gmake --output-sync -j{jobs} {target} {verbose};
"""
def build_image(self, img):
self.print_step("Downloading install iso")
cimg = self._download_with_cache(self.link, sha256sum=self.csum)
img_tmp = img + ".tmp"
iso = img + ".install.iso"
self.print_step("Preparing iso and disk image")
subprocess.check_call(["cp", "-f", cimg, iso])
self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
self.print_step("Booting installer")
self.boot(img_tmp, extra_args = [
"-machine", "graphics=off",
"-device", "VGA",
"-cdrom", iso
])
self.console_init(300)
self.console_wait("installation process.")
time.sleep(0.3)
self.console_send("\t")
time.sleep(0.3)
self.console_send(" console=ttyS0")
proxy = os.environ.get("http_proxy")
if not proxy is None:
self.console_send(" proxy=%s" % proxy)
self.console_send(" inst.proxy=%s" % proxy)
self.console_send(" inst.repo=%s" % self.repo)
self.console_send("\n")
self.console_wait_send("2) Use text mode", "2\n")
self.console_wait_send("5) [!] Installation Dest", "5\n")
self.console_wait_send("1) [x]", "c\n")
self.console_wait_send("2) [ ] Use All Space", "2\n")
self.console_wait_send("2) [x] Use All Space", "c\n")
self.console_wait_send("1) [ ] Standard Part", "1\n")
self.console_wait_send("1) [x] Standard Part", "c\n")
self.console_wait_send("7) [!] Root password", "7\n")
self.console_wait("Password:")
self.console_send("%s\n" % self._config["root_pass"])
self.console_wait("Password (confirm):")
self.console_send("%s\n" % self._config["root_pass"])
self.console_wait_send("8) [ ] User creation", "8\n")
self.console_wait_send("1) [ ] Create user", "1\n")
self.console_wait_send("3) User name", "3\n")
self.console_wait_send("ENTER:", "%s\n" % self._config["guest_user"])
self.console_wait_send("4) [ ] Use password", "4\n")
self.console_wait_send("5) Password", "5\n")
self.console_wait("Password:")
self.console_send("%s\n" % self._config["guest_pass"])
self.console_wait("Password (confirm):")
self.console_send("%s\n" % self._config["guest_pass"])
self.console_wait_send("7) Groups", "c\n")
while True:
good = self.console_wait("3) [x] Installation",
"3) [!] Installation")
self.console_send("r\n")
if good:
break
time.sleep(10)
while True:
good = self.console_wait("4) [x] Software",
"4) [!] Software")
self.console_send("r\n")
if good:
break
time.sleep(10)
self.console_send("r\n" % self._config["guest_pass"])
self.console_wait_send("'b' to begin install", "b\n")
self.print_step("Installation started now, this will take a while")
self.console_wait_send("Installation complete", "\n")
self.print_step("Installation finished, rebooting")
# setup qemu user
prompt = " ~]$"
self.console_ssh_init(prompt, self._config["guest_user"],
self._config["guest_pass"])
self.console_wait_send(prompt, "exit\n")
# setup root user
prompt = " ~]#"
self.console_ssh_init(prompt, "root", self._config["root_pass"])
self.console_sshd_config(prompt)
# setup virtio-blk #1 (tarfile)
self.console_wait(prompt)
self.console_send("echo 'KERNEL==\"vdb\" MODE=\"666\"' >> %s\n" %
"/etc/udev/rules.d/99-qemu.rules")
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("rm -vf /etc/yum.repos.d/fedora*.repo\n")
self.ssh_root_check("echo '[fedora]' >> /etc/yum.repos.d/qemu.repo\n")
self.ssh_root_check("echo 'baseurl=%s' >> /etc/yum.repos.d/qemu.repo\n" % self.full)
self.ssh_root_check("echo 'gpgcheck=0' >> /etc/yum.repos.d/qemu.repo\n")
self.ssh_root_check("dnf install -y %s\n" % " ".join(self.pkgs))
# shutdown
self.ssh_root(self.poweroff)
self.console_wait("sleep state S5")
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(FedoraVM))