Message ID | 20190619194021.8240-13-alex.bennee@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | testing/next (Travis fixes, more tests/vm) | expand |
On 6/19/19 9:40 PM, Alex Bennée wrote: > From: Gerd Hoffmann <kraxel@redhat.com> > > 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 <kraxel@redhat.com> > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> > Tested-by: Thomas Huth <thuth@redhat.com> > Message-Id: <20190617043858.8290-9-kraxel@redhat.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > --- > tests/vm/freebsd | 182 ++++++++++++++++++++++++++++++++++++++++++++--- > 1 file changed, 172 insertions(+), 10 deletions(-) > > 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 <famz@redhat.com> > +# 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 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)) >
Philippe Mathieu-Daudé <philmd@redhat.com> writes: > On 6/19/19 9:40 PM, Alex Bennée wrote: >> From: Gerd Hoffmann <kraxel@redhat.com> >> >> 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 <kraxel@redhat.com> >> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> >> Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> >> Tested-by: Thomas Huth <thuth@redhat.com> >> Message-Id: <20190617043858.8290-9-kraxel@redhat.com> > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> So I do have a check for this in my PR scripts. I guess I should replicate it in my patch series workflow. > >> --- >> tests/vm/freebsd | 182 ++++++++++++++++++++++++++++++++++++++++++++--- >> 1 file changed, 172 insertions(+), 10 deletions(-) >> >> 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 <famz@redhat.com> >> +# 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 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)) >> -- 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 <famz@redhat.com> +# 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 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))