From fa77d79a98c00b71221870f0ed7b6a6ca7b23f41 Mon Sep 17 00:00:00 2001 From: Nikos Skalkotos <skalkoto@grnet.gr> Date: Wed, 17 Oct 2012 17:36:48 +0300 Subject: [PATCH] Update snf-image-creator usage documentation Add missing sections --- docs/index.rst | 2 +- docs/install.rst | 10 +-- docs/overview.rst | 18 ++--- docs/snapshots/main_menu.png | Bin 0 -> 18711 bytes docs/usage.rst | 131 +++++++++++++++++++++++++++++------ 5 files changed, 125 insertions(+), 36 deletions(-) create mode 100644 docs/snapshots/main_menu.png diff --git a/docs/index.rst b/docs/index.rst index 356d405..a27ad0f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -4,7 +4,7 @@ contain the root `toctree` directive. Welcome to snf-image-creator's documentation! -============================================= +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ snf-image-creator is an image creation tool for `Synnefo <https://code.grnet.gr/projects/synnefo>`_ diff --git a/docs/install.rst b/docs/install.rst index 9b7a9ab..7cb9cb9 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -1,5 +1,5 @@ Installation -============ +^^^^^^^^^^^^ This guide describes how to install snf-image-creator on an Ubuntu 12.04 LTS system. It it highly recommended to have virtualization capable hardware. @@ -7,7 +7,7 @@ snf-image-creator can work on processors that do not support virtualization but it will be extremely slow. Dependencies ------------- +============ snf-image-creator depends on the following programs: @@ -33,7 +33,7 @@ the following command: The rest of the dependencies will be resolved by setuptools. Python Virtual Environment --------------------------- +========================== Since snf-image-creator and the rest of it's dependencies won't be installed using packages provided by the distribution it's better to work in an isolated @@ -64,7 +64,7 @@ You can later deactivate it using the following command: kamaki Installation -------------------- +=================== Install kamaki from source, by cloning it's repository: @@ -82,7 +82,7 @@ execute: $ ./setup install snf-image-creator Installation ------------------------------- +============================== Install snf-image-creator the same way: diff --git a/docs/overview.rst b/docs/overview.rst index d823afe..55f0e15 100644 --- a/docs/overview.rst +++ b/docs/overview.rst @@ -1,5 +1,5 @@ Overview -======== +^^^^^^^^ snf-image-creator is a simple command-line tools for creating OS images. The original media from which the image is created, can be a block device or a @@ -8,18 +8,18 @@ will create a snapshot for it and will run a number of image preparation task on the snapshot, before the image is created. Snapshotting ------------- +============ snf-image-creator works on snapshots of the original media. Any changes made by the program do not affect the original media. Preparation ------------ +=========== -Some of the image preparation tasks that run on each image are OS specific. -snf-image-creator will use heuristics to detect the OS of the image and -determine which tasks should run on it. The main purpose of running those tasks -is to: +Some of the image preparation operations that run on each image are OS +specific. snf-image-creator will use heuristics to detect the OS of the image +and determine which operations should run on it. The main purpose of running +them is to: * Shrink the image * Clear out sensitive user data (passwords, ssh keys, history files, etc.) @@ -27,13 +27,13 @@ is to: names, remove persistent net rules, etc.) Creation --------- +======== The program can either dump the image file locally or directly upload it to pithos and register it with `okeanos <http://www.okeanos.grnet.gr>`_. Image Format ------------- +============ The images the program creates are in diskdump format. This is the recommended format for `snf-image <https://code.grnet.gr/projects/snf-image>`_, the Ganeti diff --git a/docs/snapshots/main_menu.png b/docs/snapshots/main_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..536eec0296b12ec9e54327070c37155e427fbdf2 GIT binary patch literal 18711 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 LEm-{J>-YZwuwUGm literal 0 HcmV?d00001 diff --git a/docs/usage.rst b/docs/usage.rst index dbeec58..a7c371e 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -1,12 +1,12 @@ Usage -===== +^^^^^ snf-image-creator comes in 2 variants: * snf-image-creator: A non-interactive command line program * snf-mkimage: A user-friendly dialog-based program Non-interactive version ------------------------ +======================= snf-image-creator receives the following options: @@ -52,20 +52,19 @@ pithos, you need to specify valid credentials with *-a* and *-t* options and a filename using *-u* option. To also register the image with ~okeanos, specify a name using the *-r* option. -By default snf-image-creator will run a number of system preparation tasks on -the snapshot of the media and will shrink the last partition found, before -extracting the image. Both can be disabled by specifying *--no-sysprep* and -*--no-shrink* respectively. +By default snf-image-creator will run a number of system preparation +preparations on the snapshot of the media and will shrink the last partition +found, before extracting the image. Both can be disabled by specifying +*--no-sysprep* and *--no-shrink* respectively. -If *--print-sysprep* is defined, then snf-image-creator will not create an -image at all. It will only run the OS detection part and will output the system -preparation tasks that would and would not run on the image. This behavior is, -convenient because it allows you to see the available system preparation tasks -that you can enable or disable with *-{enable,disable}-sysprep* options when -you create a new image. +If *--print-sysprep* is defined, then snf-image-creator will only run the OS +detection part and will output the system preparation operation that would and +would not run during image creation. This behavior is, convenient because it +allows you to see the available system preparation tasks that you can enable or +disable with *-{enable,disable}-sysprep* options when you create a new image. Running *snf-image-creator* with *--print-sysprep* on a raw file that hosts a -debian system, I get the following output: +debian system, we get the following output: .. code-block:: console @@ -133,14 +132,68 @@ removed, you can create it specifying the *--enable-sysprep* option like this: $ snf-image-creator --enable-sysprep cleanup-mail,remove-user-accounts ... Dialog-based version --------------------- +==================== +*snf-mkimage* receives the following options: + +.. code-block:: console + + $ Usage: snf-mkimage [options] [<input_media>] + + Options: + --version show program's version number and exit + -h, --help show this help message and exit + -l FILE, --logfile=FILE + log all messages to FILE + +If the input media is not specified in the command line, then the user will be +asked to specify it in the first dialog box. After the input media is examined +and the program is initialized, the user is given the choice to run +*snf-mkimage* in *wizard* or *expert* mode. + +Wizard mode +----------- + +When *snf-mkimage* runs in *wizard* mode, the user is just asked to provide the +following basic information: + + * Name: A short name for image (ex. "Slackware") + * Description: An one line description for the image (ex. "Slackware Linux 14.0 with KDE") + * Account: An ~okeanos account e-mail + * Token: A token corresponding to the account defined previously + +For most users the functionality this mode provides should be sufficient. + +Expert mode +----------- + +Expert mode allows the user to have better control on the image creation +process. In the picture below the main menu can be seen: + +.. image:: /snapshots/main_menu.png + +In the *Customize* submenu the user can control: + + * The system preparation operations that will run during the image creation process + * Whether the image will be shrunk or not + * The properties associated with the image + * Which configuration tasks will run during image deployment + +In the *Register* submenu the user can provide: + + * The credentials to login to ~okeanos + * A pithos filename for the uploaded diskdump image + * A name for the image to be registered to ~okeanos with + +By choosing the *Extract* menu entry the user can dump the image to the local +file system and finally, if the user selects *Reset*, the system will ignore +all changes made so far and will start the image creation process again. Creating a new image --------------------- +==================== -Suppose you want to create a new ubuntu server image. Download the installation -disk from the internet: +Suppose you want to create a new Ubuntu server image. Download the installation +disk from the Internet: .. code-block:: console @@ -152,15 +205,16 @@ Create a 2G sparce file to host the new system: $ truncate -s 2G ubuntu_hd.raw -And install the ubuntu system on this file: +And install the Ubuntu system on this file: .. code-block:: console $ sudo kvm -boot d -drive file=ubuntu_hd.raw,format=raw,cache=none,if=virtio \ -cdrom ubuntu-12.04.1-server-amd64.iso -After this, become root, activate the virtual environment you have installed -snf-image-creator in, and use *snf-mkimage* to create and upload the image: +After the installation finishes, become root, activate the virtual environment +you have installed snf-image-creator in, and use *snf-mkimage* to create and +upload the image: .. code-block:: console @@ -169,7 +223,7 @@ snf-image-creator in, and use *snf-mkimage* to create and upload the image: $ snf-mkimage ubuntu_hd.raw In the first screen you will be asked to choose if you want to run the program -in *Wizand* or *Expert* mode. Choose *Wizard*. +in *Wizard* or *Expert* mode. Choose *Wizard*. .. image:: /snapshots/01_wizard.png @@ -181,3 +235,38 @@ confirm the provided data. Choosing *YES* will create the image and upload it to your ~okeanos account. +Things you need to pay attention on when creating images +======================================================== + +Para-virtualized drivers +------------------------ + +~Okeanos uses the VirtIO framework. The disk I/O controller and the Ethernet +cards on the VM instances are para-virtualized and need special VirtIO drivers. +Those drivers are included in the Linux Kernel mainline since version 2.6.25 +and are shipped with all the popular Linux distributions. The problem is that +if those drivers are built as modules, they need to be preloaded using an +initial ramdisk, otherwise the VM will not be able to boot. + +In the image creation demonstration above, we initially installed the Ubuntu +system on a a hard disk (ubuntu_hd.raw) that was para-virtualized (pay +attention on the *if=virtio* option of the kvm line). The Ubuntu installer +detected that the disk was paravirtualized and made sure the appropriate +drivers will be preloaded each time the system boots. In many distros this is +not the case. In Arch Linux for example, the user needs to manually add +*virtio_blk* and *virtio_pci* drivers in */etc/mkinitcpio.conf* and then +rebuild the initial ramdisk [#f1]_ to make the virtio drivers get preloaded +during boot. + +Swap partitions +--------------- + +If you want your image to have a swap partitions, make sure this is the last +partition on the disk. If snf-image-creator detects a swap partition in the end +of the input media, it will remove the partition during shrinking and will save +enough information to be able to recreate it during image deployment. This will +make your image smaller and will speed up the deployment process. + +.. rubric:: Footnotes + +.. [#f1] https://wiki.archlinux.org/index.php/KVM#Paravirtualized_guests_.28virtio.29 -- GitLab