====== Running Ubuntu 16.04 Cloud image using KVM/ARM ====== The CPU core in ODROID-C2 is [[http://www.arm.com/products/processors/cortex-a/cortex-a53-processor.php|the Cortex-A53 processor]]. The Cortex-A53 processor supports [[https://www.arm.com/products/processors/technologies/virtualization-extensions.php|the virtualization extensions]] to support the virtualization. It means ODROID-C2 is able to support the virtualization using the well-known hypervisors such as KVM and Xen. This is a step-by-step guide of how to run //**unmodified**// Ubuntu Cloud using KVM/ARM on ODROID-C2 Ubuntu. ===== Changing timer ===== ODROID-C2 use the SoC vendor specific timer, "meson-timer", due to the GPU and VPU performance. But, meson-timer does not support KVM. First of all, the timer should be changed to "armv8-timer" to support the KVM/ARM. Modify the '/media/boot/boot.ini' file. Change the //mesontimer// environment variable to "0". odroid@odroid64:~$ sudo vi /media/boot/boot.ini * **/media/boot/boot.ini** # Meson Timer # 1 - Meson Timer # 0 - Arch Timer # Using meson_timer improves the video playback whoever it breaks KVM (virtualization). # Using arch timer allows KVM/Virtualization to work however you'll experience poor video setenv mesontimer "0" And then, the system need reboot in order to apply changed timer setting. odroid@odroid64:~$ sudo reboot Check whether the KVM is enabled or not. odroid@odroid64:~$ dmesg | grep kvm [ 0.487913] kvm [1]: Using HYP init bounce page @5aaf2000 [ 0.488039] kvm [1]: interrupt-controller@c4304000 IRQ25 [ 0.497607] kvm [1]: timer IRQ27 [ 0.497619] kvm [1]: Hyp mode initialized successfully ===== Installing packages & Downloading images ===== We need not only [[http://wiki.qemu.org/Main_Page|QEMU]] in order to run and manage guest system but cloud-utils for account setting. odroid@odroid64:~$ sudo apt install -y qemu qemu-utils cloud-utils Download BIOS and Ubuntu 16.04 cloud images. odroid@odroid64:~$ wget https://releases.linaro.org/components/kernel/uefi-linaro/15.12/release/qemu64/QEMU_EFI.fd odroid@odroid64:~$ wget https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-arm64-uefi1.img ===== Setting & Running Ubuntu 16.04 Cloud ===== Cloud images are plain - there is no user setup, no default user/password combo, so to log in to the image, we need to customize the image on first boot. The defacto tool for this is [[http://cloudinit.readthedocs.io/en/latest/|cloud-init]]. The simplest method for using cloud-init is passing a block media with a settings file - of course for real cloud deployment, you would use one of fancy network based initialization protocols cloud-init supports. Enter the following to a file, say cloud.txt: Create cloud.txt in order to set the default user account. odroid@odroid64:~$ cat > cloud.txt < Run the Ubuntu 16.04 cloud now. (//user//: **ubuntu**, //password//: **odroid**) odroid@odroid64:~$ qemu-system-aarch64 -smp 2 -m 1024 -M virt -bios QEMU_EFI.fd -nographic \ -device virtio-blk-device,drive=image \ -drive if=none,id=image,file=xenial-server-cloudimg-arm64-uefi1.img \ -device virtio-blk-device,drive=cloud \ -drive if=none,id=cloud,file=cloud.img \ -netdev user,id=user -device virtio-net-device,netdev=user \ -enable-kvm -cpu host * //-smp//: Virtual CPU count * //-m//: Memory size * //-bios//: Firmware image * //-nographic//: Console display only * //-enable-kvm//: Use KVM for the guest * //-cpu host//: CPU is same between host and guest {{ :en:kvm-arm.png?1000 |Three Ubuntu 16.04 Cloud}} ==== How do you increase a guest's disk size? ==== - Stop the VM - Run 'qemu-img resize +10G' to increase image size by 10Gb - Start the VM, resize the partitions and LVM structure within it normally ===== References ===== * [[http://forum.odroid.com/viewtopic.php?f=138&t=19153|Related thread in ODROID forum]] * [[http://suihkulokki.blogspot.kr/2016/05/booting-ubuntu-1604-cloud-images-on.html|Booting ubuntu 16.04 cloud images on Arm64]]