From 0416bac5632be698186934f47be44a9569f14014 Mon Sep 17 00:00:00 2001 From: Nikos Skalkotos Date: Mon, 16 Sep 2013 13:22:48 +0300 Subject: [PATCH] Update the documentation (part 1) Fill in the architecture section of the documentation --- docs/architecture.rst | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ docs/images/arch.png | Bin 0 -> 56471 bytes docs/images/logo.png | Bin 0 -> 9543 bytes docs/index.rst | 34 +++++++++++++++++++++++++++ docs/installation.rst | 2 ++ docs/usage.rst | 2 ++ 6 files changed, 100 insertions(+) create mode 100644 docs/_static create mode 100644 docs/architecture.rst create mode 100644 docs/images/arch.png create mode 100644 docs/images/logo.png create mode 100644 docs/installation.rst create mode 100644 docs/usage.rst diff --git a/docs/_static b/docs/_static new file mode 100644 index 0000000..e69de29 diff --git a/docs/architecture.rst b/docs/architecture.rst new file mode 100644 index 0000000..e236d44 --- /dev/null +++ b/docs/architecture.rst @@ -0,0 +1,62 @@ +Architecture +============ + +snf-image is split in two components: The main program running on the Ganeti +host, with full root privilege (*snf-image* previously *snf-image-host*), and a +part running inside an unprivileged, helper VM (*snf-image-helper*). + +snf-image +^^^^^^^^^ + +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. + +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 to automate the +creation of a helper VM image based on Debian Stable, using multistrap. + +The snf-image-helper component is spawned inside a specific hardware +environment: + + * The VM features a virtual floppy, containing an ext2 filesystem with all + parameters needed for image customization. + * The hard disk of the VM being deployed is accessible as the first virtio + hard disk. + * 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. + * The helper VM is expected to output "SUCCESS" to its second serial port if + image customization was successful inside the VM. + * In any other case, execution of the helper VM or snf-image-helper has + failed. + * 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. + +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. + +snf-image-helper +^^^^^^^^^^^^^^^^ + +This part runs inside the helper VM and undertakes customization of the VM +being deployed using a number of hooks, or tasks. The tasks run in an +environment, specified by rules found in a virtual floppy, placed there by +*snf-image*. *snf-image-helper* uses runparts to run tasks found under +*/usr/lib/snf-image-helper/tasks* by default + +Graphical Representation +^^^^^^^^^^^^^^^^^^^^^^^^ + +The architecture is presented below: + +.. image:: /images/arch.png + + diff --git a/docs/images/arch.png b/docs/images/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..58208a2a90dbd4e2ecba43e6c71bfca5cfdaf5b3 GIT binary patch literal 56471 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 WC0V$4 literal 0 HcmV?d00001 diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf4d0d3f380fce78760ee0152ca9c0d5ee1f60d GIT binary patch literal 9543 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 XSrx=esyGglQD};?YBH5lra}J$4R}Jm literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index 89e2197..89b26b3 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -6,11 +6,45 @@ Welcome to snf-image's documentation! ===================================== +.. image:: /images/logo.png + +snf-image is a `Ganeti `_ OS definition, +primary used by `Synnefo `_. 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. + +snf-image supports `KVM `_ and +`Xen `_ based ganeti clusters. + +There are also additional hooks that can be enabled at image deployment. They +allow for: + + * changing the password of root or arbitrary users + * injecting files at arbitrary locations inside the filesystem, e.g., SSH keys + * setting a custom hostname + * re-creating SSH host keys to ensure the image uses unique keys + +snf-image has been used successfully to deploy many major Linux distributions +(Debian, Ubuntu/Kubuntu, CentOS, Fedora, OpenSUSE), Windows 2008 R2 & Windows +Server 2012, as well as FreeBSD 9.1 + +The snf-image Ganeti OS Definition is released under +`GPLv2 `_. + + + Contents: +^^^^^^^^^ .. toctree:: :maxdepth: 2 + architecture + installation + usage + Indices and tables ================== diff --git a/docs/installation.rst b/docs/installation.rst new file mode 100644 index 0000000..11e4437 --- /dev/null +++ b/docs/installation.rst @@ -0,0 +1,2 @@ +Installation +============ diff --git a/docs/usage.rst b/docs/usage.rst new file mode 100644 index 0000000..d4b9a15 --- /dev/null +++ b/docs/usage.rst @@ -0,0 +1,2 @@ +Usage +===== -- 1.7.10.4