Restore original image creation example
[snf-image-creator] / docs / usage.rst
index 90cf460..2199116 100644 (file)
@@ -194,311 +194,105 @@ 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.
 
 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.
 
-Usage example
-=============
-
-Supposing you have snf-image-creator installed on a machine (hereafter referred
-to as your **host machine**), you can follow the next steps to upload and
-register an image of an OS of your preference (hereafter referred to as your
-**guest OS**) to your synnefo deployment.
-
- * `Step 1: Install the guest OS`_
- * `Step 2: Create and upload an image of the guest OS`_
- * `Step 3: Create your VM`_
-
-
-Step 1: Install the guest OS
------------------------------
-
-The guest OS has to be installed on a media such as a block device or a regular
-raw file, that can be **accessible** by your host machine.
-
-But why is accessible empasized? Well, because you don't need to do the
-installation of the guest OS on your host machine. You can just as well install
-it on a raw file, upload it on Pithos+, download it on your host machine and
-use it for Step 2.
-
-*Note: If you have a guest OS already installed, you may want to skip the
-next step. However, be sure to check out the* `Caveats`_ *section, where
-some requirements about the guest OS are presented.*
-
-Installation example
-""""""""""""""""""""
-
-To simplify things a bit, we will install the guest OS on the host machine
-where snf-image-creator is installed. We will assume that the host machine is
-an Ubuntu 12.04 ~okeanos VM, built with max specifications (4 CPUs, 2GB of
-ram, 40GB of disk space at the time of writing this).
-
-*Note: Since the installation of the guest OS will take place on your host
-VM, you must be able to connect to it graphically. This is covered by our*
-`connection guide <https://okeanos.grnet.gr/support/user-guide/cyclades-how-do-
-i-connect-to-a-vm/#windows-linux-host-to-linux-guest-graphical>`_.
+Creating a new image
+====================
 
 
-For our guest OS, we will choose, Linux Mint, which is the most hyped Linux
-OS according to Distrowatch. A new version has just been released, so
-this seems like a fine choice. ::
+Suppose you want to create a new Ubuntu server image. Download the installation
+disk from the Internet:
 
 
-   Warning: The installation might take a long time (~1 hour) and a bit of
-   lagginess due to nested virtualization is to be expected.
+.. code-block:: console
 
 
-Fire up your terminal, go to your home directory and type the following to
-download the Linux Mint live cd::
+   $ wget http://ubuntureleases.tsl.gr/12.04.1/ubuntu-12.04.1-server-amd64.iso
 
 
-   $ wget http://ftp.ntua.gr/pub/linux/linuxmint//stable/14/linuxmint-14-mate-dvd-64 bit.iso
+Verify that it has been downloaded correctly:
 
 
-Verify that it has been downloaded correctly. If the following command
-prints "OK". then you are good to go::
+.. code-block:: console
 
 
-   $ echo 'b370ac59d1ac6362f1662cfcc22a489c linuxmint-14-mate-dvd-64bit.iso' > check.md5
+   $ echo 'a8c667e871f48f3a662f3fbf1c3ddb17  ubuntu-12.04.1-server-amd64.iso' > check.md5
    $ md5sum -c check.md5
 
    $ md5sum -c check.md5
 
-Allocate a few gigs of space to create a sparse file::
-
-   $ truncate -s 7G linuxmint.raw
+Create a 2G sparce file to host the new system:
 
 
-Use `kvm` to boot the Live CD::
-
-   $ sudo kvm -m 1200 -smp 4 -boot d -drive \
-     file=linuxmint.raw,format=raw,cache=none,if=virtio \
-     -cdrom linuxmint-14-mate-dvd-64bit.iso
+.. code-block:: console
 
 
-   At a glance, let's see what the above options do:
-     -m 1200:               Use 1200MB of RAM for the guest OS. You should
-                            allocate as much as possible
-     -smp 4:                Simulate an SMP system with 4 CPUs for the
-                            guest OS to use.
-     -boot d:               Place cdrom first in the boot order
-     file=opensuse.raw      Use this raw file as the "hard disk" for the
-                            installation
-     if=virtio:             Inform the OS that it should preload the
-                            VirtIO drivers (more on that on `Caveats`_
-                            section)
-     -cdrom linuxmint-14-mate-dvd-64bit.iso:
-                            "Insert" Linux Mint's live cd in the cdrom
-                            drive
+   $ truncate -s 2G ubuntu_hd.raw
 
 
-Wait a few seconds and then a new screen with the Linux Mint logo should
-appear. You don't have to press any key since it will boot automatically to
-Linux Mint's live desktop after a few minutes.
+And install the Ubuntu system on this file:
 
 
-|qemu-live|
+.. code-block:: console
 
 
-Choose "Install Linux Mint". The installation process should be pretty
-straightforward. Just keep two things in mind:
+   $ sudo kvm -boot d -drive file=ubuntu_hd.raw,format=raw,cache=none,if=virtio \
+     -m 1000 -cdrom ubuntu-12.04.1-server-amd64.iso
 
 
-* The username you choose will also be used later on, when you create a VM
-  from this OS image. The password, however, will be removed and you will
-  be given a new one.
-* The installed OS must have no more than one primary partition and
-  optionally a swap partition. You can read more in the `Caveats`_
-  section below. You don't have to worry about it in this installation
-  however, since the default option takes care of that.
+.. note::
 
 
-  |qemu-partition|
+   During the installation, you will be asked about the partition scheme. Since
+   snf-image-creator does not support LVM partitions, you are advised to create
+   regular partitions.
 
 
-After the installation is complete, you can close the QEMU window. You
+When the installation is complete, you can close the QEMU window. You
 will be able to boot your installed OS and make any changes you want to it
 will be able to boot your installed OS and make any changes you want to it
-using the following command::
-
-   $ sudo kvm -m 1200 -smp 4 -boot d -drive \
-   file=linuxmint.raw,format=raw,cache=none,if=virtio
-
-At the very least, you should install OpenSSH server to connect to your VM
-properly. You can install OpenSSH server using the following command::
-
-   $ sudo apt-get install openssh-server
-
-Bear in mind that once the OS image has been uploaded to your synnefo
-deployment, you will not be able to make changes to it. Since you can only
-apply changes to your raw file, you are advised to do so now and then proceed
-to Step 2.
-
-Caveats
-"""""""
-This is a list of restrictions you must have in mind while installing the
-guest OS:
-
-**Partitions**
-
-The installation must consist of no more than one primary partition. It
-can have a swap partition though, which should ideally - but not
-necessarily - be located at the end of the media. In this case, the
-uploaded image will be much smaller and the VM deployment process much
-faster.
-
-**VirtIO drivers**
-
-Depending on your synnefo-deployment, you may need to use para-virtualized
-drivers for your storage and network needs.
-
-~okeanos uses the VirtIO framework which is essential for the ~okeanos VMs
-to work properly since their disk I/O controller and Ethernet cards are
-para-virtualized.
-
-Fortunately, you will not need to deal with the installation of VirtIO drivers
-directly, since they are included in Linux kernel since version 2.6.25 and
-shipped with all the modern Linux distributions. However, if the VirtIO drivers
-are built as a module (and most modern OSes do so), they need to be preloaded
-using an initial ramdisk (initramfs), otherwise the VM you create from this OS
-image will not be able to boot.
-
-Debian derivatives will create an initial ramdisk with VirtIO included if
-they are connected during the installation on a para-virtualized interface
-(the "if=virtio" option in the Linux Mint example).
-
-In many other distros though, 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 rebuild the initial ramdisk to make the
-virtio drivers get preloaded during boot. You can read more in the `Arch
-Linux wiki <https://wiki.archlinux.org/index.php/KVM#Paravirtualized_
-guests_.28virtio.29>`_ on how to do it.
-
-For now, snf-image-creator cannot resolve this kind of problems and it's
-left to the user to do it.
-
-Step 2: Create and upload an image of the guest OS
---------------------------------------------------
+(e.g. install openssh-server) using the following command::
 
 
-This is the step on which we use snf-image-creator. There are actually two
-variants of snf-image-creator, `snf-image-creator`_ and `snf-mkimage`_, both
-achieving the same results but suited for different needs. Their scope is
-documented at the start of the `Usage`_ section of this document.
+   $ sudo kvm -m 1000 -drive file=linuxmint.raw,format=raw,cache=none,if=virtio
 
 
-*Note: Both tools take a snapshot of the installed OS on the media
-provided to them. So, any changes they apply do not affect the OS
-installed on the original media.*
+After you're done, become root, activate the virtual environment you have
+installed snf-image-creator in, and use *snf-mkimage* to create and upload the
+image:
 
 
-Let's see both tools in action. We will use them to create an image of the
-Linux Mint 14 OS we installed in Step 2.
-
-snf-mkimage
-"""""""""""
-
-In order to use snf-mkimage, simply type::
-
-   $ sudo snf-mkimage linuxmint.raw
-
-snf-mkimage will initially check if the media is indeed a single disk
-partition or a raw file representing a hard disk. Then, it will use
-heuristics to understand which OS has been installed on the media. After
-that, you will be asked which mode you prefer.
-
-|mkimage-wizard|
-
-* Wizard mode is intuitive and consists of 4 simple steps.
-* Expert mode has an abundance of options but requires a bit of knowledge
-  of the inner workings of Cyclades from your part. You can learn more on the
-  `Expert Mode`_ section of snf-mkimage.
-
-For our tutorial, we will use Wizard mode. So, choose "Wizard" and then provide
-a name for the image.
-
-|mkimage1|
-
-This name will appear on Pithos+ and on the Public Images section of Cyclades.
-
-Then, provide a description for the image.
-
-|mkimage2|
-
-This will appear under the chosen image name on the Public Images section of
-cyclades.
-
-Next, add your account e-mail
-
-|mkimage3|
-
-... your account token...
-
-|mkimage4|
-
-...and you're done! A list operations will appear on your console.
-
-|mkimage-results|
-
-We will briefly comment on the above output.
-
-* **Sysprep:** Operations from 1/9 to 9/9 are part of the system
-  preparation operations and are best explained in the snf-image-creator's
-  `sysprep`_ section.
-* **Shrinking:** When shrinking the image, we check if a swap partition
-  exists at the end of the media. If this is the case, it will be removed
-  and re-inserted upon the deployment process of the VM. Alternatively, if
-  the swap partition lies at the start of the media, it will be left
-  untouched. On both cases, the primary partition will be shrunken as much
-  as possible. On this example, we can see that the final size is 3.5GB,
-  whereas the orginal size was 7GB. This means that the image was reduced
-  by half, a pretty impressive feat.
-* **MD5SUM:** The md5sum of the image is used later on to verify that the
-  image has been uploaded successfully.
-* **Uploading:** Everytime you upload an OS image, every block is hashed,
-  checked against existing blocks in Pithos+ and finally uploaded, if no
-  other block has the same hash.
-
-  *Consider this example: You have just uploaded a Gentoo Linux image but
-  had forgotten to install a necessary package. In this case, you would
-  probably edit the OS in the raw file and then use snf-mkimage to upload
-  the new image. However, since there is an almost identical image already
-  uploaded on Pithos+, you can just as well upload only the blocks that
-  differentiate those two images. This is both time and space efficient.*
-
-Finally, after the image has been uploaded successfully, you will be asked
-whether you want to save a local copy of the **shrunken** image. This is
-just a copy of the diskdump that has been uploaded to Pithos+ and, in case
-you are confused, the original OS installed on the media (linuxmint.raw in
-our example) remains intact.
-
-snf-image-creator
-"""""""""""""""""
-
-snf-image-creator is the command-line equivalent of snf-mkimage. All the
-info provided in the steps above are given now as options, which makes it
-ideal for scripting purposes. The full set of options can be found in the
-`Usage section <#non-interactive-version>`_ of snf-image-creator's
-documentation.
-
-This tool is most commonly used with the following set of options::
-
-   $ sudo snf-image-creator linuxmint.raw -a user@email.com \
-   -t hUudl4DEIlomlnvWnv7Rlw== -u linuxmint.diskdump -r "Linux Mint 14 Nadia"
-
-As you can see, these options are exactly what snf-mkimage's steps
-translate to. You can also see that the output is nearly identical:
-
-|image-creator|
-
-Step 3: Create your VM
-----------------------
-
-Creating a VM out of an uploaded custom image is a fairly simple task.
-Just select "New Machine", go to "My Images" section and select your
-image.
+.. code-block:: console
 
 
-|custom-vm|
+   $ sudo -s
+   $ source /path/to/snf-image-env/bin/activate
+   $ snf-mkimage ubuntu_hd.raw
 
 
-Alternatively, if you want to create a VM from another user's custom
-image, you can go to the "Public Images" section.
+In the first screen you will be asked to choose if you want to run the program
+in *Wizard* or *Expert* mode. Choose *Wizard*.
 
 
-.. |qemu-live| image:: /snapshots/qemu-live.png
+.. image:: /snapshots/01_wizard.png
 
 
-.. |qemu-partition| image:: /snapshots/qemu-partition.png
+Then you will be asked to provide a name, a description, an *~okeanos* account
+and the token corresponding to this account. After that you will be asked to
+confirm the provided data.
 
 
-.. |mkimage-wizard| image:: /snapshots/mkimage-wizard.png
+.. image:: /snapshots/06_confirm.png
 
 
-.. |mkimage1| image:: /snapshots/mkimage1.png
+Choosing *YES* will create the image and upload it to your *~okeanos* account.
 
 
-.. |mkimage2| image:: /snapshots/mkimage2.png
+Some caveats on image creation
+==============================
 
 
-.. |mkimage3| image:: /snapshots/mkimage3.png
+Para-virtualized drivers
+------------------------
 
 
-.. |mkimage4| image:: /snapshots/mkimage4.png
+*~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 the driver for the para-virtualized disk I/O controller is
+built as module, it needs to be preloaded using an initial ramdisk, otherwise
+the VM will not be able to boot.
 
 
-.. |mkimage-fin| image:: /snapshots/mkimage-fin.png
+In the image creation demonstration above, we initially installed the Ubuntu
+system on a hard disk (*ubuntu_hd.raw*) that was connected on a
+para-virtualized interface (pay attention to the *if=virtio* option of the kvm
+line). Ubuntu and Debian create a generic initial ramdisk file that contains
+many different modules, including the VirtIO drivers. 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 rebuild the
+initial ramdisk [#f1]_ to make the virtio drivers get preloaded during boot.
+For now, *snf-image-creator* cannot resolve this kind of problems and it's left
+to the user to do it.
 
 
-.. |mkimage-results| image:: /snapshots/mkimage-results.png
+Swap partitions
+---------------
 
 
-.. |image-creator| image:: /snapshots/image-creator.png
+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 when shrinking and will save
+enough information to be able to recreate it during image deployment. This will
+make the image smaller and will speed up the deployment process.
 
 
-.. |custom-vm| image:: /snapshots/custom-vm.png
+.. rubric:: Footnotes
 
 
+.. [#f1] https://wiki.archlinux.org/index.php/KVM#Paravirtualized_guests_.28virtio.29