- `Python <http://www.python.org/>`_, version 2.4 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/>`_
+- `pyparsing Python module <http://pyparsing.wikispaces.com/>`_, version
+ 1.4.6 or above
- `pyinotify Python module <http://trac.dbzteam.org/pyinotify/>`_
- `PycURL Python module <http://pycurl.sourceforge.net/>`_
- `ctypes Python module
<http://starship.python.net/crew/theller/ctypes/>`_, if running on
python 2.4 (optional, used for node daemon memory locking)
-- `socat <http://www.dest-unreach.org/socat/>`_
+- `socat <http://www.dest-unreach.org/socat/>`_, see :ref:`note
+ <socat-note>` below
- `Paramiko <http://www.lag.net/paramiko/>`_, if you want automated SSH
setup; optional otherwise but manual setup of the nodes required
python-pyparsing python-simplejson \
python-pyinotify python-pycurl socat
+If you want to also enable the `htools` components, which is recommended
+on bigger deployments (they give you automatic instance placement,
+cluster balancing, etc.), then you need to have a Haskell compiler
+installed. More specifically:
+
+- `GHC <http://www.haskell.org/ghc/>`_ version 6.10 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
+
+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
+
+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).
+
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 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.
+
Installation of the software
----------------------------