Problem instantiating Virtual Machines

Hi everyone!

I am setting up a simple cloud infrastructure consisting of one front-end (x86) and one host (ARM). I could successfully setup the OpenNebula packages in both computers and add the host to OpenNebula, using KVM.

This is the information I get when I enter the command onehost list:

ID                    : 3                   
NAME                  : node                
CLUSTER               : -                   
STATE                 : MONITORED           
IM_MAD                : kvm                 
VM_MAD                : kvm                 
VN_MAD                : dummy               
LAST MONITORING TIME  : 06/05 11:40:51      

HOST SHARES                                                                     
TOTAL MEM             : 2G                  
USED MEM (REAL)       : 60M                 
USED MEM (ALLOCATED)  : 512M                
TOTAL CPU             : 200                 
USED CPU (REAL)       : 20                  
USED CPU (ALLOCATED)  : 100                 
RUNNING VMS           : 1                   

MONITORING INFORMATION                                                          
ARCH="armv7l"
CPUSPEED="48"
HOSTNAME="cubietruck"
HYPERVISOR="kvm"
IM_MAD="kvm"
MODELNAME="ARMv7 Processor rev 4 (v7l)"
NETRX="1182302639"
NETTX="1210836522"
RESERVED_CPU=""
RESERVED_MEM=""
VERSION="4.14.2"
VM_MAD="kvm"
VN_MAD="dummy"

The problem is that I can’t instantiate Virtual Machines in the host. The command I use to instantiate my virtual machine directly in the node is the following:
sudo qemu-system-arm -enable-kvm -m 512M -M vexpress-a15 -cpu host -kernel zImage -dtb vexpress-v2p-ca15-tc1.dtb -append "root=/dev/vda console=ttyAMA0 rootwait" -drive if=none,file=opensuse-factory.img,id=factory -device virtio-blk-device,drive=factory -net nic -net user -monitor null -serial stdio -nographic

The files I have are:

  • zImage, the kernel
  • vexpress-v2p-ca15-tc1.dtb, the DTB file
  • opensuse-factory.img, the disk image

Since I am using ARM in the host and I need to set all these options, I am quite confused on how to do that. I’ve uploaded the 3 files to the datastore, the disk image using the oneimage command, the kernel as a kernel file in the file datastore, and the DTB file as a context file in the file datastore.

Then, I’ve created the following template:
TEMPLATE 1 INFORMATION
ID : 1
NAME : OpenSuse
USER : oneadmin
GROUP : oneadmin
REGISTER TIME : 06/05 11:21:27

PERMISSIONS                                                                     
OWNER          : um-                 
GROUP          : ---                 
OTHER          : ---                 

TEMPLATE CONTENTS                                                               
CONTEXT=[
  NETWORK="YES",
  SSH_PUBLIC_KEY="$USER[SSH_PUBLIC_KEY]" ]
CPU="1"
DISK=[
  IMAGE="opensuse-factory",
  IMAGE_UNAME="oneadmin" ]
HYPERVISOR="kvm"
LOGO="images/logos/linux.png"
MEMORY="512"
NIC=[
  NETWORK="private",
  NETWORK_UNAME="oneadmin" ]
OS=[
  KERNEL_CMD="root=/dev/vda console=ttyAMA0 rootwait",
  KERNEL_DS="$FILE[IMAGE_ID=4]" ]

Note that there is no reference to the DTB file, because I don’t know how to set it using OpenNebula.

When I try to instantiate a VM using this template, I am getting the following error:
Sun Jun 5 11:22:11 2016 [Z0][VM][I]: New state is ACTIVE
Sun Jun 5 11:22:11 2016 [Z0][VM][I]: New LCM state is PROLOG
Sun Jun 5 11:26:10 2016 [Z0][VM][I]: New LCM state is BOOT
Sun Jun 5 11:26:10 2016 [Z0][VMM][I]: Generating deployment file: /var/lib/one/vms/4/deployment.0
Sun Jun 5 11:26:11 2016 [Z0][VMM][I]: ExitCode: 0
Sun Jun 5 11:26:11 2016 [Z0][VMM][I]: Successfully execute network driver operation: pre.
Sun Jun 5 11:26:11 2016 [Z0][VMM][I]: Command execution fail: cat << EOT | /var/tmp/one/vmm/kvm/deploy ‘/var/lib/one//datastores/0/4/deployment.0’ ‘node’ 4 node
Sun Jun 5 11:26:11 2016 [Z0][VMM][I]: setlocale: No such file or directory
Sun Jun 5 11:26:11 2016 [Z0][VMM][I]: error: Failed to create domain from /var/lib/one//datastores/0/4/deployment.0
Sun Jun 5 11:26:11 2016 [Z0][VMM][I]: error: internal error: No guest options available for arch 'x86_64’
Sun Jun 5 11:26:11 2016 [Z0][VMM][E]: Could not create domain from /var/lib/one//datastores/0/4/deployment.0
Sun Jun 5 11:26:11 2016 [Z0][VMM][I]: ExitCode: 255
Sun Jun 5 11:26:11 2016 [Z0][VMM][I]: Failed to execute virtualization driver operation: deploy.
Sun Jun 5 11:26:11 2016 [Z0][VMM][E]: Error deploying virtual machine: Could not create domain from /var/lib/one//datastores/0/4/deployment.0
Sun Jun 5 11:26:11 2016 [Z0][VM][I]: New LCM state is BOOT_FAILURE

I don’t really know what is going on, but my first task would be to make my template replicate the command I use to instantiate VM’s directly in the host.

Any ideas?

Thanks!

Hi

Probably you need to:

1.- Set OS = [ ARCH = “…” attribute
2.- Set OS = [ Machine = “…” attribute
3.- Update the emulator PATH #EMULATOR = /usr/libexec/qemu-kvm (probably to
the arm version)

All of this can be done by default for all your VMs in
/etc/one/vmm_exec/vmm_exec_kvm.conf.

You can get all the information from the output of virsh capabilities.

There is no native support for the DTB file, but you can also add it
through a RAW attribute:

RAW=[TYPE=“kvm”, DATA="/path/to/dtb/in_the_nodes]

Note that in this case OpenNebula will not transfer the files. Also you can
set a deafult for all your VMs in the previous file.

Hope it helps