X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/cbf3d64bea7000922f40a823d50da736f08d8971..5e09a3098d47371b7d105e7f5f571a72532a03d7:/doc/devnotes.rst
diff --git a/doc/devnotes.rst b/doc/devnotes.rst
index 1131455..c5594e8 100644
--- a/doc/devnotes.rst
+++ b/doc/devnotes.rst
@@ -1,31 +1,196 @@
Developer notes
===============
+.. highlight:: shell-example
+
Build dependencies
------------------
-Most dependencies from :doc:`install-quick`, plus:
+Most dependencies from :doc:`install-quick`, including ``qemu-img``
+(marked there as optional) plus (for Python):
- `GNU make `_
- `GNU tar `_
- `Gzip `_
-- `Docbook tools `_
- (docbook2html and docbook2man)
+- `pandoc `_
+- `python-epydoc `_
- `python-sphinx `_
- (tested with version 0.6.1)
+ (tested with version 1.1.3)
- `graphviz `_
+- the `en_US.UTF-8` locale must be enabled on the system
+- `pylint `_ and its associated
+ dependencies
+- `pep8 `_
+
+For older developement (Ganeti < 2.4) ``docbook`` was used instead
+``pandoc``.
+
+Note that for pylint, at the current moment the following versions
+must be used::
+
+ $ pylint --version
+ pylint 0.21.1,
+ astng 0.20.1, common 0.50.3
+
+The same with pep8, other versions may give you errors::
+
+ $ pep8 --version
+ 1.2
+
+To generate unittest coverage reports (``make coverage``), `coverage
+`_ needs to be installed.
+
+Installation of all dependencies listed here::
+
+ $ apt-get install python-setuptools
+ $ apt-get install pandoc python-epydoc graphviz
+ $ cd / && sudo easy_install \
+ sphinx \
+ logilab-astng==0.20.1 \
+ logilab-common==0.50.3 \
+ pylint==0.21.1 \
+ pep8==1.2 \
+ coverage
+
+For Haskell development, again all things from the quick install
+document, plus:
+
+- `haddock `_, documentation
+ generator (equivalent to epydoc for Python)
+- `HsColour `_, again
+ used for documentation (it's source-code pretty-printing)
+- `hlint `_, a source code
+ linter (equivalent to pylint for Python), recommended version 1.8 or
+ above (tested with 1.8.15)
+- the `QuickCheck `_
+ library, version 2.x
+- the `HUnit `_ library (tested with
+ 1.2.x)
+- the `test-framework
+ `_ libraries,
+ tested versions: ``test-framework``: 0.6, ``test-framework-hunit``:
+ 0.2.7, ``test-framework-quickcheck2``: 0.2.12
+- ``hpc``, which comes with the compiler, so you should already have
+ it
+- `shelltestrunner `_, used for
+ running shell-based unit-tests
+
+Under Debian Wheezy or later, these can be installed (on top of the
+required ones from the quick install document) via::
+
+ $ apt-get install libghc-quickcheck2-dev libghc-hunit-dev \
+ libghc-test-framework-dev \
+ libghc-test-framework-quickcheck2-dev \
+ libghc-test-framework-hunit-dev \
+ hscolour hlint
+
+Or alternatively via ``cabal``::
+
+ $ cabal install QuickCheck HUnit \
+ test-framework test-framework-quickcheck2 test-framework-hunit \
+ hscolour hlint shelltestrunner
Configuring for development
---------------------------
-.. highlight:: sh
-
Run the following command (only use ``PYTHON=...`` if you need to use a
different python version)::
- ./autogen.sh && \
- ./configure PYTHON=python2.4 \
- --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var
+ $ ./autogen.sh && \
+ ./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var
+
+Haskell development notes
+-------------------------
+
+There are a few things which can help writing or debugging the Haskell
+code.
+
+You can run the Haskell linter :command:`hlint` via::
+
+ $ make hlint
+
+This is not enabled by default (as the htools component is
+optional). The above command will generate both output on the terminal
+and, if any warnings are found, also an HTML report at
+``doc/hs-lint.html``.
+
+When writing or debugging TemplateHaskell code, it's useful to see
+what the splices are converted to. This can be done via::
+
+ $ make HEXTRA="-ddump-splices"
+
+Due to the way TemplateHaskell works, it's not straightforward to
+build profiling code. The recommended way is to run ``make hs-prof``,
+or alternatively the manual sequence is::
+
+ $ make clean
+ $ make htools/htools HEXTRA="-osuf .o"
+ $ rm htools/htools
+ $ make htools/htools HEXTRA="-osuf .prof_o -prof -auto-all"
+
+This will build the binary twice, per the TemplateHaskell
+documentation, the second one with profiling enabled.
+
+The binary files generated by compilation and the profiling/coverage
+files can "break" tab-completion in the sources; they can be ignored,
+for example, in bash via ``.bashrc``::
+
+ FIGNORE='.o:.hi:.prof_o:.tix'
+
+or in emacs via ``completion-ignored-extensions`` (run ``M-x
+customize-var completion-ignored-extensions``).
+
+Running individual tests
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+When developing code, running the entire test suite can be
+slow. Running individual tests is possible easily for unit-tests, less
+so for shell-tests (but these are faster, so it shouldn't be needed).
+
+For Python tests::
+
+ $ export PYTHONPATH=$PWD
+ $ python ./test/ganeti.%mytest%
+
+For Haskell tests::
+
+ $ make htest/test && ./htest/test -t %pattern%
+
+Where ``pattern`` can be a simple test pattern (e.g. ``comma``,
+matching any test whose name contains ``comma``), a test pattern
+denoting a group (ending with a slash, e.g. ``Utils/``), or more
+complex glob pattern. For more details, see the documentation (on the
+`test-framework homepage
+`_).
+
+Packaging notes
+===============
+
+Ganeti is mostly developed and tested on `Debian
+`_-based distributions, while still keeping
+adaptability to other Linux distributions in mind.
+
+The ``doc/examples/`` directory contains a number of potentially useful
+scripts and configuration files. Some of them might need adjustment
+before use.
+
+``daemon-util``
+---------------
+
+This script, in the source code as ``daemons/daemon-util.in``, is used
+to start/stop Ganeti and do a few other things related to system
+daemons. It is recommended to use ``daemon-util`` also from the system's
+init scripts. That way the code starting and stopping daemons is shared
+and future changes have to be made in only one place.
+
+``daemon-util`` reads extra arguments from variables (``*_ARGS``) in
+``/etc/default/ganeti``. When modifying ``daemon-util``, keep in mind to
+not remove support for the ``EXTRA_*_ARGS`` variables for starting
+daemons. Some parts of Ganeti use them to pass additional arguments when
+starting a daemon.
+
+The ``reload_ssh_keys`` function can be adjusted to use another command
+for reloading the OpenSSH daemon's host keys.
.. vim: set textwidth=72 :