| #!/usr/bin/env python3 |
| # |
| # Ubuntu i386 image |
| # |
| # Copyright 2017 Red Hat Inc. |
| # |
| # Authors: |
| # Fam Zheng <famz@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 sys |
| import subprocess |
| import basevm |
| import time |
| |
| class UbuntuX86VM(basevm.BaseVM): |
| name = "ubuntu.i386" |
| arch = "i386" |
| BUILD_SCRIPT = """ |
| set -e; |
| cd $(mktemp -d); |
| sudo chmod a+r /dev/vdb; |
| tar -xf /dev/vdb; |
| ./configure {configure_opts}; |
| make --output-sync {target} -j{jobs} {verbose}; |
| """ |
| |
| def build_image(self, img): |
| cimg = self._download_with_cache( |
| "https://cloud-images.ubuntu.com/releases/bionic/release-20191114/ubuntu-18.04-server-cloudimg-i386.img", |
| sha256sum="28969840626d1ea80bb249c08eef1a4533e8904aa51a327b40f37ac4b4ff04ef") |
| img_tmp = img + ".tmp" |
| subprocess.check_call(["cp", "-f", cimg, img_tmp]) |
| self.exec_qemu_img("resize", img_tmp, "50G") |
| self.boot(img_tmp, extra_args = [ |
| "-device", "VGA", |
| "-cdrom", self.gen_cloud_init_iso() |
| ]) |
| self.wait_ssh() |
| self.ssh_root_check("touch /etc/cloud/cloud-init.disabled") |
| self.ssh_root_check("apt-get update") |
| self.ssh_root_check("apt-get install -y cloud-initramfs-growroot") |
| # Don't check the status in case the guest hang up too quickly |
| self.ssh_root("sync && reboot") |
| time.sleep(5) |
| self.wait_ssh() |
| # The previous update sometimes doesn't survive a reboot, so do it again |
| self.ssh_root_check("sed -ie s/^#\ deb-src/deb-src/g /etc/apt/sources.list") |
| self.ssh_root_check("apt-get update") |
| self.ssh_root_check("apt-get build-dep -y qemu") |
| self.ssh_root_check("apt-get install -y libfdt-dev language-pack-en") |
| self.ssh_root("poweroff") |
| self.wait() |
| os.rename(img_tmp, img) |
| return 0 |
| |
| if __name__ == "__main__": |
| sys.exit(basevm.main(UbuntuX86VM)) |