mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-06 18:05:37 +00:00
tests/vm/freebsd: Update to FreeBSD 13.2
According to QEMU's support policy, we stop supporting the previous major release two years after the the new major release has been published. So we can stop testing FreeBSD 12 now and should switch our FreeBSD VM to version 13 instead. Some changes are needed for this update: The downloadable .ISO images do not use the serial port as console by default anymore, so they are not usable in the same way as with FreeBSD 12. Fortunately, the FreeBSD project now also offers some pre-installed CI images that have the serial console enabled, so we can use those now, with the benefit that we can skip almost all parts of the previous installation process. Message-Id: <20230419144553.719749-1-thuth@redhat.com> Reviewed-by: Warner Losh <imp@bsdimp.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
bcbbd95d2a
commit
ec6fb1c8cd
|
@ -28,15 +28,15 @@ class FreeBSDVM(basevm.BaseVM):
|
|||
name = "freebsd"
|
||||
arch = "x86_64"
|
||||
|
||||
link = "https://download.freebsd.org/ftp/releases/ISO-IMAGES/12.4/FreeBSD-12.4-RELEASE-amd64-disc1.iso.xz"
|
||||
csum = "1dcf6446e31bf3f81b582e9aba3319a258c29a937a2af6138ee4b181ed719a87"
|
||||
link = "https://download.freebsd.org/releases/CI-IMAGES/13.2-RELEASE/amd64/Latest/FreeBSD-13.2-RELEASE-amd64-BASIC-CI.raw.xz"
|
||||
csum = "a4fb3b6c7b75dd4d58fb0d75e4caf72844bffe0ca00e66459c028b198ffb3c0e"
|
||||
size = "20G"
|
||||
pkgs = [
|
||||
# build tools
|
||||
"git",
|
||||
"pkgconf",
|
||||
"bzip2",
|
||||
"python37",
|
||||
"python39",
|
||||
"ninja",
|
||||
|
||||
# gnu tools
|
||||
|
@ -78,72 +78,42 @@ class FreeBSDVM(basevm.BaseVM):
|
|||
mkdir src build; cd src;
|
||||
tar -xf /dev/vtbd1;
|
||||
cd ../build
|
||||
../src/configure --python=python3.7 {configure_opts};
|
||||
../src/configure --python=python3.9 {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):
|
||||
self.print_step("Downloading install iso")
|
||||
self.print_step("Downloading disk image")
|
||||
cimg = self._download_with_cache(self.link, sha256sum=self.csum)
|
||||
img_tmp = img + ".tmp"
|
||||
iso = img + ".install.iso"
|
||||
iso_xz = iso + ".xz"
|
||||
tmp_raw = img + ".tmp.raw"
|
||||
tmp_raw_xz = tmp_raw + ".xz"
|
||||
img_tmp = img + ".tmp.qcow2"
|
||||
|
||||
self.print_step("Preparing iso and disk image")
|
||||
subprocess.check_call(["cp", "-f", cimg, iso_xz])
|
||||
subprocess.check_call(["xz", "-dvf", iso_xz])
|
||||
self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
|
||||
self.print_step("Preparing disk image")
|
||||
subprocess.check_call(["cp", "-f", cimg, tmp_raw_xz])
|
||||
subprocess.check_call(["xz", "-dvf", tmp_raw_xz])
|
||||
self.exec_qemu_img("convert", "-O", "qcow2", tmp_raw, img_tmp)
|
||||
self.exec_qemu_img("resize", img_tmp, self.size)
|
||||
os.remove(tmp_raw)
|
||||
|
||||
self.print_step("Booting installer")
|
||||
self.print_step("Preparing disk image")
|
||||
self.boot(img_tmp, extra_args = [
|
||||
"-machine", "graphics=off",
|
||||
"-device", "VGA",
|
||||
"-cdrom", iso
|
||||
"-vga", "none"
|
||||
])
|
||||
self.console_init()
|
||||
self.console_boot_serial()
|
||||
self.console_wait_send("Console type", "xterm\n")
|
||||
self.console_wait_send("login:", "root\n")
|
||||
self.console_wait_send("~ #", "service growfs onestart\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
|
||||
# root user
|
||||
self.console_wait_send("~ #", "passwd\n")
|
||||
self.console_wait("New Password:")
|
||||
self.console_send("%s\n" % self._config["root_pass"])
|
||||
self.console_wait("Retype New Password:")
|
||||
self.console_send("%s\n" % self._config["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", "0\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_send("~ #", "adduser\n")
|
||||
self.console_wait("Username")
|
||||
self.console_send("%s\n" % self._config["guest_user"])
|
||||
self.console_wait("Full name")
|
||||
|
@ -165,13 +135,7 @@ class FreeBSDVM(basevm.BaseVM):
|
|||
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()
|
||||
self.console_wait_send("~ #", "exit\n")
|
||||
|
||||
# setup qemu user
|
||||
prompt = "$"
|
||||
|
@ -183,35 +147,20 @@ class FreeBSDVM(basevm.BaseVM):
|
|||
self.console_ssh_init(prompt, "root", self._config["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__":
|
||||
|
|
Loading…
Reference in a new issue