Ganeti quick installation guide
===============================

Please note that a more detailed installation procedure is described in
the :doc:`install`. Refer to it if you are setting up Ganeti the first time.
This quick installation guide is mainly meant as reference for experienced
users. A glossary of terms can be found in the :doc:`glossary`.


Software Requirements
---------------------

.. highlight:: shell-example

Before installing, please verify that you have the following programs:

- `Xen Hypervisor <http://www.xen.org/>`_, version 3.0 or above, if
  running on Xen
- `KVM Hypervisor <http://www.linux-kvm.org>`_, version 72 or above, if
  running on KVM. In order to use advanced features, such as live
  migration, virtio, etc, an even newer version is recommended (qemu-kvm
  versions 0.11.X and above have shown good behavior).
- `DRBD <http://www.drbd.org/>`_, kernel module and userspace utils,
  version 8.0.7 or above; note that Ganeti doesn't yet support version 8.4
- `RBD <http://ceph.newdream.net/>`_, kernel modules
  (``rbd.ko``/``libceph.ko``) and userspace utils (``ceph-common``)
- `LVM2 <http://sourceware.org/lvm2/>`_
- `OpenSSH <http://www.openssh.com/portable.html>`_
- `bridge utilities <http://www.linuxfoundation.org/en/Net:Bridge>`_
- `iproute2 <http://www.linuxfoundation.org/en/Net:Iproute2>`_
- `arping <http://www.skbuff.net/iputils/>`_ (part of iputils)
- `ndisc6 <http://www.remlab.net/ndisc6/>`_ (if using IPv6)
- `Python <http://www.python.org/>`_, version 2.6 or above, not 3.0
- `Python OpenSSL bindings <http://pyopenssl.sourceforge.net/>`_
- `simplejson Python module <http://code.google.com/p/simplejson/>`_
- `pyparsing Python module <http://pyparsing.wikispaces.com/>`_, version
  1.4.6 or above
- `pyinotify Python module <https://github.com/seb-m/pyinotify>`_
- `PycURL Python module <http://pycurl.sourceforge.net/>`_
- `socat <http://www.dest-unreach.org/socat/>`_, see :ref:`note
  <socat-note>` below
- `Paramiko <http://www.lag.net/paramiko/>`_, if you want to use
  ``ganeti-listrunner``
- `affinity Python module <http://pypi.python.org/pypi/affinity/0.1.0>`_,
  optional python package for supporting CPU pinning under KVM
- `fdsend Python module <https://gitorious.org/python-fdsend>`_,
  optional Python package for supporting NIC hotplugging under KVM
- `qemu-img <http://qemu.org/>`_, if you want to use ``ovfconverter``
- `fping <http://fping.sourceforge.net/>`_
- `Python IP address manipulation library
  <http://code.google.com/p/ipaddr-py/>`_
- `Bitarray Python library <http://pypi.python.org/pypi/bitarray/>`_
- `GNU Make <http://www.gnu.org/software/make/>`_
- `GNU M4 <http://www.gnu.org/software/m4/>`_

These programs are supplied as part of most Linux distributions, so
usually they can be installed via the standard package manager. Also
many of them will already be installed on a standard machine. On
Debian/Ubuntu, you can use this command line to install all required
packages, except for RBD, DRBD and Xen::

  $ apt-get install lvm2 ssh bridge-utils iproute iputils-arping make m4 \
                    ndisc6 python python-openssl openssl \
                    python-pyparsing python-simplejson python-bitarray \
                    python-pyinotify python-pycurl python-ipaddr socat fping

For older distributions (eg. Debian  Squeeze) the package names are
different.::

  $ apt-get install lvm2 ssh bridge-utils iproute iputils-arping make \
                    ndisc6 python python-pyopenssl openssl \
                    python-pyparsing python-simplejson python-bitarray \
                    python-pyinotify python-pycurl python-ipaddr socat fping

If bitarray is missing it can be installed from easy-install::

  $ easy_install bitarray

Note that this does not install optional packages::

  $ apt-get install python-paramiko python-affinity qemu-utils

If some of the python packages are not available in your system,
you can try installing them using ``easy_install`` command.
For example::

  $ apt-get install python-setuptools python-dev
  $ cd / && easy_install \
            affinity \
            bitarray \
            ipaddr


On Fedora to install all required packages except RBD, DRBD and Xen::

  $ yum install openssh openssh-clients bridge-utils iproute ndisc6 make \
                pyOpenSSL pyparsing python-simplejson python-inotify \
                python-lxm socat fping python-bitarray python-ipaddr

For optional packages use the command::

  $ yum install python-paramiko python-affinity qemu-img

If you want to build from source, please see doc/devnotes.rst for more
dependencies.

.. _socat-note:
.. note::
  Ganeti's import/export functionality uses ``socat`` with OpenSSL for
  transferring data between nodes. By default, OpenSSL 0.9.8 and above
  employ transparent compression of all data using zlib if supported by
  both sides of a connection. In cases where a lot of data is
  transferred, this can lead to an increased CPU usage. Additionally,
  Ganeti already compresses all data using ``gzip`` where it makes sense
  (for inter-cluster instance moves).

  To remedey this situation, patches implementing a new ``socat`` option
  for disabling OpenSSL compression have been contributed and will
  likely be included in the next feature release. Until then, users or
  distributions need to apply the patches on their own.

  Ganeti will use the option if it's detected by the ``configure``
  script; auto-detection can be disabled by explicitly passing
  ``--enable-socat-compress`` (use the option to disable compression) or
  ``--disable-socat-compress`` (don't use the option).

  The patches and more information can be found on
  http://www.dest-unreach.org/socat/contrib/socat-opensslcompress.html.

Haskell requirements
~~~~~~~~~~~~~~~~~~~~

Starting with Ganeti 2.7, the Haskell GHC compiler and a few base
libraries are required in order to build Ganeti (but not to run and
deploy Ganeti on production machines). More specifically:

- `GHC <http://www.haskell.org/ghc/>`_ version 6.12 or higher
- or even better, `The Haskell Platform
  <http://hackage.haskell.org/platform/>`_ which gives you a simple way
  to bootstrap Haskell
- `json <http://hackage.haskell.org/package/json>`_, a JSON library
- `network <http://hackage.haskell.org/package/network>`_, a basic
  network library
- `parallel <http://hackage.haskell.org/package/parallel>`_, a parallel
  programming library (note: tested with up to version 3.x)
- `bytestring <http://hackage.haskell.org/package/bytestring>`_ and
  `utf8-string <http://hackage.haskell.org/package/utf8-string>`_
  libraries; these usually come with the GHC compiler
- `deepseq <http://hackage.haskell.org/package/deepseq>`_
- `curl <http://hackage.haskell.org/package/curl>`_, tested with
  versions 1.3.4 and above
- `hslogger <http://software.complete.org/hslogger>`_, version 1.1 and
  above (note that Debian Squeeze only has version 1.0.9)

Some of these are also available as package in Debian/Ubuntu::

  $ apt-get install ghc libghc-json-dev libghc-network-dev \
                    libghc-parallel-dev libghc-deepseq-dev \
                    libghc-utf8-string-dev libghc-curl-dev \
                    libghc-hslogger-dev 

Or in older versions of these distributions (using GHC 6.x)::

  $ apt-get install ghc6 libghc6-json-dev libghc6-network-dev \
                    libghc6-parallel-dev libghc6-deepseq-dev \
                    libghc6-curl-dev

In Fedora, some of them are available via packages as well::

  $ yum install ghc ghc-json-devel ghc-network-devel \
                    ghc-parallel-devel ghc-deepseq-devel

If using a distribution which does not provide them, first install
the Haskell platform. You can also install ``cabal`` manually::

  $ apt-get install cabal-install
  $ cabal update

Then install the additional libraries (only the ones not available in your
distribution packages) via ``cabal``::

  $ cabal install json network parallel utf8-string curl hslogger

Haskell optional features
~~~~~~~~~~~~~~~~~~~~~~~~~

Optionally, more functionality can be enabled if your build machine has
a few more Haskell libraries enabled: the ``ganeti-confd`` and
``ganeti-luxid`` daemon (``--enable-confd``) and the monitoring daemon
(``--enable-mond``). The list of extra dependencies for these is:

- `Crypto <http://hackage.haskell.org/package/Crypto>`_, tested with
  version 4.2.4
- `text <http://hackage.haskell.org/package/text>`_
- `hinotify <http://hackage.haskell.org/package/hinotify>`_, tested with
  version 0.3.2
- `regex-pcre <http://hackage.haskell.org/package/regex-pcre>`_,
  bindings for the ``pcre`` library
- `attoparsec <http://hackage.haskell.org/package/attoparsec>`_
- `vector <http://hackage.haskell.org/package/vector>`_
- `snap-server` <http://hackage.haskell.org/package/snap-server>`_, version
  0.8.1 and above.
- `process <http://hackage.haskell.org/package/process>`_, version 1.0.1.1 and
  above

These libraries are available in Debian Wheezy (but not in Squeeze), so you
can use either apt::

  $ apt-get install libghc-crypto-dev libghc-text-dev \
                    libghc-hinotify-dev libghc-regex-pcre-dev \
                    libpcre3-dev \
                    libghc-attoparsec-dev libghc-vector-dev \
                    libghc-snap-server-dev

or ``cabal``, after installing a required non-Haskell dependency::

  $ apt-get install libpcre3-dev libcurl4-openssl-dev
  $ cabal install Crypto text hinotify==0.3.2 regex-pcre \
                  attoparsec vector snap-server

to install them.

In case you still use ghc-6.12, note that ``cabal`` would automatically try to
install newer versions of some of the libraries snap-server depends on, that
cannot be compiled with ghc-6.12, so you have to install snap-server on its
own, explicitly forcing the installation of compatible versions::

  $ cabal install MonadCatchIO-transformers==0.2.2.0 mtl==2.0.1.0 \
                  hashable==1.1.2.0 case-insensitive==0.3 parsec==3.0.1 \
                  network==2.3 snap-server==0.8.1

The most recent Fedora doesn't provide ``crypto``, ``inotify``. So these
need to be installed using ``cabal``, if desired. The other packages can
be installed via ``yum``::

  $ yum install ghc-hslogger-devel ghc-text-devel \
                ghc-regex-pcre-devel

.. _cabal-note:
.. note::
  If one of the cabal packages fails to install due to unfulfilled
  dependencies, you can try enabling symlinks in ``~/.cabal/config``.

  Make sure that your ``~/.cabal/bin`` directory (or whatever else
  is defined as ``bindir``) is in your ``PATH``.

Installation of the software
----------------------------

To install, simply run the following command::

  $ ./configure --localstatedir=/var --sysconfdir=/etc && \
    make && \
    make install

This will install the software under ``/usr/local``. You then need to
copy ``doc/examples/ganeti.initd`` to ``/etc/init.d/ganeti`` and
integrate it into your boot sequence (``chkconfig``, ``update-rc.d``,
etc.).


Cluster initialisation
----------------------

Before initialising the cluster, on each node you need to create the
following directories:

- ``/etc/ganeti``
- ``/var/lib/ganeti``
- ``/var/log/ganeti``
- ``/srv/ganeti``
- ``/srv/ganeti/os``
- ``/srv/ganeti/export``

After this, use ``gnt-cluster init``.

.. vim: set textwidth=72 syntax=rst :
.. Local Variables:
.. mode: rst
.. fill-column: 72
.. End:
