#!/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 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))
