Make winexe an optional dependency
[snf-image-creator] / docs / usage.rst
index ce8c99d..fc99172 100644 (file)
@@ -17,44 +17,58 @@ snf-image-creator receives the following options:
 
 .. code-block:: console
 
- $ snf-image-creator --help
- Usage: snf-image-creator [options] <input_media>
-
- Options:
-   --version             show program's version number and exit
-   -h, --help            show this help message and exit
-   -o FILE, --outfile=FILE
-                         dump image to FILE
-   -f, --force           overwrite output files if they exist
-   -s, --silent          output only errors
-   -u FILENAME, --upload=FILENAME
-                         upload the image to pithos with name FILENAME
-   -r IMAGENAME, --register=IMAGENAME
-                         register the image with ~okeanos as IMAGENAME
-   -a ACCOUNT, --account=ACCOUNT
-                         use this ACCOUNT when uploading/registering images
-                         [Default: None]
-   -m KEY=VALUE, --metadata=KEY=VALUE
-                         add custom KEY=VALUE metadata to the image
-   -t TOKEN, --token=TOKEN
-                         use this token when uploading/registering images
-                         [Default: None]
-   --print-sysprep       print the available enabled and disabled system
-                         preparation operations for this input media
-   --enable-sysprep=SYSPREP
-                         run SYSPREP operation on the input media
-   --disable-sysprep=SYSPREP
-                         prevent SYSPREP operation from running on the input
-                         media
-   --no-sysprep          don't perform any system preparation operation
-   --no-shrink           don't shrink the image
-   --tmpdir=DIR          create large temporary image files under DIR
+  $ snf-image-creator --help
+  Usage: snf-image-creator [options] <input_media>
+
+  Options:
+    --version             show program's version number and exit
+    -h, --help            show this help message and exit
+    -o FILE, --outfile=FILE
+                          dump image to FILE
+    -f, --force           overwrite output files if they exist
+    -s, --silent          output only errors
+    -u FILENAME, --upload=FILENAME
+                          upload the image to the cloud with name FILENAME
+    -r IMAGENAME, --register=IMAGENAME
+                          register the image with a cloud as IMAGENAME
+    -m KEY=VALUE, --metadata=KEY=VALUE
+                          add custom KEY=VALUE metadata to the image
+    -t TOKEN, --token=TOKEN
+                          use this authentication token when
+                          uploading/registering images
+    -a URL, --authentication-url=URL
+                          use this authentication URL when uploading/registering
+                          images
+    -c CLOUD, --cloud=CLOUD
+                          use this saved cloud account to authenticate against a
+                          cloud when uploading/registering images
+    --print-syspreps      print the enabled and disabled system preparation
+                          operations for this input media
+    --enable-sysprep=SYSPREP
+                          run SYSPREP operation on the input media
+    --disable-sysprep=SYSPREP
+                          prevent SYSPREP operation from running on the input
+                          media
+    --print-sysprep-params
+                          print the needed sysprep parameters for this input
+                          media
+    --sysprep-param=SYSPREP_PARAMS
+                          Add KEY=VALUE system preparation parameter
+    --no-sysprep          don't perform any system preparation operation
+    --no-shrink           don't shrink any partition
+    --public              register image with the cloud as public
+    --tmpdir=DIR          create large temporary image files under DIR
 
 Most input options are self-describing. If you want to save a local copy of
 the image you create, provide a filename using the *-o* option. To upload the
-image to *pithos+*, provide valid credentials using *-a* and *-t* and a
-filename using *-u*. If you also want to register the image with *~okeanos*, in
-addition to *-u* provide a registration name using *-r*.
+image to the storage service of a cloud, provide valid cloud API access info
+(by either using a token and a URL with *-t* and *-a* respectively, or a cloud
+name with *-c*) and a remote filename using *-u*. If you also want to register
+the image with the compute service of the cloud, in addition to *-u* provide a
+registration name using *-r*. All images are
+registered as *private*. Only the user that registers the image can create
+VM's out of it. If you want the image to be visible by other user too, use the
+*--public* option.
 
 By default, before extracting the image, snf-image-creator will perform a
 number of system preparation operations on the snapshot of the media and will
@@ -74,61 +88,62 @@ debian system, we print the following output:
 
 .. code-block:: console
 
-   $ snf-image-creator --print-sysprep debian_desktop.img
-
-   snf-image-creator 0.1
+   $ snf-image-creator --print-sysprep ubuntu.raw
+   snf-image-creator 0.3
    =====================
-   Examining source media `debian_desktop.img'... looks like an image file
-   Snapshotting media source... done
+   Examining source media `ubuntu_hd.raw' ... looks like an image file
+   Snapshotting media source ... done
    Enabling recovery proc
-   Launching helper VM... done
-   Inspecting Operating System... found a(n) debian system
-   Mounting the media read-only... done
-
+   Launching helper VM (may take a while) ... done
+   Inspecting Operating System ... ubuntu
+   Mounting the media read-only ... done
+   Collecting image metadata ... done
+   Umounting the media ... done
+   
    Enabled system preparation operations:
        cleanup-cache:
-       Remove all regular files under /var/cache
-
+           Remove all regular files under /var/cache
+   
        cleanup-log:
-       Empty all files under /var/log
-
+           Empty all files under /var/log
+   
        cleanup-passwords:
-       Remove all passwords and lock all user accounts
-
+           Remove all passwords and lock all user accounts
+   
        cleanup-tmp:
-       Remove all files under /tmp and /var/tmp
-
+           Remove all files under /tmp and /var/tmp
+   
        cleanup-userdata:
-       Delete sensitive userdata
-
+           Delete sensitive userdata
+   
        fix-acpid:
-       Replace acpid powerdown action scripts to immediately shutdown the
-       system without checking if a GUI is running.
-
+           Replace acpid powerdown action scripts to immediately shutdown the
+           system without checking if a GUI is running.
+   
        remove-persistent-net-rules:
-       Remove udev rules that will keep network interface names persistent
-       after hardware changes and reboots. Those rules will be created again
-       the next time the image runs.
-
+           Remove udev rules that will keep network interface names persistent
+           after hardware changes and reboots. Those rules will be created again
+           the next time the image runs.
+   
        remove-swap-entry:
-       Remove swap entry from /etc/fstab. If swap is the last partition
-       then the partition will be removed when shrinking is performed. If the
-       swap partition is not the last partition in the disk or if you are not
-       going to shrink the image you should probably disable this.
-
+           Remove swap entry from /etc/fstab. If swap is the last partition
+           then the partition will be removed when shrinking is performed. If the
+           swap partition is not the last partition in the disk or if you are not
+           going to shrink the image you should probably disable this.
+   
        use-persistent-block-device-names:
-       Scan fstab & grub configuration files and replace all non-persistent
-       device references with UUIDs.
-
+           Scan fstab & grub configuration files and replace all non-persistent
+           device references with UUIDs.
+   
    Disabled system preparation operations:
        cleanup-mail:
-       Remove all files under /var/mail and /var/spool/mail
-
+           Remove all files under /var/mail and /var/spool/mail
+   
        remove-user-accounts:
-       Remove all user accounts with id greater than 1000
-
-
-   cleaning up...
+           Remove all user accounts with id greater than 1000
+   
+   
+   cleaning up ...
 
 If you want the image to have all normal user accounts and all mail files
 removed, you should use *--enable-sysprep* option like this:
@@ -172,15 +187,15 @@ Wizard mode
 When *snf-mkimage* runs in *wizard* mode, the user is just asked to provide the
 following basic information:
 
+ * Cloud: The cloud account to use to upload and register the resulting image
  * Name: A short name for the image (ex. "Slackware")
  * Description: An one-line description for the image
    (ex. "Slackware Linux 14.0 with KDE")
- * Account: An *~okeanos* account email
- * Token: A token corresponding to the account given above
+ * Registration Type: Private or Public
 
-After confirming, the image will be extracted, uploaded to *pithos+* and
-registered with *~okeanos*. The user will also be given the choice to keep a
-local copy of it.
+After confirming, the image will be extracted, uploaded to the storage service
+and registered with the compute service of the selected cloud. The user will
+also be given the choice to keep a local copy of it.
 
 For most users the functionality this mode provides should be sufficient.
 
@@ -201,9 +216,10 @@ In the *Customize* sub-menu the user can control:
 
 In the *Register* sub-menu 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
+ * Which cloud account to use
+ * A filename for the uploaded *diskdump* image
+ * A name for the image to use when registering it with the storage service of
+   the cloud, as well as the registration type (*private* or *public*)
 
 By choosing the *Extract* menu entry, the user can dump the image to the local
 file system. Finally, if the user selects *Reset*, the system will ignore
@@ -217,38 +233,38 @@ system that runs the program. This is done either by specifying / as input
 media or by using the *Bundle Host* button in the media selection dialog of
 snf-mkimage. During this operation, the files of the disk are copied into a
 temporary image file, which means that the file system that will host the
-temporary image needs to have a lot of free space (see `the tmpdir option`_
+temporary image needs to have a lot of free space (see `large temporary files`_
 for more information).
 
 Creating a new image
 ====================
 
-Suppose you want to create a new Ubuntu server image. Download the installation
-disk from the Internet:
+Suppose your host system is a Debian Wheezy and you want to create a new Ubuntu
+server image. Download the installation disk from the Internet:
 
 .. code-block:: console
 
-   $ wget http://ubuntureleases.tsl.gr/12.04.1/ubuntu-12.04.1-server-amd64.iso
+   $ wget http://ubuntureleases.tsl.gr/12.04.2/ubuntu-12.04.2-server-amd64.iso
 
 Verify that it has been downloaded correctly:
 
 .. code-block:: console
 
-   $ echo 'a8c667e871f48f3a662f3fbf1c3ddb17  ubuntu-12.04.1-server-amd64.iso' > check.md5
+   $ echo 'a8c667e871f48f3a662f3fbf1c3ddb17  ubuntu-12.04.2-server-amd64.iso' > check.md5
    $ md5sum -c check.md5
 
 Create a 2G sparse file to host the new system:
 
 .. code-block:: console
 
-   $ truncate -s 2G ubuntu_hd.raw
+   $ truncate -s 2G ubuntu.raw
 
 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 \
-     -m 1G -cdrom ubuntu-12.04.1-server-amd64.iso
+   $ sudo kvm -boot d -drive file=ubuntu.raw,format=raw,cache=none,if=virtio \
+     -m 1G -cdrom ubuntu-12.04.2-server-amd64.iso
 
 .. warning::
 
@@ -256,9 +272,11 @@ And install the Ubuntu system on this file:
    use LVM partitions. They are not supported by snf-image-creator.
 
 You will be able to boot your installed OS and make any changes you want
-(e.g. install openssh-server) using the following command::
+(e.g. install openssh-server) using the following command:
+
+.. code-block:: console
 
-   $ sudo kvm -m 1G -boot c -drive file=ubuntu_hd.raw,format=raw,cache=none,if=virtio
+   $ sudo kvm -m 1G -boot c -drive file=ubuntu.raw,format=raw,cache=none,if=virtio
 
 After you're done, you may use *snf-mkimage* as root to create and upload the
 image:
@@ -266,45 +284,70 @@ image:
 .. code-block:: console
 
    $ sudo -s
-   $ snf-mkimage ubuntu_hd.raw
+   $ snf-mkimage ubuntu.raw
 
 In the first screen you will be asked to choose if you want to run the program
 in *Wizard* or *Expert* mode. Choose *Wizard*.
 
-.. image:: /snapshots/01_wizard.png
+.. image:: /snapshots/wizard.png
 
-Then you will be asked to provide a name, a description, an *~okeanos* account
-and the token corresponding to this account. Finally, you'll be asked to
+Then you will be asked to select a cloud and provide a name, a description and
+a registration type (*private* or *public*). Finally, you'll be asked to
 confirm the provided data.
 
-.. image:: /snapshots/06_confirm.png
+.. image:: /snapshots/confirm.png
 
-Choosing *YES* will create and upload the image to your *~okeanos* account.
+Choosing *YES* will create and upload the image to your cloud account.
 
-Some caveats on image creation
-==============================
+Limitations
+===========
+
+Supported operating systems
+---------------------------
+
+*snf-image-creator* can only fully function on input media hosting *Linux*,
+*FreeBSD* (tested on version 9.1) and *Windows* (Server 2008 R2 and Server
+2012) systems. The program will detect the needed metadata and you may use it
+to upload and register other *Unix* images, but you cannot use it to shrink
+them or perform system preparation operations.
+
+Logical Volumes
+---------------
+
+The program cannot work on LVM partitions [#f1]_. The input media may only
+contain primary or logical partitions.
 
 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 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 won't be able to boot.
+Most synnefo deployments 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 won't be able to boot.
 
 Many popular Linux distributions, like Ubuntu and Debian, will automatically
 create a generic initial ramdisk file that contains many different modules,
 including the VirtIO drivers. Others that target more experienced users, like
-Slackware, won't do that [#f1]_. *snf-image-creator* cannot resolve this kind
+Slackware, won't do that [#f2]_. *snf-image-creator* cannot resolve this kind
 of problems and it's left to the user to do so. Please refer to your
 distribution's documentation for more information on this. You can always check
 if a system can boot with para-virtualized disk controller by launching it with
 kvm using the *if=virtio* option (see the kvm command in the
 `Creating a new image`_ section).
 
+For Windows and FreeBSD systems, the needed drivers need to be manually
+downloaded and installed on the media before the image creation process takes
+place. For *FreeBSD* the virtio drivers can be found
+`here <http://people.freebsd.org/~kuriyama/virtio/>`_. For Windows the drivers
+are hosted by the
+`Fedora Project <http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/>`_.
+
+Some caveats on image creation
+==============================
+
 Image partition schemes and shrinking
 -------------------------------------
 
@@ -322,8 +365,8 @@ Keep this in mind when creating images. It's always better to have your swap
 partition placed as the last partition on the disk and have your largest
 partition (*/* or */home*) just before that.
 
-The tmpdir option
------------------
+Large temporary files
+---------------------
 
 *snf-image-creator* may create large temporary files when running:
 
@@ -343,4 +386,5 @@ supported by both *snf-image-creator* and *snf-mkimage*.
 
 .. rubric:: Footnotes
 
-.. [#f1] http://mirrors.slackware.com/slackware/slackware-14.0/README.initrd
+.. [#f1] http://sourceware.org/lvm2/
+.. [#f2] http://mirrors.slackware.com/slackware/slackware-14.0/README.initrd