Statistics
| Branch: | Tag: | Revision:

root / doc / devnotes.rst @ 5ae4945a

History | View | Annotate | Download (4.9 kB)

1
Developer notes
2
===============
3

    
4
.. highlight:: shell-example
5

    
6
Build dependencies
7
------------------
8

    
9
Most dependencies from :doc:`install-quick`, including ``qemu-img``
10
(marked there as optional) plus (for Python):
11

    
12
- `GNU make <http://www.gnu.org/software/make/>`_
13
- `GNU tar <http://www.gnu.org/software/tar/>`_
14
- `Gzip <http://www.gnu.org/software/gzip/>`_
15
- `pandoc <http://johnmacfarlane.net/pandoc/>`_
16
- `python-epydoc <http://epydoc.sourceforge.net/>`_
17
- `python-sphinx <http://sphinx.pocoo.org/>`_
18
  (tested with version 1.1.3)
19
- `graphviz <http://www.graphviz.org/>`_
20
- the `en_US.UTF-8` locale must be enabled on the system
21
- `pylint <http://www.logilab.org/857>`_ and its associated
22
  dependencies
23
- `pep8 <https://github.com/jcrocholl/pep8/>`_
24

    
25
For older developement (Ganeti < 2.4) ``docbook`` was used instead
26
``pandoc``.
27

    
28
Note that for pylint, at the current moment the following versions
29
must be used::
30

    
31
    $ pylint --version
32
    pylint 0.21.1,
33
    astng 0.20.1, common 0.50.3
34

    
35
The same with pep8, other versions may give you errors::
36

    
37
     $ pep8 --version
38
     1.2
39

    
40
To generate unittest coverage reports (``make coverage``), `coverage
41
<http://pypi.python.org/pypi/coverage>`_ needs to be installed.
42

    
43
Installation of all dependencies listed here::
44

    
45
     $ apt-get install python-setuptools
46
     $ apt-get install pandoc python-epydoc graphviz
47
     $ cd / && sudo easy_install \
48
               sphinx \
49
               logilab-astng==0.20.1 \
50
               logilab-common==0.50.3 \
51
               pylint==0.21.1 \
52
               pep8==1.2 \
53
               coverage
54

    
55
For Haskell development, again all things from the quick install
56
document, plus:
57

    
58
- `haddock <http://www.haskell.org/haddock/>`_, documentation
59
  generator (equivalent to epydoc for Python)
60
- `HsColour <http://hackage.haskell.org/package/hscolour>`_, again
61
  used for documentation (it's source-code pretty-printing)
62
- `hlint <http://community.haskell.org/~ndm/hlint/>`_, a source code
63
  linter (equivalent to pylint for Python), recommended version 1.8 or
64
  above (tested with 1.8.15)
65
- the `QuickCheck <http://hackage.haskell.org/package/QuickCheck>`_
66
  library, version 2.x
67
- ``hpc``, which comes with the compiler, so you should already have
68
  it
69
- `shelltestrunner <http://joyful.com/shelltestrunner>`_, used for
70
  running unit-tests
71

    
72
Under Debian Wheezy or later, these can be installed (on top of the
73
required ones from the quick install document) via::
74

    
75
  $ apt-get install libghc-quickcheck2-dev hscolour hlint
76

    
77
Or alternatively via ``cabal``::
78

    
79
  $ cabal install quickcheck hscolour hlint shelltestrunner
80

    
81

    
82
Configuring for development
83
---------------------------
84

    
85
Run the following command (only use ``PYTHON=...`` if you need to use a
86
different python version)::
87

    
88
  $ ./autogen.sh && \
89
    ./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var
90

    
91
Haskell development notes
92
-------------------------
93

    
94
There are a few things which can help writing or debugging the Haskell
95
code.
96

    
97
You can run the Haskell linter :command:`hlint` via::
98

    
99
  $ make hlint
100

    
101
This is not enabled by default (as the htools component is
102
optional). The above command will generate both output on the terminal
103
and, if any warnings are found, also an HTML report at
104
``doc/hs-lint.html``.
105

    
106
When writing or debugging TemplateHaskell code, it's useful to see
107
what the splices are converted to. This can be done via::
108

    
109
  $ make HEXTRA="-ddump-splices"
110

    
111
Due to the way TemplateHaskell works, it's not straightforward to
112
build profiling code. The recommended way is to run ``make hs-prof``,
113
or alternatively the manual sequence is::
114

    
115
  $ make clean
116
  $ make htools/htools HEXTRA="-osuf .o"
117
  $ rm htools/htools
118
  $ make htools/htools HEXTRA="-osuf .prof_o -prof -auto-all"
119

    
120
This will build the binary twice, per the TemplateHaskell
121
documentation, the second one with profiling enabled.
122

    
123

    
124
Packaging notes
125
===============
126

    
127
Ganeti is mostly developped and tested on `Debian
128
<http://www.debian.org/>`_-based distributions, while still keeping
129
adoptability to other Linux distributions in mind.
130

    
131
The ``doc/examples/`` directory contains a number of potentially useful
132
scripts and configuration files. Some of them might need adjustment
133
before use.
134

    
135
``daemon-util``
136
---------------
137

    
138
This script, in the source code as ``daemons/daemon-util.in``, is used
139
to start/stop Ganeti and do a few other things related to system
140
daemons. It is recommended to use ``daemon-util`` also from the system's
141
init scripts. That way the code starting and stopping daemons is shared
142
and future changes have to be made in only one place.
143

    
144
``daemon-util`` reads extra arguments from variables (``*_ARGS``) in
145
``/etc/default/ganeti``. When modifying ``daemon-util``, keep in mind to
146
not remove support for the ``EXTRA_*_ARGS`` variables for starting
147
daemons. Some parts of Ganeti use them to pass additional arguments when
148
starting a daemon.
149

    
150
The ``reload_ssh_keys`` function can be adjusted to use another command
151
for reloading the OpenSSH daemon's host keys.
152

    
153
.. vim: set textwidth=72 :