Statistics
| Branch: | Tag: | Revision:

root / doc / devnotes.rst @ db1ad1d5

History | View | Annotate | Download (7.7 kB)

1 832aef24 Michael Hanselmann
Developer notes
2 832aef24 Michael Hanselmann
===============
3 832aef24 Michael Hanselmann
4 727ee1ec Iustin Pop
.. highlight:: shell-example
5 727ee1ec Iustin Pop
6 b2fc7ea1 Michael Hanselmann
Build dependencies
7 b2fc7ea1 Michael Hanselmann
------------------
8 b2fc7ea1 Michael Hanselmann
9 fc6075dd Agata Murawska
Most dependencies from :doc:`install-quick`, including ``qemu-img``
10 fc6075dd Agata Murawska
(marked there as optional) plus (for Python):
11 cbf3d64b Michael Hanselmann
12 c27ba1cc Michael Hanselmann
- `GNU make <http://www.gnu.org/software/make/>`_
13 c27ba1cc Michael Hanselmann
- `GNU tar <http://www.gnu.org/software/tar/>`_
14 c27ba1cc Michael Hanselmann
- `Gzip <http://www.gnu.org/software/gzip/>`_
15 18e2b6e4 Iustin Pop
- `pandoc <http://johnmacfarlane.net/pandoc/>`_
16 fc6075dd Agata Murawska
- `python-epydoc <http://epydoc.sourceforge.net/>`_
17 c27ba1cc Michael Hanselmann
- `python-sphinx <http://sphinx.pocoo.org/>`_
18 fc6075dd Agata Murawska
  (tested with version 1.1.3)
19 c27ba1cc Michael Hanselmann
- `graphviz <http://www.graphviz.org/>`_
20 1de45c78 Guido Trotter
- the `en_US.UTF-8` locale must be enabled on the system
21 77a180f6 Iustin Pop
- `pylint <http://www.logilab.org/857>`_ and its associated
22 77a180f6 Iustin Pop
  dependencies
23 08366664 Michael Hanselmann
- `pep8 <https://github.com/jcrocholl/pep8/>`_
24 6e71fbf6 Bernardo Dal Seno
- `PyYAML <http://pyyaml.org/>`_
25 77a180f6 Iustin Pop
26 fc6075dd Agata Murawska
For older developement (Ganeti < 2.4) ``docbook`` was used instead
27 fc6075dd Agata Murawska
``pandoc``.
28 fc6075dd Agata Murawska
29 77a180f6 Iustin Pop
Note that for pylint, at the current moment the following versions
30 727ee1ec Iustin Pop
must be used::
31 77a180f6 Iustin Pop
32 77a180f6 Iustin Pop
    $ pylint --version
33 099e9213 Iustin Pop
    pylint 0.25.1,
34 099e9213 Iustin Pop
    astng 0.23.1, common 0.58.0
35 b2fc7ea1 Michael Hanselmann
36 fc6075dd Agata Murawska
The same with pep8, other versions may give you errors::
37 fc6075dd Agata Murawska
38 fc6075dd Agata Murawska
     $ pep8 --version
39 5ae4945a Iustin Pop
     1.2
40 fc6075dd Agata Murawska
41 099e9213 Iustin Pop
Both these versions are the ones shipped with Debian Wheezy.
42 099e9213 Iustin Pop
43 27e336af Michael Hanselmann
To generate unittest coverage reports (``make coverage``), `coverage
44 27e336af Michael Hanselmann
<http://pypi.python.org/pypi/coverage>`_ needs to be installed.
45 27e336af Michael Hanselmann
46 fc6075dd Agata Murawska
Installation of all dependencies listed here::
47 fc6075dd Agata Murawska
48 8d53117b Michele Tartara
     $ apt-get install python-setuptools automake git fakeroot
49 fc6075dd Agata Murawska
     $ apt-get install pandoc python-epydoc graphviz
50 6e71fbf6 Bernardo Dal Seno
     $ apt-get install python-yaml
51 fc6075dd Agata Murawska
     $ cd / && sudo easy_install \
52 fc6075dd Agata Murawska
               sphinx \
53 f0eeeb2a Michele Tartara
               logilab-astng==0.23.1 \
54 099e9213 Iustin Pop
               logilab-common==0.58.0 \
55 f0eeeb2a Michele Tartara
               pylint==0.25.1 \
56 5ae4945a Iustin Pop
               pep8==1.2 \
57 fc6075dd Agata Murawska
               coverage
58 fc6075dd Agata Murawska
59 77a180f6 Iustin Pop
For Haskell development, again all things from the quick install
60 77a180f6 Iustin Pop
document, plus:
61 77a180f6 Iustin Pop
62 77a180f6 Iustin Pop
- `haddock <http://www.haskell.org/haddock/>`_, documentation
63 77a180f6 Iustin Pop
  generator (equivalent to epydoc for Python)
64 77a180f6 Iustin Pop
- `HsColour <http://hackage.haskell.org/package/hscolour>`_, again
65 77a180f6 Iustin Pop
  used for documentation (it's source-code pretty-printing)
66 77a180f6 Iustin Pop
- `hlint <http://community.haskell.org/~ndm/hlint/>`_, a source code
67 3603605a Iustin Pop
  linter (equivalent to pylint for Python), recommended version 1.8 or
68 3603605a Iustin Pop
  above (tested with 1.8.15)
69 77a180f6 Iustin Pop
- the `QuickCheck <http://hackage.haskell.org/package/QuickCheck>`_
70 8e4f6d56 Iustin Pop
  library, version 2.x
71 95f6c931 Iustin Pop
- the `HUnit <http://hunit.sourceforge.net/>`_ library (tested with
72 95f6c931 Iustin Pop
  1.2.x)
73 95f6c931 Iustin Pop
- the `test-framework
74 95f6c931 Iustin Pop
  <http://batterseapower.github.com/test-framework/>`_ libraries,
75 95f6c931 Iustin Pop
  tested versions: ``test-framework``: 0.6, ``test-framework-hunit``:
76 fe7ad9c8 Iustin Pop
  0.2.7, ``test-framework-quickcheck2``: 0.2.12.1
77 fd0bc853 Iustin Pop
- ``hpc``, which comes with the compiler, so you should already have
78 fd0bc853 Iustin Pop
  it
79 727ee1ec Iustin Pop
- `shelltestrunner <http://joyful.com/shelltestrunner>`_, used for
80 95f6c931 Iustin Pop
  running shell-based unit-tests
81 4355b2de Iustin Pop
- `temporary <https://github.com/batterseapower/temporary/>`_ library,
82 4355b2de Iustin Pop
  tested with version 1.1.2.3
83 727ee1ec Iustin Pop
84 727ee1ec Iustin Pop
Under Debian Wheezy or later, these can be installed (on top of the
85 727ee1ec Iustin Pop
required ones from the quick install document) via::
86 fd0bc853 Iustin Pop
87 95f6c931 Iustin Pop
  $ apt-get install libghc-quickcheck2-dev libghc-hunit-dev \
88 95f6c931 Iustin Pop
        libghc-test-framework-dev \
89 95f6c931 Iustin Pop
        libghc-test-framework-quickcheck2-dev \
90 95f6c931 Iustin Pop
        libghc-test-framework-hunit-dev \
91 4355b2de Iustin Pop
        libghc-temporary-dev \
92 95f6c931 Iustin Pop
        hscolour hlint
93 fd0bc853 Iustin Pop
94 727ee1ec Iustin Pop
Or alternatively via ``cabal``::
95 727ee1ec Iustin Pop
96 21a5e56c Iustin Pop
  $ cabal install QuickCheck HUnit \
97 21a5e56c Iustin Pop
          test-framework test-framework-quickcheck2 test-framework-hunit \
98 4355b2de Iustin Pop
          temporary hscolour hlint shelltestrunner
99 77a180f6 Iustin Pop
100 b2fc7ea1 Michael Hanselmann
101 832aef24 Michael Hanselmann
Configuring for development
102 832aef24 Michael Hanselmann
---------------------------
103 832aef24 Michael Hanselmann
104 d17e74b4 Iustin Pop
Run the following command (only use ``PYTHON=...`` if you need to use a
105 d17e74b4 Iustin Pop
different python version)::
106 d17e74b4 Iustin Pop
107 727ee1ec Iustin Pop
  $ ./autogen.sh && \
108 727ee1ec Iustin Pop
    ./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var
109 558fd122 Michael Hanselmann
110 cfa2b7a0 Iustin Pop
Note that doing development on a machine which already has Ganeti
111 cfa2b7a0 Iustin Pop
installed is problematic, as ``PYTHONPATH`` behaviour can be confusing
112 cfa2b7a0 Iustin Pop
(see Issue 170 for a bit of history/details; in general it works if
113 cfa2b7a0 Iustin Pop
the installed and developed versions are very similar, and/or if
114 cfa2b7a0 Iustin Pop
PYTHONPATH is customised correctly). As such, in general it's
115 cfa2b7a0 Iustin Pop
recommended to use a "clean" machine for ganeti development.
116 cfa2b7a0 Iustin Pop
117 ef958f2a Iustin Pop
Haskell development notes
118 ef958f2a Iustin Pop
-------------------------
119 ef958f2a Iustin Pop
120 ef958f2a Iustin Pop
There are a few things which can help writing or debugging the Haskell
121 ef958f2a Iustin Pop
code.
122 ef958f2a Iustin Pop
123 ef958f2a Iustin Pop
You can run the Haskell linter :command:`hlint` via::
124 ef958f2a Iustin Pop
125 727ee1ec Iustin Pop
  $ make hlint
126 ef958f2a Iustin Pop
127 3603605a Iustin Pop
This is not enabled by default (as the htools component is
128 3603605a Iustin Pop
optional). The above command will generate both output on the terminal
129 3603605a Iustin Pop
and, if any warnings are found, also an HTML report at
130 ef958f2a Iustin Pop
``doc/hs-lint.html``.
131 ef958f2a Iustin Pop
132 ef958f2a Iustin Pop
When writing or debugging TemplateHaskell code, it's useful to see
133 ef958f2a Iustin Pop
what the splices are converted to. This can be done via::
134 ef958f2a Iustin Pop
135 727ee1ec Iustin Pop
  $ make HEXTRA="-ddump-splices"
136 ef958f2a Iustin Pop
137 c96887cf Iustin Pop
Or, more interactively::
138 c96887cf Iustin Pop
139 c96887cf Iustin Pop
  $ ghci
140 c96887cf Iustin Pop
  λ> :set -ddump-splices
141 3add7574 Iustin Pop
  λ> :l src/Ganeti/Objects.hs
142 c96887cf Iustin Pop
143 c96887cf Iustin Pop
And you will get the spliced code as the module is loaded.
144 c96887cf Iustin Pop
145 d6b5da24 Guido Trotter
To build profiling code you must install the ``ghc-prof`` (or
146 d6b5da24 Guido Trotter
``gch6-prof``) package, and all the relevant libraries with their
147 d6b5da24 Guido Trotter
``-prof`` counterparts. If installing libraries through cabal the config
148 d6b5da24 Guido Trotter
file should include ``library-profiling: True`` or the ``-p`` flag
149 d6b5da24 Guido Trotter
should be used. Any library already installed can be updated by passing
150 d6b5da24 Guido Trotter
``--reinstall`` as well.
151 d6b5da24 Guido Trotter
152 ef958f2a Iustin Pop
Due to the way TemplateHaskell works, it's not straightforward to
153 c7ec3025 Iustin Pop
build profiling code. The recommended way is to run ``make hs-prof``,
154 c7ec3025 Iustin Pop
or alternatively the manual sequence is::
155 ef958f2a Iustin Pop
156 727ee1ec Iustin Pop
  $ make clean
157 3add7574 Iustin Pop
  $ make src/htools HEXTRA="-osuf .o"
158 3add7574 Iustin Pop
  $ rm src/htools
159 3add7574 Iustin Pop
  $ make src/htools HEXTRA="-osuf .prof_o -prof -auto-all"
160 ef958f2a Iustin Pop
161 ef958f2a Iustin Pop
This will build the binary twice, per the TemplateHaskell
162 ef958f2a Iustin Pop
documentation, the second one with profiling enabled.
163 ef958f2a Iustin Pop
164 ded769c1 Iustin Pop
The binary files generated by compilation and the profiling/coverage
165 ded769c1 Iustin Pop
files can "break" tab-completion in the sources; they can be ignored,
166 ded769c1 Iustin Pop
for example, in bash via ``.bashrc``::
167 ded769c1 Iustin Pop
168 ded769c1 Iustin Pop
  FIGNORE='.o:.hi:.prof_o:.tix'
169 ded769c1 Iustin Pop
170 ded769c1 Iustin Pop
or in emacs via ``completion-ignored-extensions`` (run ``M-x
171 ded769c1 Iustin Pop
customize-var completion-ignored-extensions``).
172 94338f0a Michael Hanselmann
173 06c9a9d6 Iustin Pop
Running individual tests
174 06c9a9d6 Iustin Pop
~~~~~~~~~~~~~~~~~~~~~~~~
175 06c9a9d6 Iustin Pop
176 06c9a9d6 Iustin Pop
When developing code, running the entire test suite can be
177 06c9a9d6 Iustin Pop
slow. Running individual tests is possible easily for unit-tests, less
178 06c9a9d6 Iustin Pop
so for shell-tests (but these are faster, so it shouldn't be needed).
179 06c9a9d6 Iustin Pop
180 06c9a9d6 Iustin Pop
For Python tests::
181 06c9a9d6 Iustin Pop
182 06c9a9d6 Iustin Pop
  $ export PYTHONPATH=$PWD
183 90066780 Iustin Pop
  $ python ./test/py/ganeti.%mytest%
184 06c9a9d6 Iustin Pop
185 06c9a9d6 Iustin Pop
For Haskell tests::
186 06c9a9d6 Iustin Pop
187 3784c431 Yiannis Tsiouris
  $ make test/hs/htest && ./test/hs/htest -t %pattern%
188 06c9a9d6 Iustin Pop
189 06c9a9d6 Iustin Pop
Where ``pattern`` can be a simple test pattern (e.g. ``comma``,
190 06c9a9d6 Iustin Pop
matching any test whose name contains ``comma``), a test pattern
191 06c9a9d6 Iustin Pop
denoting a group (ending with a slash, e.g. ``Utils/``), or more
192 06c9a9d6 Iustin Pop
complex glob pattern. For more details, see the documentation (on the
193 06c9a9d6 Iustin Pop
`test-framework homepage
194 06c9a9d6 Iustin Pop
<http://batterseapower.github.com/test-framework/>`_).
195 06c9a9d6 Iustin Pop
196 94338f0a Michael Hanselmann
Packaging notes
197 94338f0a Michael Hanselmann
===============
198 94338f0a Michael Hanselmann
199 77865fb4 Gintautas Miliauskas
Ganeti is mostly developed and tested on `Debian
200 94338f0a Michael Hanselmann
<http://www.debian.org/>`_-based distributions, while still keeping
201 77865fb4 Gintautas Miliauskas
adaptability to other Linux distributions in mind.
202 94338f0a Michael Hanselmann
203 94338f0a Michael Hanselmann
The ``doc/examples/`` directory contains a number of potentially useful
204 94338f0a Michael Hanselmann
scripts and configuration files. Some of them might need adjustment
205 94338f0a Michael Hanselmann
before use.
206 94338f0a Michael Hanselmann
207 94338f0a Michael Hanselmann
``daemon-util``
208 94338f0a Michael Hanselmann
---------------
209 94338f0a Michael Hanselmann
210 94338f0a Michael Hanselmann
This script, in the source code as ``daemons/daemon-util.in``, is used
211 94338f0a Michael Hanselmann
to start/stop Ganeti and do a few other things related to system
212 77a180f6 Iustin Pop
daemons. It is recommended to use ``daemon-util`` also from the system's
213 94338f0a Michael Hanselmann
init scripts. That way the code starting and stopping daemons is shared
214 94338f0a Michael Hanselmann
and future changes have to be made in only one place.
215 94338f0a Michael Hanselmann
216 94338f0a Michael Hanselmann
``daemon-util`` reads extra arguments from variables (``*_ARGS``) in
217 94338f0a Michael Hanselmann
``/etc/default/ganeti``. When modifying ``daemon-util``, keep in mind to
218 94338f0a Michael Hanselmann
not remove support for the ``EXTRA_*_ARGS`` variables for starting
219 94338f0a Michael Hanselmann
daemons. Some parts of Ganeti use them to pass additional arguments when
220 94338f0a Michael Hanselmann
starting a daemon.
221 94338f0a Michael Hanselmann
222 94338f0a Michael Hanselmann
The ``reload_ssh_keys`` function can be adjusted to use another command
223 94338f0a Michael Hanselmann
for reloading the OpenSSH daemon's host keys.
224 94338f0a Michael Hanselmann
225 558fd122 Michael Hanselmann
.. vim: set textwidth=72 :