1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
This directory contains documentation and a demo of the OVF
functionality that is present in cloud-init.
The example/ directory contains the following files:
example/ovf-env.xml
This is an example ovf environment file
to make an iso that qualifies for the ISO transport, do:
mkdir my-iso
cp environment.xml my-iso/ovf-env.xml
genisoimage -o transport.iso -r my-iso
Then, boot with that ISO attached as a CDrom
- example/ubuntu-server.ovf
Example generated by virtualbox "export" of a simple VM.
It contains a functional ProductSection also. Given answers
to each of the Properties there, a suitable OVF environment file
(ovf-env.xml) could be created.
== Demo ==
In order to easily demonstrate this functionality, simple demo is
contained here. To boot a local virtual machine in either kvm or virtual
box, follow the steps below.
- download a suitable Ubuntu image
Visit http://cloud-images.ubuntu.com/releases and download a disk image
of Natty, Oneiric or a newer release.
$ burl="http://cloud-images.ubuntu.com/releases/"
$ disk="ubuntu-11.10-server-cloudimg-i386-disk1"
$ wget "$burl/11.10/release/$disk.img" -O "$disk.img"
- If you're going to use virtual box, you will need to convert the image
from qcow2 format into a virtual-box friendly VHD format.
$ qemu-img convert -O vdi "$disk.img" "ubuntu.vdi"
- If you're using kvm, you should create a qcow delta image to store
the changes so you keep the original pristine.
$ qemu-img create -f qcow2 -b "$disk.img" "ubuntu.qcow2"
Optionally, you could decompress the image, which will make it boot faster
but will take up more local disk space.
$ qemu-img convert -O qcow2 "$disk.img" "$disk.qcow2"
$ qemu-img create -f qcow2 -b "$disk.qcow2" ubuntu.qcow2
- Create an ISO file that will provide user-data to the image.
This will put the contents of 'user-data' into an ovf-env.xml file
and create an ISO file that can then be attached at boot to provide
the user data to cloud-init.
$ ./make-iso ovf-env.xml.tmpl user-data --output ovftransport.iso
- Boot your virtual machine
The cloud-images boot with kernel and boot progress to ttyS0.
You can change that at the grub prompt if you'd like by editing the
kernel entry. Otherwise, to see progress you'll need to switch
to the serial console. In kvm graphic mode, you do that by clicking
in the window and then pressing pressing 'ctrl-alt-3'. For information
on how to do that in virtualbox or kvm curses, see the relevant
documentation.
KVM:
$ kvm -drive file=ubuntu.qcow2,if=virtio -cdrom ovftransport.iso \
-m 256 -net nic -net user,hostfwd=tcp::2222-:22
VirtualBox:
- Launch the GUI and create a new vm with $disk.vdi and ovftransport.iso
attached.
- If you use 'NAT' networking, then forward a port (2222) to the
guests' port 22 to be able to ssh.
Upon successful boot you will be able to log in as the 'ubuntu' user
with the password 'passw0rd' (which was set in the 'user-data' file).
You will also be able to ssh to the instance with the provided:
$ chmod 600 ovfdemo.pem
$ ssh -i ovfdemo.pem -p 2222 ubuntu@localhost
- Notes:
* The 'instance-id' that is set in the ovf-env.xml image needs to
be unique. If you want to run the first-boot code of cloud-init
again you will either have to remove /var/lib/cloud ('rm -Rf' is fine)
or create a new cdrom with a different instance-id. To do the
ladder, simply add the '--instance-id=' flag to the 'make-iso'
command above and start your vm with the new ISO attached.
|