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

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

Add quick install guide.

File size: 16.1 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
218As Kofa is currently available from the Subversion_ repository only,
219we use the Subversion_ client `svn` and checkout the main devel branch
220of the `waeup.kofa` package like this::
221
222  (py27)$ svn co https://svn.waeup.org/repos/main/waeup.kofa/trunk
223
224The command should fetch the Kofa base package sources for you and
225will put everything in a new directory ``trunk/``.
226
227Now enter the new directory::
228
229  (py27)$ cd trunk/
230
231and you can start building the real package.
232
233.. note:: If you not want to work with the `waeup.kofa` package but a
234          customized package (like ``waeup.aaue`` or similar), then
235          you can use the above checkout command but with
236          ``waeup.kofa`` replaced by the name of the customized
237          package::
238
239            (py27)$ svn co https://svn.waeup.org/repos/main/<PKG-NAME>/trunk
240
241          For the exact link, please refer to the README.txt file in
242          your package.
243
244
245Bootstrapping the Build
246=======================
247
248After `Creating a Sandbox`_ and `Getting the Sources`_ we have to
249initialize the newly created development environment::
250
251  (py27)$ python bootstrap.py
252
253This should create a local ``bin/`` directory with at least a script
254``buildout`` in it.
255
256If bootstrapping fails, chances are, that you need the `distribute`
257package installed. In a virtual environment you can install it without
258interfering with other packages installed on your server::
259
260  (py27)$ pip install --upgrade distribute
261
262Afterwards you have to retry the bootstrapping, until you get a
263working ``buildout`` script in the local ``bin/`` directory.
264
265Once the ``buildout`` script exists, you do not have to activate the
266virtual envronment any more (although you can).
267
268
269Part 1: Single Client Setup
270***************************
271
272You can run Kofa with a single client (useful for evaluation,
273development, etc.) or with multiple clients running in parallel. The
274latter setup is useful in productive environments with many thousands
275users and called a ``ZEO`` install. We will cover both setup
276types. The first is covered here, the latter one is covered in `Part
2772: ZEO Install`_.
278
279
280Building the Package
281====================
282
283In the sources directory (``trunk/``) you have to prepare the
284project to fetch needed components (eggs), compile C-code parts,
285etc. This is done by a single command ``buildout``::
286
287  $ ./bin/buildout
288
289If this is your first install of some Grok-related project, this step
290will need some time as lots of sources have to be fetched, many
291components must be compiled, etc.
292
293This step must be redone whenever you change something in
294``buildout.cfg``, ``buildout-zeo.cfg``, or ``setup.py``.
295
296Note that if you have more than one sandbox for a Zope-based web
297application, it will probably make sense to share the eggs between the
298different sandboxes.  You can tell ``zc.buildout`` to use a central
299eggs directory by creating ``~/.buildout/default.cfg`` with the
300following contents::
301
302  [buildout]
303  eggs-directory = /home/bruno/buildout-eggs
304
305where the given directory should be exist beforehand. All eggs of all
306`buildout` projects will then be stored in this directory (and not
307fetched anew if already existing there).
308
309
310Start the Instance
311==================
312
313You should be able now to start the created instance by doing::
314
315  $ ./bin/kofactl fg
316
317Alternatively you can do::
318
319  $ bin/paster serve parts/etc/deploy-themed.ini
320
321The port numbers where Kofa is running on your server are defined in
322`buildout.cfg` under ``[kofa_params]``.
323
324If you now point a browser to the right port on your server, for example::
325
326  localhost:8080
327
328you should get a login pop-up, where you can login as superuser with
329``grok`` and ``grok`` as username/password (Kofa base package only!).
330
331You can stop the instance by pressing <CTRL-C>.
332
333If you are connected and logged in,
334you should be able to add the grok-based applications
335(such as ``University``) from the menu.
336
337Add an instance of ``University`` and click on the link next to the
338then visible entry in the list of installed applications.
339
340Running the Tests
341=================
342
343All WAeUP_ packages come with comprehensive test suites ensuring the
344software quality also after changes and updates.
345
346The package tests are easily run by executing the test runner
347from the ``bin`` directory::
348
349  $ ./bin/test
350
351Use the ``-c`` option to get coloured output. Use the ``--pdb`` option
352to start the Python_ debugger when a test fails.
353
354
355Part 2: ZEO Install
356*******************
357
358Each ZEO install consists of at least one ZEO server and normally two
359or more ZEO clients. While the ZEO server is meant to manage the ZODB
360database for clients, the clients connect to the outside world, listen
361for request and do the real dataprocessing.
362
363We prepared a `buildout` configuration that sets up one server
364configuration and two client configs. This configuration is in
365``buildout-zeo.cfg``.
366
367Generating the ZEO Setup
368========================
369
370To install Kofa ZEO-based you can run `buildout` with the given
371(or your own) configuration file like this::
372
373  $ ./bin/buildout -c buildout-zeo.cfg
374
375This should generate all scripts necessary to run servers, clients,
376etc.
377
378Starting ZEO Servers and Clients
379================================
380
381First start the server::
382
383  $ ./bin/zeo_server start
384
385Clients can be started by doing::
386
387  $ ./bin/zeo_client1 start
388  $ ./bin/zeo_client2 start
389
390This will start both clients in daemon mode.
391
392Instead of ``start`` you can, as usually, start an instance in
393foreground (``fg``), etc. You know the drill.
394
395
396Manually Starting ZEO Clients
397=============================
398
399This is normally not neccessary.
400
401``zeo_clientN`` scripts are basically wrappers around calls to
402``bin/paster``. You can bypass this wrapper and start a client
403'manually' like this::
404
405  $ ./bin/paster serve --pid-file var/zeo1.pid --daemon \
406        pars/etc/zeo1.ini
407
408It is important to give a pid-file as `paster` otherwise can not start
409different clients (they would all refer to the same pid file
410`paster.pid` and refuse to start after the first client was started).
411
412
413Setup (parameters, ports, etc.)
414===============================
415
416By default the server will listen on port 8100 for requests from
417localhost (not: from the outside world).
418
419You can change ZEO server settings in the ``[zeo_server]`` section
420of ``buildout-zeo.conf``. Run `buildout` afterwards.
421
422The clients will listen on port 8081 and 8082. You can change settings
423in ``etc/zeo1.ini.in`` and ``etc/zeo2.ini.in`` respectively. Run
424buildout after any change.
425
426If you want to change the paster wrapper for any zeo client, you can
427edit ``etc/zeo1.conf`` and/or ``etc/zeo2.conf``. Run buildout
428afterwards.
429
430
431Stopping ZEO Servers and Clients
432================================
433
434Given everything was started in daemon mode, first stop the clients::
435
436  $ ./bin/zeo_client1 stop
437  $ ./bin/zeo_client2 stop
438
439Then stop the ZEO server::
440
441  $ ./bin/zeo_server stop
442
443
444Creating New ZEO Clients
445========================
446
447You want more ZEO clients to be created by `buildout`? Easy. Three
448steps are neccessary.
449
4501. Create config files in `etc/`
451--------------------------------
452
453Each client needs two configuration files:
454
455  - ``etc/zeoN.conf``
456       configuring the paster wrapper
457
458  - ``etc/zeoN.ini``
459       configuring the runtime config, ports, etc.
460
461Just copy over these files from the already existing zeo1/zeo2 files
462and replace ``zeo1`` or ``zeo2`` with your new name.
463
4642. Update buildout-zeo.cfg
465--------------------------
466
467Here, inside ``buildourt-zeo.cfg`` also three steps are needed.
468
469* 2.1. Create new .ini and .conf entries
470
471  The .conf and .ini files in etc/ are only templates that have to be
472  generated in their really used final location. In buildout-zeo.cfg
473  you can care for this by creating a new ``[zeoN_ini]`` and
474  ``[zeoN_conf]`` option (replacing ``N`` with a number, of course).
475
476  Just copy over existing entries and replace the mentions of ``zeo1``
477  or ``zeo2`` by your ``zeoN``.
478
479* 2.2. Create a new ``zeo_clientN`` entry
480
481  Then you have to create an entry that will generate the
482  ``zeo_clientN`` script. Again, just copy over an existing
483  ``[zeo_client1]`` entry and replace ``1`` withg your client number.
484
485* 2.3. Register the new sections in ``[buildout]`` section
486
487  When done with the above: add the new section in ``[buildout]``::
488
489    [buildout]
490      ...
491      <old entries...>
492      ...
493      zope_conf_zeo_5
494      zeo5_ini
495      zeo_client5
496
497  depending on how you named your new sections.
498
4993. Rerun ``buildout``
500---------------------
501
502When adding or removing client/server instances, make sure to stop all
503running servers/clients before rerunning buildout.
504
505To activate the new setup, rerun buildout::
506
507  $ bin/buildout -c buildout-zeo.cfg
508
509This should generate any new clients and remove older ones or just
510update configuration files.
511
512
513Considerations
514==============
515
516There are some things in the current buildout-zeo.cfg we might do not
517want. It extends the regular ``buildout.cfg`` so that we do not have
518to repeat most sections but the ``parts`` in ``[buildout]`` have to be
519listed.
520
521We need, however, not everything with a ZEO-deploy that is listed in a
522default buildout. We might do not need docs, no profiling, etc. Also a
523regular non-ZEO kofactl might not make to much sense. Therefore all
524this might be subject to changes.
525
526.. _Debian: http://www.debian.org/
527.. _Grok: http://grok.zope.org/
528.. _Python: http://www.python.org/
529.. _Subversion: http://subversion.apache.org/
530.. _Ubuntu: http://www.ubuntu.com/
531.. _virtualenv: http://www.virtualenv.org/en/latest/
532.. _WAeUP: https://www.waeup.org/
533.. _Zope: http://www.zope.org/
534.. _zc.buildout: http://cheeseshop.python.org/pypi/zc.buildout
535.. [#] Strictly speaking, this link fix is required by ``Pillow``, a
536   library used by Kofa to provide higher-level image processing.
Note: See TracBrowser for help on using the repository browser.