#!/usr/bin/env python3 # # Ubuntu i386 image # # Copyright 2017 Red Hat Inc. # # Authors: # Fam Zheng # # 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 flex bison language-pack-en") self.ssh_root("poweroff") self.wait() os.rename(img_tmp, img) return 0 if __name__ == "__main__": sys.exit(basevm.main(UbuntuX86VM))