+.. _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 explicitely 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
+~~~~~~~~~~~~~~~~~~~~
+
+If you want to enable the `htools` component, which is recommended on
+bigger deployments (this give you automatic instance placement, cluster
+balancing, etc.), then you need to have a Haskell compiler installed on
+your build machine (but this is not required on the machines which are
+just going to run Ganeti). 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)
+- `curl <http://hackage.haskell.org/package/curl>`_, bindings for the
+ curl library, only needed if you want these tools to connect to remote
+ clusters (as opposed to the local one)
+
+All of these are also available as package in Debian/Ubuntu::
+
+ $ apt-get install ghc6 libghc6-json-dev libghc6-network-dev \
+ libghc6-parallel-dev libghc6-curl-dev
+
+Or in Fedora running::
+
+ $ yum install ghc ghc-json-devel ghc-network-devel ghc-parallel-devel
+
+The most recent Fedora doesn't provide ``ghc-curl``. So this needs to be
+installed using ``cabal`` or alternatively htools can be build without
+curl support.
+
+Note that more recent version have switched to GHC 7.x and the packages
+were renamed::
+
+ $ apt-get install ghc libghc-json-dev libghc-network-dev \
+ libghc-parallel-dev libghc-curl-dev
+
+If using a distribution which does not provide them, first install
+the Haskell platform. You can also install ``cabal`` manualy::
+
+ $ apt-get install cabal-install
+
+Then install the additional libraries via
+``cabal``::
+
+ $ cabal install json network parallel curl
+
+The compilation of the htools components is automatically enabled when
+the compiler and the requisite libraries are found. You can use the
+``--enable-htools`` configure flag to force the selection (at which
+point ``./configure`` will fail if it doesn't find the prerequisites).
+
+In Ganeti version 2.6, one of the daemons (``ganeti-confd``) is shipped
+in two versions: the Python default version (which has no extra
+dependencies), and an experimental Haskell version. This latter version
+can be enabled via the ``./configure`` flag ``--enable-confd=haskell``
+and a few has extra dependencies:
+
+- `hslogger <http://software.complete.org/hslogger>`_, version 1.1 and
+ above (note that Debian Squeeze only has version 1.0.9)
+- `Crypto <http://hackage.haskell.org/package/Crypto>`_, tested with
+ version 4.2.4
+- `text <http://hackage.haskell.org/package/text>`_
+- ``bytestring``, which usually comes with the compiler
+- `hinotify <http://hackage.haskell.org/package/hinotify>`_
+
+These libraries are available in Debian Wheezy (but not in Squeeze), so
+you can use either apt::
+
+ $ apt-get install libghc-hslogger-dev libghc-crypto-dev libghc-text-dev \
+ libghc-hinotify-dev
+
+or ``cabal``::
+
+ $ cabal install hslogger Crypto text hinotify
+
+to install them.
+
+.. _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``.