Code

oops, fixed unit tests for journal change
[roundup.git] / doc / installation.txt
1 ==================
2 Installing Roundup
3 ==================
5 :Version: $Revision: 1.34 $
7 .. contents::
10 Overview
11 ========
13 Broken out separately, there are several conceptual pieces to a
14 Roundup installation:
16 Roundup trackers
17  Trackers consist of issues (be they bug reports or otherwise), tracker
18  configuration file(s), web HTML files etc. Roundup trackers are initialised
19  with a "Template" which defines the fields usable/assignable on a
20  per-issue basis.  Descriptions of the provided templates are given in
21  `choosing your template`_.
23 Roundup support code
24  Installed into your Python install's lib directory
26 Roundup scripts
27  These include the email gateway, the roundup
28  HTTP server, the roundup administration command-line interface, etc.
31 Prerequisites
32 =============
34 Python 2.1.1 or newer with a functioning anydbm or bsddb module. Download the
35 latest version from http://www.python.org/. It is highly recommended that
36 users install the latest patch version of python - 2.1.3 or 2.2.1 - as these
37 contain many fixes to serious bugs.
39 If you want to use Berkeley DB bsddb3 with Roundup, use version 3.3.0 or
40 later. Download the latest version from http://pybsddb.sourceforge.net/.
42 If you're on windows, you will either need to be using the ActiveState python
43 distribution (at http://www.activestate.com/Products/ActivePython/), or you'll
44 have to install the win32all package separately (get it from
45 http://starship.python.net/crew/mhammond/win32/).
48 Getting Roundup
49 ===============
51 Download the latest version from http://roundup.sf.net/.
53 Testing your Python
54 -------------------
56 Once you've unpacked roundup's source, run ``python ./run_tests`` in the
57 source directory and make sure there are no errors.
58 If there are errors, please let us know!
60 If the above fails, you may be using the wrong version of python. Try
61 ``python2 ./run_tests``. If that works, you will need to substitute
62 ``python2`` for ``python`` in all further commands you use in relation to
63 Roundup -- from installation and scripts.
66 Installation
67 ============
69 Set aside 15-30 minutes. Please make sure you're using a supported version of
70 Python -- see `testing your python`_. There's four steps to follow in your
71 installation:
73 1. `basic installation steps`_ that all installers must follow
74 2. then optionally `configure a web interface`_
75 3. and optionally `configure an email interface`_
76 4. `shared environment steps`_ to take if you're installing on a shared
77    UNIX machine and want to restrict local access to roundup
79 Most users will only need to follow the first step, since the environment will
80 be a trusted one.
83 Basic Installation Steps
84 ------------------------
86 1. To install the Roundup support code into your Python tree and
87    Roundup scripts into /usr/local/bin. You need to have write permissions
88    for these locations, eg. being root on unix::
90        python setup.py install
92    If you would like to place the Roundup scripts in a directory other
93    than ``/usr/local/bin``, then specify the preferred location with
94    ``--install-script``. For example, to install them in
95    ``/opt/roundup/bin``::
97        python setup.py install --install-scripts=/opt/roundup/bin
99    You can also use the ``--prefix`` option to use a completely different
100    base directory, if you do not want to use administrator rights. If you
101    choose to do this, take note of the message at the end of installation
102    and modify the python path accordingly.
104 2. To create a Roundup tracker (necessary to do before you can
105    use the software in any real fashion):
107    a. (Optional) If you intend to keep your roundup trackers
108       under one top level directory which does not exist yet,
109       you should create that directory now.  Example::
111          mkdir /opt/roundup/trackers
113    b. Either add the Roundup script location to your ``PATH``
114       environment variable or specify the full path to
115       the command in the next step.
117    c. Install a new tracker with the command ``roundup-admin install``.
118       You will be asked a series of questions.  Descriptions of the provided
119       templates can be found in `choosing your template`_ below.  Descriptions
120       of the available backends can be found in `choosing your backend`_
121       below.  The questions will be something like (you may have more
122       templates or backends available)::
124           Enter tracker home: /opt/roundup/trackers/support
125           Templates: classic
126           Select template [classic]: classic
127           Back ends: anydbm, bsddb
128           Select backend [anydbm]: anydbm
130       You will now be directed to edit the tracker configuration and
131       initial schema.  At a minimum, you must set ``MAILHOST``,
132       ``TRACKER_WEB``, ``MAIL_DOMAIN`` and ``ADMIN_EMAIL``. Note that the
133       configuration file uses Python syntax, so almost every value must be
134       ``'quoted'`` using single or double quotes. If you get stuck, and get
135       configuration file errors, then see the `tracker configuration`_ section
136       of the `customisation documentation`_.
138       If you just want to get set up to test things quickly, you can even
139       just set the TRACKER_WEB variable to::
141          TRACKER_WEB = 'http://localhost:8080/support/'
143       See `Customising Roundup`_ for details on configuration
144       and schema changes. Note that you may change any of the configuration
145       after you've initialised the tracker - it's just better to have valid
146       values for this stuff now.
148    d. Initialise the tracker database with ``roundup-admin initialise``.
149       You will need to supply an admin password at this step. You will be
150       prompted::
152           Admin Password:
153                  Confirm:
155       Once this is done, the tracker has been created.
157 3. At this point, your tracker is set up, but doesn't have a nice user
158    interface. To set that up, we need to `configure a web interface`_ and
159    optionally `configure an email interface`_. To quickly test the web
160    interface, assuming ``TRACKER_WEB`` is set to
161    ``'http://localhost:8080/support/'``::
163      roundup-server -p 8080 support=/opt/roundup/trackers/support
165    then direct your web browser at:
167      http://locahost:8080/support/
169    and you should see the tracker interface.
172 Choosing Your Template
173 ----------------------
175 Classic Template
176 ~~~~~~~~~~~~~~~~
178 The classic template is the one defined in the `Roundup Specification`_. It
179 holds issues which have priorities and statuses. Each issue may also have a
180 set of messages which are disseminated to the issue's list of nosy users.
182 Minimal Template
183 ~~~~~~~~~~~~~~~~
185 The minimal template has the minimum setup required for a tracker
186 installation. That is, it has the configuration files, defines a user database
187 and the basic HTML interface to that. It's a completely clean slate for you to
188 create your tracker on.
191 Choosing Your Backend
192 ---------------------
194 The actual storage of Roundup tracker information is handled by backends.
195 There's several to choose from, each with benefits and limitations:
197 **anydbm**
198   This backend is guaranteed to work on any system that Python runs on. It
199   will generally choose the best dbm backend that is available on your system
200   (from the list dbhash, gdbm, dbm, dumbdbm). It is the least scaleable of all
201   backends, but performs well enough for a smallish tracker (a couple of
202   thousand issues, under fifty users, ...).
203 **bsddb**
204   This effectively the same as anydbm, but uses the bsddb backend. This allows
205   it to gain some performance and scaling benefits.
206 **bsddb3**
207   Again, this effectively the same as anydbm, but uses the bsddb3 backend.
208   This allows it to gain some performance and scaling benefits.
209 **sqlite**
210   This uses the SQLite_ embedded RDBMS to provide a fast, scaleable backend.
211   There are no limitations, and it's much faster and more scaleable than the
212   dbm backends.
213 **metakit**
214   This backend is implemented over the metakit_ storage system, using Mk4Py as
215   the interface. It scales much better than the dbm backends.
216 **gadfly**
217   This is a proof-of-concept relational database backend, not really intended
218   for actual production use, although it can be. It uses the Gadfly RDBMS
219   to store data. It is unable to perform string searches due to gadfly not
220   having a LIKE operation. It should scale well, assuming a client/server
221   setup is used. It's much slower than even the dbm backends.
223 Note: you may set your tracker up with the anydbm backend (which is guaranteed
224 to be available) and switch to one of the other backends at any time using the
225 instructions in the `maintenance documentation`_.
228 Configure a Web Interface
229 -------------------------
231 There are three web interfaces to choose from:
233 1. `web server cgi-bin`_
234 2. `stand-alone web server`_
235 3. `Zope product - ZRoundup`_
237 You may need to give the web server user permission to access the tracker home
238 - see the `shared environment steps`_ for information.
241 Web Server cgi-bin
242 ~~~~~~~~~~~~~~~~~~
244 A benefit of using the cgi-bin approach is that it's the easiest way to
245 restrict access to your tracker to only use HTTPS. Access will be slower
246 than through the `stand-alone web server`_ though.
248 Copy the ``cgi-bin/roundup.cgi`` file to your web server's ``cgi-bin``
249 directory. You will need to configure it to tell it where your tracker home
250 is. You can do this either:
252 through an environment variable
253  set the variable TRACKER_HOMES to be a colon (":") separated list of
254  name=home pairs (if you're using apache, the SetEnv directive can do this)
255 directly in the ``roundup.cgi`` file itself
256  add your instance to the TRACKER_HOMES variable as ``'name': 'home'``
258 The "name" part of the configuration will appear in the URL and identifies the
259 tracker (so you may have more than one tracker per cgi-bin script). Make sure
260 there are no spaces or other illegal characters in it (to be safe, stick to
261 letters and numbers). The "name" forms part of the URL that appears in the
262 tracker config TRACKER_WEB variable, so make sure they match. The "home"
263 part of the configuration is the tracker home directory.
265 Stand-alone Web Server
266 ~~~~~~~~~~~~~~~~~~~~~~
268 This approach will give you the fastest of the three web interfaces. You may
269 investigate using ProxyPass or similar configuration in apache to have your
270 tracker accessed through the same URL as other systems.
272 The stand-alone web server is started with the command ``roundup-server``. It
273 has several options - display them with ``roundup-server -h``.
275 The tracker home configuration is similar to the cgi-bin - you may either edit
276 the script to change the TRACKER_HOMES variable or you may supply the
277 name=home values on the command-line after all the other options.
279 To make the server run in the background, use the "-d" option, specifying the
280 name of a file to write the server process id (pid) to.
283 Zope Product - ZRoundup
284 ~~~~~~~~~~~~~~~~~~~~~~~
286 ZRoundup installs as a regular Zope product. Copy the ZRoundup directory to
287 your Products directory either in INSTANCE_HOME/Products or the Zope
288 code tree lib/python/Products.
290 When you next (re)start up Zope, you will be able to add a ZRoundup object
291 that interfaces to your new tracker.
294 Configure an Email Interface
295 ----------------------------
297 If you don't want to use the email component of Roundup, then remove the
298 "``nosyreator.py``" module from your tracker "``detectors``" directory.
300 There are three supported ways to get emailed issues into the
301 Roundup tracker.  You should pick ONE of the following, all
302 of which will continue my example setup from above:
304 As a mail alias pipe process 
305 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
307 Set up a mail alias called "issue_tracker" as (include the quote marks):
308 "``|/usr/bin/python /usr/local/bin/roundup-mailgw <tracker_home>``"
310 In some installations (e.g. RedHat 6.2 I think) you'll need to set up smrsh so
311 sendmail will accept the pipe command. In that case, symlink
312 ``/etc/smrsh/roundup-mailgw`` to "``/usr/local/bin/roundup-mailgw``" and change
313 the command to::
315     |roundup-mailgw /opt/roundup/trackers/support
316  
317 To test the mail gateway on unix systems, try::
319     echo test |mail -s '[issue] test' support@YOUR_DOMAIN_HERE
321 As a regular cron job using a mailbox source
322 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
324 Set ``roundup-mailgw`` up to run every 10 minutes or so. For example::
326   10 * * * * /usr/local/bin/roundup-mailgw /opt/roundup/trackers/support mailbox <mail_spool_file>
328 Where the ``mail_spool_file`` argument is the location of the roundup submission
329 user's mail spool. On most systems, the spool for a user "issue_tracker"
330 will be "``/var/mail/issue_tracker``".
332 As a regular cron job using a POP source
333 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
335 To retrieve from a POP mailbox, use a similar cron entry to the mailbox one::
337   10 * * * * /usr/local/bin/roundup-mailgw /opt/roundup/trackers/support pop <pop_spec>
338     
339 where pop_spec is "``username:password@server``" that specifies the roundup
340 submission user's POP account name, password and server.
343 Shared Environment Steps
344 ------------------------
346 Each tracker ideally should have its own UNIX group, so create
347 a UNIX group (edit ``/etc/group`` or your appropriate NIS map if
348 you're using NIS).  To continue with my examples so far, I would
349 create the UNIX group 'support', although the name of the UNIX
350 group does not have to be the same as the tracker name.  To this
351 'support' group I then add all of the UNIX usernames who will be
352 working with this Roundup tracker.  In addition to 'real' users,
353 the Roundup email gateway will need to have permissions to this
354 area as well, so add the user your mail service runs as to the
355 group.  The UNIX group might then look like::
357      support:*:1002:jblaine,samh,geezer,mail
359 If you intend to use the web interface (as most people do), you
360 should also add the username your web server runs as to the group.
361 My group now looks like this::
363      support:*:1002:jblaine,samh,geezer,mail,apache
365 The tracker "db" directory should be chmod'ed g+sw so that the group can
366 write to the database, and any new files created in the database will be owned
367 by the group.
369 An alternative to the above is to create a new user who has the sole
370 responsibility of running roundup. This user:
372 1. runs the CGI interface daemon
373 2. runs regular polls for email
374 3. runs regular checks (using cron) to ensure the daemon is up
375 4. optionally has no login password so that nobody but the "root" user
376    may actually login and play with the roundup setup.
379 Maintenance
380 ===========
382 Read the separate `maintenance documentation`_ for information about how to
383 perform common maintenance tasks with Roundup.
386 Upgrading
387 =========
389 Read the separate `upgrading document`_, which describes the steps needed to
390 upgrade existing tracker trackers for each version of Roundup that is
391 released.
394 Further Reading
395 ===============
397 If you intend to use Roundup with anything other than the defualt
398 templates, if you would like to hack on Roundup, or if you would
399 like implementation details, you should read `Customising Roundup`_.
402 Platform-Specific Notes
403 =======================
405 Sendmail smrsh
406 --------------
408 If you use Sendmail's ``smrsh`` mechanism, you will need to tell
409 smrsh that roundup-mailgw is a valid/trusted mail handler
410 before it will work.
412 This is usually done via the following 2 steps:
414 1. make a symlink in ``/etc/smrsh`` called ``roundup-mailgw``
415    which points to the full path of your actual ``roundup-mailgw``
416    script.
418 2. change your alias to ``"|roundup-mailgw <tracker_home>"``
421 Linux
422 -----
424 Python 2.1.1 as shipped with SuSE7.3 might be missing module
425 ``_weakref``.
427 -------------------------------------------------------------------------------
429 Back to `Table of Contents`_
431 Next: `User Guide`_
433 .. _`table of contents`: index.html
434 .. _`user guide`: user_guide.html
435 .. _`roundup specification`: spec.html
436 .. _`tracker configuration`: customizing.html#tracker-configuration
437 .. _`customisation documentation`: customizing.html
438 .. _`customising roundup`: customizing.html
439 .. _`upgrading document`: upgrading.html
440 .. _`maintenance documentation`: maintenance.html
441 .. _sqlite: http://www.hwaci.com/sw/sqlite/
442 .. _metakit: http://www.equi4.com/metakit/