Wiki

Version 43 (Nikos Skalkotos, 12/07/2011 01:53 pm)

1 21 Constantinos Venetsanopoulos
h2. snf-image
2 21 Constantinos Venetsanopoulos
3 21 Constantinos Venetsanopoulos
!snf-image-logo.png!
4 1 Constantinos Venetsanopoulos
5 10 Vangelis Koukis
h2. Introduction - Features
6 10 Vangelis Koukis
7 40 Constantinos Venetsanopoulos
snf-image is a "Ganeti":http://code.google.com/p/ganeti/ OS Definition, primarily used by Synnefo.
8 2 Constantinos Venetsanopoulos
9 30 Constantinos Venetsanopoulos
It is rewritten from scratch and allows Ganeti to launch instances from predefined or untrusted custom Images. The whole process of deploying an Image onto the block device, as provided by Ganeti, is done in complete isolation from the physical host, enhancing robustness and security.
10 1 Constantinos Venetsanopoulos
11 7 Vangelis Koukis
There are also additional hooks that can be enabled at image deployment. They allow for:
12 1 Constantinos Venetsanopoulos
13 7 Vangelis Koukis
 * changing the password of root or arbitrary users
14 7 Vangelis Koukis
 * injecting files at arbitrary locations inside the filesystem, e.g., SSH keys
15 7 Vangelis Koukis
 * setting a custom hostname
16 7 Vangelis Koukis
 * re-creating SSH host keys to ensure the image uses unique keys
17 1 Constantinos Venetsanopoulos
18 7 Vangelis Koukis
snf-image has been used successfully to deploy many major Linux distributions (Debian, Ubuntu/Kubuntu, CentOS, Fedora), as well as Windows 2008 R2.  
19 7 Vangelis Koukis
20 40 Constantinos Venetsanopoulos
The snf-image Ganeti OS Definition is released under [[Licence|GNU Generic Public Lisence version 2]].
21 35 Nikos Skalkotos
22 35 Nikos Skalkotos
h2. Ganeti OS Interface
23 35 Nikos Skalkotos
24 7 Vangelis Koukis
snf-image requires ganeti-os-interface v20 to operate.
25 7 Vangelis Koukis
It introduces the following OS parameters:
26 7 Vangelis Koukis
27 8 Vangelis Koukis
 * @img_id@ (_required_): the unique id of the image as known by the storage backend
28 39 Nikos Skalkotos
 * @img_format@ (_required_): the image format type (see [[Image Format|here]])
29 8 Vangelis Koukis
 * @img_passwd@ (_required_): the passwd to be injected inside the image
30 1 Constantinos Venetsanopoulos
 * @img_properties@ (_optional_): additional image properties used to customize the image ([[Image_Format#Image-Properties|details]])
31 29 Nikos Skalkotos
 * @img_personality@ (_optional_): files to be injected into the image filesystem. It is a JSON-encoded list of files to be injected: every file is defined by its path and base64-encoded data. This format follows the notation proposed by the "OpenStack Compute API v1.1":http://docs.openstack.org/api/openstack-compute/1.1/content/CreateServers.html. ["more...":http://docs.openstack.org/api/openstack-compute/1.1/content/Server_Personality-d1e2543.html ] for defining server personalities.
32 1 Constantinos Venetsanopoulos
33 1 Constantinos Venetsanopoulos
h2. Architecture
34 8 Vangelis Koukis
35 8 Vangelis Koukis
snf-image is split in two components: A part running on the Ganeti host, with full root privilege (@snf-image-host@), and a part running inside an unprivileged, helper VM (@snf-image-helper@).
36 8 Vangelis Koukis
37 8 Vangelis Koukis
h3. snf-image-host
38 8 Vangelis Koukis
39 8 Vangelis Koukis
This part implements the Ganeti OS interface. It extracts the Image onto the Ganeti-provided block device, using streaming block I/O (@dd@ with @oflag=direct@), then passes control to @snf-image-helper@ running inside a helper VM. The helper VM is created using KVM, runs as an unprivileged user, @nobody@ by default.
40 8 Vangelis Koukis
41 8 Vangelis Koukis
There is no restriction on the distribution running inside the helper VM, as long as it executes the @snf-image-helper@ component automatically upon bootup. The @snf-image-update-helper@ script is provided with @snf-image-host@ to automate the creation of a helper VM image based on Debian Stable, using @debootstrap@.
42 8 Vangelis Koukis
43 8 Vangelis Koukis
The @snf-image-helper@ component is spawned inside a specific hardware environment:
44 8 Vangelis Koukis
45 8 Vangelis Koukis
* The VM features a virtual floppy, containing an @ext2@ filesystem with all parameters needed for image customization.
46 8 Vangelis Koukis
* The hard disk of the VM being deployed is accessible as the first @virtio@ hard disk.
47 40 Constantinos Venetsanopoulos
* All kernel/console output is redirected to the first virtual serial console, and eventually finds its way into the OS definition log files that Ganeti maintains.
48 8 Vangelis Koukis
* The helper VM is expected to output "SUCCESS" to its second serial port if image customization was successful inside the VM.
49 8 Vangelis Koukis
  In any other case, execution of the helper VM or @snf-image-helper@ has failed.
50 8 Vangelis Koukis
* The helper VM is expected to shutdown automatically once it is done. Its execution is time-limited; if it has not terminated after a number of seconds, configurable via @/etc/default/snf-image@, it is sent a @SIGTERM@ and/or a @SIGKILL@.
51 8 Vangelis Koukis
52 8 Vangelis Koukis
KVM is currently a dependency for @snf-image@, meaning it is needed to spawn the helper VM. There is no restriction on the hypervisor used for the actual Ganeti instances. This is not a strict requirement; KVM could be replaced by @qemu@, doing full CPU virtualization without any kernel support for spawning the helper VM.
53 8 Vangelis Koukis
54 8 Vangelis Koukis
h3. snf-image-helper
55 8 Vangelis Koukis
56 43 Nikos Skalkotos
This part runs inside the helper VM and undertakes customization of the VM being deployed using a number of hooks, or _[[Configuration Tasks|tasks]]_. The tasks run in an environment, specified by rules found in a virtual floppy, placed there by the @snf-image-host@ component. @snf-image-helper@ uses @runparts@ to run tasks found under @/usr/lib/snf-image-helper/tasks@ by default.
57 3 Constantinos Venetsanopoulos
58 14 Vangelis Koukis
The architecture is presented below:
59 11 Constantinos Venetsanopoulos
60 12 Constantinos Venetsanopoulos
h3. Graphical Representation
61 11 Constantinos Venetsanopoulos
62 11 Constantinos Venetsanopoulos
!snf-image_arch.png!
63 11 Constantinos Venetsanopoulos
64 1 Constantinos Venetsanopoulos
h2. Download
65 1 Constantinos Venetsanopoulos
66 41 Constantinos Venetsanopoulos
h3. Packages
67 41 Constantinos Venetsanopoulos
68 32 Vangelis Koukis
Download the latest debian packages (v0.2):
69 32 Vangelis Koukis
* "@snf-image-host@":https://code.grnet.gr/attachments/download/593/snf-image-host_0.2-1_all.deb
70 32 Vangelis Koukis
* "@snf-image-helper@":https://code.grnet.gr/attachments/download/589/snf-image-helper_0.2-1_all.deb
71 10 Vangelis Koukis
72 25 Constantinos Venetsanopoulos
Previous versions and source tarballs can be found here:
73 10 Vangelis Koukis
https://code.grnet.gr/projects/snf-image/files
74 1 Constantinos Venetsanopoulos
75 41 Constantinos Venetsanopoulos
h3. Sample Images
76 41 Constantinos Venetsanopoulos
77 41 Constantinos Venetsanopoulos
While developing snf-image, we created and tested a number of images. The following images are basic installations of some popular Linux distributions, that have been tested with snf-image and provided here for testing purposes:
78 41 Constantinos Venetsanopoulos
79 41 Constantinos Venetsanopoulos
* "Debian Squeeze Base System [extdump]":http://plus.pithos.grnet.gr/public/y4psj
80 41 Constantinos Venetsanopoulos
* "Debian Desktop [extdump]":http://plus.pithos.grnet.gr/public/rs7jq
81 41 Constantinos Venetsanopoulos
* "CentOS 6.0 [extdump]":http://plus.pithos.grnet.gr/public/jjt7u
82 41 Constantinos Venetsanopoulos
* "Fedora Desktop 15 [extdump]":http://plus.pithos.grnet.gr/public/5eccr
83 41 Constantinos Venetsanopoulos
* "Ubuntu Desktop 11.04 [extdump]":http://plus.pithos.grnet.gr/public/p6c56
84 41 Constantinos Venetsanopoulos
* "Kubuntu Desktop 11.04 [extdump]":http://plus.pithos.grnet.gr/public/nq7wx
85 41 Constantinos Venetsanopoulos
86 41 Constantinos Venetsanopoulos
* "Debian Squeeze Base System [diskdump]":http://plus.pithos.grnet.gr/public/cycu3
87 41 Constantinos Venetsanopoulos
* "Debian Squeeze Base System diskdump README file":http://plus.pithos.grnet.gr/public/wwe3c  
88 41 Constantinos Venetsanopoulos
89 41 Constantinos Venetsanopoulos
After getting familiar with snf-image you can build your own Images ([[Image Format|more...]]), or build upon the ones listed above.
90 33 Vangelis Koukis
91 1 Constantinos Venetsanopoulos
h2. Installation
92 1 Constantinos Venetsanopoulos
93 9 Vangelis Koukis
Before installing snf-image be sure to have a working Ganeti installation in your cluster. The installation process should take place in *all* ganeti nodes. Here we will describe the installation in a single node. The process is identical for all nodes and should be repeated manually or automatically, e.g., with puppet.
94 5 Constantinos Venetsanopoulos
95 5 Constantinos Venetsanopoulos
# Download the snf-image-host debian package as described in the download section.
96 5 Constantinos Venetsanopoulos
# Install the snf-image-host debian package:
97 5 Constantinos Venetsanopoulos
<pre>
98 5 Constantinos Venetsanopoulos
 # dpkg -i snf-image-host_version.deb
99 5 Constantinos Venetsanopoulos
</pre>
100 5 Constantinos Venetsanopoulos
# If the dependencies are not met, install all the dependencies using @apt-get install@
101 5 Constantinos Venetsanopoulos
# Download the snf-image-helper debian package as described in the download section and store it in a handy location.
102 16 Constantinos Venetsanopoulos
# *Do NOT install the snf-image-helper debian package* in the Ganeti node (the @deb@ file should be present in all nodes, but NOT installed in any node).
103 40 Constantinos Venetsanopoulos
# Configure the package, as described in the next section, before you can start using the new OS Definition.
104 5 Constantinos Venetsanopoulos
105 5 Constantinos Venetsanopoulos
h2. Configuration
106 5 Constantinos Venetsanopoulos
107 5 Constantinos Venetsanopoulos
Once you have installed snf-image-host in the Ganeti node and also snf-image-helper is present, proceed with the following configuration:
108 9 Vangelis Koukis
109 24 Constantinos Venetsanopoulos
# Edit @/etc/default/snf-image@ and set the @IMAGE_DIR@ variable to point at the location where you have stored all your disk image files (by default @/var/lib/snf-image@). All disk image files must have the following name format: @img_id-x86_64.img_format@
110 24 Constantinos Venetsanopoulos
  This means that if you have an image with img_id = debian_base_0.5-2 and img_format = extdump
111 24 Constantinos Venetsanopoulos
  then it's filename should be @debian_base_0.5-2-x86_64.extdump@
112 5 Constantinos Venetsanopoulos
# Edit @/etc/default/snf-image@ and set the @HELPER_DIR@ variable to a directory in which all snf-helper related stuff are going to be stored (the directory should be able to store at least 700MB of data)
113 9 Vangelis Koukis
# Move the snf-image-helper debian package inside this directory and edit the @HELPER_PKG@ variable in @/etc/default/snf-image@ accordingly:
114 10 Vangelis Koukis
<pre>
115 5 Constantinos Venetsanopoulos
 $ mv /path/to/handy/location/snf-image-helper_version.deb $HELPER_DIR/
116 1 Constantinos Venetsanopoulos
</pre>
117 24 Constantinos Venetsanopoulos
# Run snf-image-update-helper (installed as part of the snf-image-host package), which will take care of the creation of a Debian stable-based helper VM image and the installation of $HELPER_PKG in it:
118 9 Vangelis Koukis
<pre>
119 1 Constantinos Venetsanopoulos
 $ /usr/bin/snf-image-update-helper
120 1 Constantinos Venetsanopoulos
</pre>
121 40 Constantinos Venetsanopoulos
# You are now ready to use the new snf-image OS Definition.
122 30 Constantinos Venetsanopoulos
123 31 Vangelis Koukis
h2. Sample usage
124 31 Vangelis Koukis
125 31 Vangelis Koukis
Use a command like the following to add your first Ganeti instance using snf-image. The command assumes there 
126 31 Vangelis Koukis
is an image named 'debian_base-6.0-5-x86_64.extdump' under @IMAGE_DIR@:
127 31 Vangelis Koukis
128 31 Vangelis Koukis
<pre>
129 31 Vangelis Koukis
gnt-instance add -o snf-image+default --os-parameters img_passwd=SamplePassw0rd,img_format=extdump,img_id=debian_base-6.0-5 -t plain --disk=0:size=10G --no-name-check --no-ip-check --no-nics test1
130 31 Vangelis Koukis
</pre>
131 1 Constantinos Venetsanopoulos
132 42 Constantinos Venetsanopoulos
If you want to deploy an image of type @diskdump@, you need to provide the corresponding @img_properties@ as described in the [[Image_Format#OS-parameter-img_properties|Image Format]] section. If you want to use the diskdump found in the Sample Images list, use the @img_properties@ described in the diskdump readme file.
133 42 Constantinos Venetsanopoulos
134 13 Constantinos Venetsanopoulos
h2. Developers
135 1 Constantinos Venetsanopoulos
136 23 Constantinos Venetsanopoulos
If you are a developer or want to use the latest source code you can 
137 22 Constantinos Venetsanopoulos
download the latest development version; use @git@ to clone the snf-image repository:
138 13 Constantinos Venetsanopoulos
<pre>
139 13 Constantinos Venetsanopoulos
 $ git clone https://code.grnet.gr/git/snf-image
140 18 Vangelis Koukis
</pre>
141 18 Vangelis Koukis
The _master_ branch contains the latest development version
142 18 Vangelis Koukis
The _debian_ branch contains the _master_ plus the debian packaging directories.
143 18 Vangelis Koukis
144 24 Constantinos Venetsanopoulos
For more information on how to configure, install or package from source, see the [[Developer|Developer's page]].
145 27 Nikos Skalkotos
For more information on the image format used in snf-image, see [[Image Format]].
146 19 Vangelis Koukis
147 1 Constantinos Venetsanopoulos
h2. Community & Support
148 13 Constantinos Venetsanopoulos
149 13 Constantinos Venetsanopoulos
Your help is very important. Any contributions and bug reports will be highly appreciated. You can contact the team at:
150 1 Constantinos Venetsanopoulos
151 9 Vangelis Koukis
* Bug reports - feedback - support: synnefo@lists.grnet.gr