On Wed, Apr 19, 2023 at 8:46 AM Thomas Huth <th...@redhat.com> wrote:
> 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. > > Signed-off-by: Thomas Huth <th...@redhat.com> > --- > v2: Removed the "ftp/" folder from the URL - it's not necessary anymore > (thanks to Li-Wen for the hint!) > > tests/vm/freebsd | 101 ++++++++++++----------------------------------- > 1 file changed, 25 insertions(+), 76 deletions(-) > Reviewed-by: Warner Losh <i...@bsdimp.com> I also wonder if we should expand this to aarch64... but it looks like there's no CI image for that, so I'll see if I can make something like that happen before 14.0. Warner > diff --git a/tests/vm/freebsd b/tests/vm/freebsd > index ba2ba23d24..11de6473f4 100755 > --- a/tests/vm/freebsd > +++ b/tests/vm/freebsd > @@ -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" > - > - 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("Booting installer") > + tmp_raw = img + ".tmp.raw" > + tmp_raw_xz = tmp_raw + ".xz" > + img_tmp = img + ".tmp.qcow2" > + > + 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("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") > - > - # 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_send("login:", "root\n") > + self.console_wait_send("~ #", "service growfs onestart\n") > + > + # 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__": > -- > 2.31.1 > >