source: main/waeup.kofa/trunk/docs/INSTALL.txt @ 11476

Last change on this file since 11476 was 11419, checked in by Henrik Bettermann, 11 years ago

Borrow INSTALL.txt from waup.aaua.

File size: 13.6 KB
RevLine 
[11381]1Installation of Kofa
2####################
[10120]3
[11381]4These are generic installation instructions for the WAeUP_ ``Kofa``
5student information portal and customized versions thereof.
[10120]6
[11381]7For specific aspects of this package please refer to the local README
8file.
[10120]9
[11381]10Please note, that **only Linux-based installs** are described and actively
11supported. We recommend use of Debian_ / Ubuntu_.
[11323]12
[11381]13.. note:: This means we do not actively support Windows(tm)!
[11323]14
[11384]15.. contents::
[11323]16
[11384]17
[11381]18Prerequisites
19*************
[11323]20
[11381]21The Kofa packages are based on `Grok`_, which is a Python_
22framework for agile webapplication development. Grok_ itself is based
23on `Zope`_.
[11323]24
[11381]25Both, Grok_ and Zope_, are written in the `Python`_ programming
26language (with parts written in C). You therefore have to have
27`Python`_ installed (including `Python`_ headers).
[11323]28
29
[11381]30Preparing the System
[11323]31====================
32
[11381]33For a `Kofa` install we need of course `Python`_ installed as well as
34some standard developer tools like C compilers, C libraries, etc.
[11323]35
36What you need (Debian/Ubuntu package names in brackets):
37
[11381]38* Python 2.7 (``python2.7``)
[11323]39
[11381]40* Python 2.7 development files (``python2.7-dev``)
[11323]41
[11381]42* A C-Compiler with basic C developer libraries (``build-essential``)
[11323]43
[11381]44* A subversion client (``svn``)
[11323]45
[11381]46* enscript (``enscript``) [optional]
[11323]47
48  This is only needed if you want test coverage reports.
49
50All these packages can be installed on Debian systems like this::
51
[11381]52  $ sudo apt-get install python2.7 python2.7-dev svn \
53                         build-essential enscript
[11323]54
55Afterwards you should be able to enter::
56
57  $ python2.7
58
[11381]59at the commandline and get a Python_ prompt. Quit the interpreter
[11323]60pressing <CTRL-D>.
61
62
63Installing `virtualenv`
64=======================
65
[11382]66We strongly suggest use of `virtualenv`_ to create Python_ sandboxes
67where you can run your code without touching any other installations.
[11323]68
[11382]69`virtualenv`_ is also the only possibility to build a `Kofa` install
70without the need of superuser permissions. In short: `virtualenv`_
71will make your life easier. Use it.
[11323]72
[11382]73Detailed install instructions for `virtualenv`_ can be found on
74http://www.virtualenv.org/en/latest/virtualenv.html#installation.
[11323]75
[11382]76The short way for a user install (no superuser perms required) is like
77this::
[11323]78
[11382]79  $ curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.4.tar.gz#md5=9accc2d3f0ec1da479ce2c3d1fdff06e
80  $ tar xvfz virtualenv-1.11.4.tar.gz
81  $ cd virtualenv-1.11.4
82  $ python virtualenv.py py27
[11323]83
[11382]84Superusers can install `virtualenv`_ system-wide much easier. On
85`Debian`_/`Ubuntu`_ systems where you have superuser permissions, you
86can install `virtualenv`_ via::
[11323]87
[11382]88  $ sudo apt-get install python-virtualenv
[11323]89
[11401]90*Or*, if `pip` is installed already (superusers can install it via
91 ``sudo apt-get install python-pip`` on `Debian`_/`Ubuntu`_)::
[11323]92
[11382]93  $ sudo pip install virtualenv
[11323]94
95
[11402]96Creating a Sandbox
[11323]97==================
98
[11383]99After installing `virtualenv`_ you can install local sandboxes like
[11401]100this (if `virtualenv` is installed system-wide)::
[11323]101
[11383]102  $ virtualenv --no-site-packages py27
[11323]103
[11401]104*or* like this::
105
106  $ python /path/to/my/virtualenv.py --no-site-packages py27
107
[11383]108where ``py27`` is a directory in the filesystem where your sandbox
109will be created. `virtualenv` will also create this directory for
[11401]110you. While you can pick any sandbox name you want, it is recommended
111to use a sandbox name that is short and at the same time reflects the
112Python version used (here: Python 2.7).
[11323]113
114By passing the ``no-site-packages`` switch we tell `virtualenv` to
[11401]115provide a clean environment without any extra-packages installed
[11383]116systemwide. More recent versions of `virtualenv`_ have this option set
117by default.
[11323]118
[11383]119Another often used option of `virtualenv`_ is ``-p``. With ``-p`` you
120can tell `virtualenv`_ which Python executable to use as base for the
121new sandbox.
122
[11323]123You now can activate the sandbox by doing::
124
[11383]125  $ source py27/bin/activate
126  (py27)$
[11323]127
[11401]128You will notice that the input prompt changes, indicating the name of
129the sandbox activated.
[11323]130
131To deactivate the sandbox at any time, enter::
132
[11383]133  (py27)$ deactivate
[11323]134
135and the prompt will be the same as before the activation.
136
137For the following steps make sure the sandbox is active.
138
139
[11402]140Getting the Sources
141===================
[11323]142
[11401]143Now, as the sandbox is activated (see above, if not), we can fetch the
144sources for Kofa.
[11323]145
[11401]146As Kofa is currently available from the Subversion_ repository only,
147we use the Subversion_ client `svn` and checkout the main devel branch
148of the `waeup.kofa` package like this::
[11323]149
[11401]150  (py27)$ svn co https://svn.waeup.org/repos/main/waeup.kofa/trunk
[11323]151
152The command should fetch the Kofa base package sources for you and
[11401]153will put everything in a new directory ``trunk/``.
[11323]154
155Now enter the new directory::
156
[11401]157  (py27)$ cd trunk/
[11323]158
[11401]159and you can start building the real package.
[11323]160
[11401]161.. note:: If you not want to work with the `waeup.kofa` package but a
162          customized package (like ``waeup.aaue`` or similar), then
163          you can use the above checkout command but with
164          ``waeup.kofa`` replaced by the name of the customized
165          package::
[11381]166
[11401]167            (py27)$ svn co https://svn.waeup.org/repos/main/<PKG-NAME>/trunk
[11381]168
[11401]169          For the exact link, please refer to the README.txt file in
170          your package.
171
172
[11402]173Bootstrapping the Build
174=======================
175
176After `Creating a Sandbox`_ and `Getting the Sources`_ we have to
177initialize the newly created development environment::
178
179  (py27)$ python bootstrap.py
180
181This should create a local ``bin/`` directory with at least a script
182``buildout`` in it.
183
184If bootstrapping fails, chances are, that you need the `distribute`
185package installed. In a virtual environment you can install it without
186interfering with other packages installed on your server:
187
188  (py27)$ pip install --upgrade distribute
189
190Afterwards you have to retry the bootstrapping, until you get a
191working ``buildout`` script in the local ``bin/`` directory.
192
193Once the ``buildout`` script exists, you do not have to activate the
194virtual envronment any more (although you can).
195
196
[11381]197Part 1: Single Client Setup
198***************************
199
[11401]200You can run ``Kofa`` with a single client (useful for evaluation,
201development, etc.) or with multiple clients running in parallel. The
202latter setup is useful in productive environments with many thousands
[11402]203users and called a ``ZEO`` install. We will cover both setup
204types. The first is covered here, the latter one is covered in `Part
2052: ZEO Install`_.
[11401]206
[11402]207
[11404]208Building the Package
209====================
[11323]210
[11404]211In the sources directory (``trunk/``) you have to prepare the
[11323]212project to fetch needed components (eggs), compile C-code parts,
[11404]213etc. This is done by a single command ``buildout``::
[11323]214
[11404]215  $ ./bin/buildout
[11323]216
217If this is your first install of some Grok-related project, this step
218will need some time as lots of sources have to be fetched, many
219components must be compiled, etc.
220
221This step must be redone whenever you change something in
[11404]222``buildout.cfg``, ``buildout-zeo.cfg``, or ``setup.py``.
[11323]223
224Note that if you have more than one sandbox for a Zope-based web
225application, it will probably make sense to share the eggs between the
226different sandboxes.  You can tell ``zc.buildout`` to use a central
227eggs directory by creating ``~/.buildout/default.cfg`` with the
228following contents::
229
[11385]230  [buildout]
231  eggs-directory = /home/bruno/buildout-eggs
[11323]232
[11404]233where the given directory should be exist beforehand. All eggs of all
234`buildout` projects will then be stored in this directory (and not
235fetched anew if already existing there).
[11323]236
[11404]237
238Start the Instance
[11323]239==================
240
241You should be able now to start the created instance by doing::
242
[11404]243  $ ./bin/kofactl fg
[11323]244
[11385]245Alternatively you can do::
[11323]246
[11404]247  $ bin/paster serve parts/etc/deploy-themed.ini
[11323]248
249The port numbers where Kofa is running on your server are defined in
[11404]250`buildout.cfg` under ``[kofa_params]``.
[11323]251
[11404]252If you now point a browser to the right port on your server, for example::
[11323]253
[11385]254  localhost:8080
[11323]255
256you should get a login pop-up, where you can login as superuser with
257``grok`` and ``grok`` as username/password (Kofa base package only!).
258
259You can stop the instance by pressing <CTRL-C>.
260
261If you are connected and logged in,
262you should be able to add the grok-based applications
263(such as ``University``) from the menu.
264
265Add an instance of ``University`` and click on the link next to the
266then visible entry in the list of installed applications.
267
[11404]268Running the Tests
[11323]269=================
270
[11404]271All WAeUP_ packages come with comprehensive test suites ensuring the
272software quality also after changes and updates.
[11323]273
[11404]274The package tests are easily run by executing the test runner
275from the ``bin`` directory::
[11323]276
[11404]277  $ ./bin/test
[11323]278
[11404]279Use the ``-c`` option to get coloured output. Use the ``--pdb`` option
280to start the Python_ debugger when a test fails.
281
282
[11402]283Part 2: ZEO Install
284*******************
[11323]285
286Each ZEO install consists of at least one ZEO server and normally two
287or more ZEO clients. While the ZEO server is meant to manage the ZODB
288database for clients, the clients connect to the outside world, listen
289for request and do the real dataprocessing.
290
291We prepared a `buildout` configuration that sets up one server
292configuration and two client configs. This configuration is in
293``buildout-zeo.cfg``.
294
[11405]295Generating the ZEO Setup
[11323]296========================
297
298To install Kofa ZEO-based you can run `buildout` with the given
299(or your own) configuration file like this::
300
301  $ ./bin/buildout -c buildout-zeo.cfg
302
303This should generate all scripts necessary to run servers, clients,
304etc.
305
[11405]306Starting ZEO Servers and Clients
[11323]307================================
308
309First start the server::
310
311  $ ./bin/zeo_server start
312
313Clients can be started by doing::
314
315  $ ./bin/zeo_client1 start
316  $ ./bin/zeo_client2 start
317
318This will start both clients in daemon mode.
319
320Instead of ``start`` you can, as usually, start an instance in
321foreground (``fg``), etc. You know the drill.
322
323
[11405]324Manually Starting ZEO Clients
[11323]325=============================
326
327This is normally not neccessary.
328
329``zeo_clientN`` scripts are basically wrappers around calls to
330``bin/paster``. You can bypass this wrapper and start a client
331'manually' like this::
332
333  $ ./bin/paster serve --pid-file var/zeo1.pid --daemon \
334        pars/etc/zeo1.ini
335
[11405]336It is important to give a pid-file as `paster` otherwise can not start
[11323]337different clients (they would all refer to the same pid file
338`paster.pid` and refuse to start after the first client was started).
339
340
341Setup (paramters, ports, etc.)
342==============================
343
344By default the server will listen on port 8100 for requests from
345localhost (not: from the outside world).
346
347You can change ZEO server settings in the ``[zeo_server]`` section
348of ``buildout-zeo.conf``. Run `buildout` afterwards.
349
350The clients will listen on port 8081 and 8082. You can change settings
351in ``etc/zeo1.ini.in`` and ``etc/zeo2.ini.in`` respectively. Run
352buildout after any change.
353
354If you want to change the paster wrapper for any zeo client, you can
355edit ``etc/zeo1.conf`` and/or ``etc/zeo2.conf``. Run buildout
356afterwards.
357
358
[11405]359Stopping ZEO Servers and Clients
360================================
[11323]361
[11405]362Given everything was started in daemon mode, first stop the clients::
[11323]363
[11405]364  $ ./bin/zeo_client1 stop
365  $ ./bin/zeo_client2 stop
[11323]366
[11405]367Then stop the ZEO server::
368
369  $ ./bin/zeo_server stop
370
371
372Creating New ZEO Clients
373========================
374
375You want more ZEO clients to be created by `buildout`? Easy. Three
376steps are neccessary.
377
3781. Create config files in `etc/`
379--------------------------------
380
[11323]381Each client needs two configuration files:
382
383  - ``etc/zeoN.conf``
384       configuring the paster wrapper
385
386  - ``etc/zeoN.ini``
387       configuring the runtime config, ports, etc.
388
389Just copy over these files from the already existing zeo1/zeo2 files
390and replace ``zeo1`` or ``zeo2`` with your new name.
391
3922. Update buildout-zeo.cfg
393--------------------------
394
395Here, inside ``buildourt-zeo.cfg`` also three steps are needed.
396
397* 2.1. Create new .ini and .conf entries
398
399  The .conf and .ini files in etc/ are only templates that have to be
400  generated in their really used final location. In buildout-zeo.cfg
401  you can care for this by creating a new ``[zeoN_ini]`` and
402  ``[zeoN_conf]`` option (replacing ``N`` with a number, of course).
403
404  Just copy over existing entries and replace the mentions of ``zeo1``
405  or ``zeo2`` by your ``zeoN``.
406
407* 2.2. Create a new ``zeo_clientN`` entry
408
409  Then you have to create an entry that will generate the
410  ``zeo_clientN`` script. Again, just copy over an existing
411  ``[zeo_client1]`` entry and replace ``1`` withg your client number.
412
413* 2.3. Register the new sections in ``[buildout]`` section
414
415  When done with the above: add the new section in ``[buildout]``::
416
417    [buildout]
418      ...
419      <old entries...>
420      ...
421      zope_conf_zeo_5
422      zeo5_ini
423      zeo_client5
424
425  depending on how you named your new sections.
426
4273. Rerun ``buildout``
428---------------------
429
430When adding or removing client/server instances, make sure to stop all
431running servers/clients before rerunning buildout.
432
433To activate the new setup, rerun buildout::
434
435  $ bin/buildout -c buildout-zeo.cfg
436
437This should generate any new clients and remove older ones or just
438update configuration files.
439
440
441Considerations
442==============
443
444There are some things in the current buildout-zeo.cfg we might do not
445want. It extends the regular ``buildout.cfg`` so that we do not have
446to repeat most sections but the ``parts`` in ``[buildout]`` have to be
447listed.
448
449We need, however, not everything with a ZEO-deploy that is listed in a
450default buildout. We might do not need docs, no profiling, etc. Also a
451regular non-ZEO kofactl might not make to much sense. Therefore all
452this might be subject to changes.
[11381]453
454.. _Debian: http://www.debian.org/
455.. _Grok: http://grok.zope.org/
456.. _Python: http://www.python.org/
[11401]457.. _Subversion: http://subversion.apache.org/
[11381]458.. _Ubuntu: http://www.ubuntu.com/
459.. _virtualenv: http://www.virtualenv.org/en/latest/
460.. _WAeUP: https://www.waeup.org/
461.. _Zope: http://www.zope.org/
462.. _zc.buildout: http://cheeseshop.python.org/pypi/zc.buildout
Note: See TracBrowser for help on using the repository browser.