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

Last change on this file since 14494 was 13830, checked in by uli, 9 years ago

Update source retrieval docs.

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