File: installation.html

package info (click to toggle)
roundup 1.2.1-10%2Betch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 4,764 kB
  • ctags: 3,756
  • sloc: python: 30,296; sh: 1,497; perl: 23; makefile: 22
file content (1145 lines) | stat: -rw-r--r-- 58,678 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
<title>Installing Roundup</title>
<style type="text/css">

/*
:Author: David Goodger
:Contact: goodger@users.sourceforge.net
:Date: $Date$
:Revision: $Revision$
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.

See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/

/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
  border: 0 }

table.borderless td, table.borderless th {
  /* Override padding for "table.docutils td" with "! important".
     The right padding separates the table cells. */
  padding: 0 0.5em 0 0 ! important }

.first {
  /* Override more specific margin styles with "! important". */
  margin-top: 0 ! important }

.last, .with-subtitle {
  margin-bottom: 0 ! important }

.hidden {
  display: none }

a.toc-backref {
  text-decoration: none ;
  color: black }

blockquote.epigraph {
  margin: 2em 5em ; }

dl.docutils dd {
  margin-bottom: 0.5em }

/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
  font-weight: bold }
*/

div.abstract {
  margin: 2em 5em }

div.abstract p.topic-title {
  font-weight: bold ;
  text-align: center }

div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
  margin: 2em ;
  border: medium outset ;
  padding: 1em }

div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
  font-weight: bold ;
  font-family: sans-serif }

div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
  color: red ;
  font-weight: bold ;
  font-family: sans-serif }

/* Uncomment (and remove this text!) to get reduced vertical space in
   compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
  margin-bottom: 0.5em }

div.compound .compound-last, div.compound .compound-middle {
  margin-top: 0.5em }
*/

div.dedication {
  margin: 2em 5em ;
  text-align: center ;
  font-style: italic }

div.dedication p.topic-title {
  font-weight: bold ;
  font-style: normal }

div.figure {
  margin-left: 2em ;
  margin-right: 2em }

div.footer, div.header {
  clear: both;
  font-size: smaller }

div.line-block {
  display: block ;
  margin-top: 1em ;
  margin-bottom: 1em }

div.line-block div.line-block {
  margin-top: 0 ;
  margin-bottom: 0 ;
  margin-left: 1.5em }

div.sidebar {
  margin-left: 1em ;
  border: medium outset ;
  padding: 1em ;
  background-color: #ffffee ;
  width: 40% ;
  float: right ;
  clear: right }

div.sidebar p.rubric {
  font-family: sans-serif ;
  font-size: medium }

div.system-messages {
  margin: 5em }

div.system-messages h1 {
  color: red }

div.system-message {
  border: medium outset ;
  padding: 1em }

div.system-message p.system-message-title {
  color: red ;
  font-weight: bold }

div.topic {
  margin: 2em }

h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
  margin-top: 0.4em }

h1.title {
  text-align: center }

h2.subtitle {
  text-align: center }

hr.docutils {
  width: 75% }

img.align-left {
  clear: left }

img.align-right {
  clear: right }

ol.simple, ul.simple {
  margin-bottom: 1em }

ol.arabic {
  list-style: decimal }

ol.loweralpha {
  list-style: lower-alpha }

ol.upperalpha {
  list-style: upper-alpha }

ol.lowerroman {
  list-style: lower-roman }

ol.upperroman {
  list-style: upper-roman }

p.attribution {
  text-align: right ;
  margin-left: 50% }

p.caption {
  font-style: italic }

p.credits {
  font-style: italic ;
  font-size: smaller }

p.label {
  white-space: nowrap }

p.rubric {
  font-weight: bold ;
  font-size: larger ;
  color: maroon ;
  text-align: center }

p.sidebar-title {
  font-family: sans-serif ;
  font-weight: bold ;
  font-size: larger }

p.sidebar-subtitle {
  font-family: sans-serif ;
  font-weight: bold }

p.topic-title {
  font-weight: bold }

pre.address {
  margin-bottom: 0 ;
  margin-top: 0 ;
  font-family: serif ;
  font-size: 100% }

pre.literal-block, pre.doctest-block {
  margin-left: 2em ;
  margin-right: 2em ;
  background-color: #eeeeee }

span.classifier {
  font-family: sans-serif ;
  font-style: oblique }

span.classifier-delimiter {
  font-family: sans-serif ;
  font-weight: bold }

span.interpreted {
  font-family: sans-serif }

span.option {
  white-space: nowrap }

span.pre {
  white-space: pre }

span.problematic {
  color: red }

span.section-subtitle {
  /* font-size relative to parent (h1..h6 element) */
  font-size: 80% }

table.citation {
  border-left: solid 1px gray;
  margin-left: 1px }

table.docinfo {
  margin: 2em 4em }

table.docutils {
  margin-top: 0.5em ;
  margin-bottom: 0.5em }

table.footnote {
  border-left: solid 1px black;
  margin-left: 1px }

table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
  padding-left: 0.5em ;
  padding-right: 0.5em ;
  vertical-align: top }

table.docutils th.field-name, table.docinfo th.docinfo-name {
  font-weight: bold ;
  text-align: left ;
  white-space: nowrap ;
  padding-left: 0 }

h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
  font-size: 100% }

tt.docutils {
  background-color: #eeeeee }

ul.auto-toc {
  list-style-type: none }

</style>
</head>
<body>
<div class="document" id="installing-roundup">
<h1 class="title">Installing Roundup</h1>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr><th class="docinfo-name">Version:</th>
<td>1.76</td></tr>
</tbody>
</table>
<div class="contents topic">
<p class="topic-title first"><a id="contents" name="contents">Contents</a></p>
<ul class="simple">
<li><a class="reference" href="#overview" id="id3" name="id3">Overview</a></li>
<li><a class="reference" href="#prerequisites" id="id4" name="id4">Prerequisites</a></li>
<li><a class="reference" href="#optional-components" id="id5" name="id5">Optional Components</a></li>
<li><a class="reference" href="#getting-roundup" id="id6" name="id6">Getting Roundup</a></li>
<li><a class="reference" href="#for-the-really-impatient" id="id7" name="id7">For The Really Impatient</a></li>
<li><a class="reference" href="#installation" id="id8" name="id8">Installation</a><ul>
<li><a class="reference" href="#basic-installation-steps" id="id9" name="id9">Basic Installation Steps</a></li>
<li><a class="reference" href="#configuring-your-first-tracker" id="id10" name="id10">Configuring your first tracker</a></li>
<li><a class="reference" href="#choosing-your-template" id="id11" name="id11">Choosing Your Template</a></li>
<li><a class="reference" href="#choosing-your-backend" id="id12" name="id12">Choosing Your Backend</a></li>
<li><a class="reference" href="#configure-a-web-interface" id="id13" name="id13">Configure a Web Interface</a></li>
<li><a class="reference" href="#configure-an-email-interface" id="id14" name="id14">Configure an Email Interface</a></li>
<li><a class="reference" href="#unix-environment-steps" id="id15" name="id15">UNIX Environment Steps</a></li>
<li><a class="reference" href="#additional-language-codecs" id="id16" name="id16">Additional Language Codecs</a></li>
</ul>
</li>
<li><a class="reference" href="#maintenance" id="id17" name="id17">Maintenance</a></li>
<li><a class="reference" href="#upgrading" id="id18" name="id18">Upgrading</a></li>
<li><a class="reference" href="#further-reading" id="id19" name="id19">Further Reading</a></li>
<li><a class="reference" href="#running-multiple-trackers" id="id20" name="id20">Running Multiple Trackers</a></li>
<li><a class="reference" href="#platform-specific-notes" id="id21" name="id21">Platform-Specific Notes</a><ul>
<li><a class="reference" href="#windows-command-line-tools" id="id22" name="id22">Windows command-line tools</a></li>
<li><a class="reference" href="#windows-server" id="id23" name="id23">Windows Server</a></li>
<li><a class="reference" href="#sendmail-smrsh" id="id24" name="id24">Sendmail smrsh</a></li>
<li><a class="reference" href="#linux" id="id25" name="id25">Linux</a></li>
<li><a class="reference" href="#solaris" id="id26" name="id26">Solaris</a></li>
</ul>
</li>
<li><a class="reference" href="#problems-testing-your-python" id="id27" name="id27">Problems? Testing your Python...</a></li>
</ul>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id3" id="overview" name="overview">Overview</a></h1>
<p>Broken out separately, there are several conceptual pieces to a
Roundup installation:</p>
<dl class="docutils">
<dt>Roundup trackers</dt>
<dd>Trackers consist of issues (be they bug reports or otherwise), tracker
configuration file(s), web HTML files etc. Roundup trackers are initialised
with a &quot;Template&quot; which defines the fields usable/assignable on a
per-issue basis.  Descriptions of the provided templates are given in
<a class="reference" href="#choosing-your-template">choosing your template</a>.</dd>
<dt>Roundup support code</dt>
<dd>Installed into your Python install's lib directory.</dd>
<dt>Roundup scripts</dt>
<dd>These include the email gateway, the roundup
HTTP server, the roundup administration command-line interface, etc.</dd>
</dl>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id4" id="prerequisites" name="prerequisites">Prerequisites</a></h1>
<p>Roundup requires Python 2.3 or newer with a functioning anydbm
module. Download the latest version from <a class="reference" href="http://www.python.org/">http://www.python.org/</a>.
It is highly recommended that users install the latest patch version
of python as these contain many fixes to serious bugs.</p>
<p>Some variants of Linux will need an additional &quot;python dev&quot; package
installed for Roundup installation to work. Debian and derivatives, are
known to require this.</p>
<p>If you're on windows, you will either need to be using the ActiveState python
distribution (at <a class="reference" href="http://www.activestate.com/Products/ActivePython/">http://www.activestate.com/Products/ActivePython/</a>), or you'll
have to install the win32all package separately (get it from
<a class="reference" href="http://starship.python.net/crew/mhammond/win32/">http://starship.python.net/crew/mhammond/win32/</a>).</p>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id5" id="optional-components" name="optional-components">Optional Components</a></h1>
<p>You may optionally install and use:</p>
<dl class="docutils">
<dt>Timezone Definitions</dt>
<dd>Full timezone support requires <a class="reference" href="http://pytz.sourceforge.net/">pytz</a> module which brings the
<a class="reference" href="http://www.twinsun.com/tz/tz-link.htm">Olson tz database</a> into Python.  If <a class="reference" href="http://pytz.sourceforge.net/">pytz</a> is not installed,
timezones may be specified as numeric hour offsets only.</dd>
<dt>An RDBMS</dt>
<dd>Sqlite, MySQL and Postgresql are all supported by Roundup and will be
used if available. One of these is recommended if you are anticipating a
large user base (see <a class="reference" href="#choosing-your-backend">choosing your backend</a> below).</dd>
<dt>Xapian full-text indexer</dt>
<dd><p class="first">The <a class="reference" href="http://www.xapian.org/">Xapian</a> full-text indexer is also supported and will be used by
default if it is available. This is strongly recommended if you are
anticipating a large number of issues (&gt; 5000).</p>
<p>You may install Xapian at any time, even after a tracker has been
installed and used. You will need to run the &quot;roundup-admin reindex&quot;
command if the tracker has existing data.</p>
<p class="last">Roundup requires Xapian <em>newer</em> than 0.9.2 - it may be necessary for
you to install a snapshot. Snapshot &quot;0.9.2_svn6532&quot; has been tried
successfully.</p>
</dd>
</dl>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id6" id="getting-roundup" name="getting-roundup">Getting Roundup</a></h1>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last">Some systems, such as Debian and NetBSD, already have Roundup
installed. Try running the command &quot;roundup-admin&quot; with no arguments,
and if it runs you may skip the <a class="reference" href="#basic-installation-steps">Basic Installation Steps</a>
below and go straight to <a class="reference" href="#configuring-your-first-tracker">configuring your first tracker</a>.</p>
</div>
<p>Download the latest version from <a class="reference" href="http://roundup.sf.net/">http://roundup.sf.net/</a>.</p>
<p>If you're using WinZIP's &quot;classic&quot; interface, make sure the &quot;Use
folder names&quot; check box is checked before you extract the files.</p>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id7" id="for-the-really-impatient" name="for-the-really-impatient">For The Really Impatient</a></h1>
<p>If you just want to give Roundup a whirl Right Now, then simply run
<tt class="docutils literal"><span class="pre">roundup-demo</span></tt>.</p>
<p>This will set up a simple demo tracker on your machine. <a class="footnote-reference" href="#id2" id="id1" name="id1">[1]</a>
When it's done, it'll print out a URL to point your web browser at
so you may start playing. Three users will be set up:</p>
<ol class="arabic simple">
<li>anonymous - the &quot;default&quot; user with permission to do very little</li>
<li>demo (password &quot;demo&quot;) - a normal user who may create issues</li>
<li>admin (password &quot;admin&quot;) - an administrative user who has complete
access to the tracker</li>
</ol>
<table class="docutils footnote" frame="void" id="id2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1" name="id2">[1]</a></td><td>Demo tracker is set up to be accessed by localhost browser.
If you run demo on a server host, please stop the demo when
it has shown startup notice, open file <tt class="docutils literal"><span class="pre">demo/config.ini</span></tt> with
your editor, change host name in the <tt class="docutils literal"><span class="pre">web</span></tt> option in section
<tt class="docutils literal"><span class="pre">[tracker]</span></tt>, save the file, then re-run the demo program.</td></tr>
</tbody>
</table>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id8" id="installation" name="installation">Installation</a></h1>
<p>Set aside 15-30 minutes. There's several steps to follow in your
installation:</p>
<ol class="arabic simple">
<li><a class="reference" href="#basic-installation-steps">basic installation steps</a> if Roundup is not installed on your system</li>
<li><a class="reference" href="#configuring-your-first-tracker">configuring your first tracker</a> that all installers must follow</li>
<li>then optionally <a class="reference" href="#configure-a-web-interface">configure a web interface</a></li>
<li>and optionally <a class="reference" href="#configure-an-email-interface">configure an email interface</a></li>
<li><a class="reference" href="#unix-environment-steps">UNIX environment steps</a> to take if you're installing on a shared
UNIX machine and want to restrict local access to roundup</li>
<li><a class="reference" href="#additional-language-codecs">additional language codecs</a></li>
</ol>
<p>For information about how Roundup installs, see the <a class="reference" href="admin_guide.html">administration
guide</a>.</p>
<div class="section">
<h2><a class="toc-backref" href="#id9" id="basic-installation-steps" name="basic-installation-steps">Basic Installation Steps</a></h2>
<p>To install the Roundup support code into your Python tree and
Roundup scripts into /usr/bin (substitute that path for whatever is
appropriate on your system). You need to have write permissions
for these locations, eg. being root on unix:</p>
<pre class="literal-block">
python setup.py install
</pre>
<p>If you would like to place the Roundup scripts in a directory other
than <tt class="docutils literal"><span class="pre">/usr/bin</span></tt>, then specify the preferred location with
<tt class="docutils literal"><span class="pre">--install-script</span></tt>. For example, to install them in
<tt class="docutils literal"><span class="pre">/opt/roundup/bin</span></tt>:</p>
<pre class="literal-block">
python setup.py install --install-scripts=/opt/roundup/bin
</pre>
<p>You can also use the <tt class="docutils literal"><span class="pre">--prefix</span></tt> option to use a completely different
base directory, if you do not want to use administrator rights. If you
choose to do this, you may have to change Python's search path (sys.path)
yourself.</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id10" id="configuring-your-first-tracker" name="configuring-your-first-tracker">Configuring your first tracker</a></h2>
<ol class="arabic">
<li><p class="first">To create a Roundup tracker (necessary to do before you can
use the software in any real fashion), you need to set up a &quot;tracker
home&quot;:</p>
<ol class="loweralpha">
<li><p class="first">(Optional) If you intend to keep your roundup trackers
under one top level directory which does not exist yet,
you should create that directory now.  Example:</p>
<pre class="literal-block">
mkdir /opt/roundup/trackers
</pre>
</li>
<li><p class="first">Either add the Roundup script location to your <tt class="docutils literal"><span class="pre">PATH</span></tt>
environment variable or specify the full path to
the command in the next step.</p>
</li>
<li><p class="first">Install a new tracker with the command <tt class="docutils literal"><span class="pre">roundup-admin</span> <span class="pre">install</span></tt>.
You will be asked a series of questions.  Descriptions of the provided
templates can be found in <a class="reference" href="#choosing-your-template">choosing your template</a> below.  Descriptions
of the available backends can be found in <a class="reference" href="#choosing-your-backend">choosing your backend</a>
below.  The questions will be something like (you may have more
templates or backends available):</p>
<pre class="literal-block">
Enter tracker home: /opt/roundup/trackers/support
Templates: classic
Select template [classic]: classic
Back ends: anydbm, mysql, sqlite
Select backend [anydbm]: anydbm
</pre>
<p>Note: &quot;Back ends&quot; selection list depends on availability of
third-party database modules.  Standard python distribution
includes anydbm module only.</p>
<p>The &quot;support&quot; part of the tracker name can be anything you want - it
is going to be used as the directory that the tracker information
will be stored in.</p>
<p>You will now be directed to edit the tracker configuration and
initial schema.  At a minimum, you must set &quot;main :: admin_email&quot;
(that's the &quot;admin_email&quot; option in the &quot;main&quot; section) &quot;mail ::
host&quot;, &quot;tracker :: web&quot; and &quot;mail :: domain&quot;.  If you get stuck,
and get configuration file errors, then see the <a class="reference" href="customizing.html#tracker-configuration">tracker
configuration</a> section of the <a class="reference" href="customizing.html">customisation documentation</a>.</p>
<p>If you just want to get set up to test things quickly (and follow
the instructions in step 3 below), you can even just set the
&quot;tracker :: web&quot; variable to:</p>
<pre class="literal-block">
web = http://localhost:8080/support/
</pre>
<p>The URL <em>must</em> end in a '/', or your web interface <em>will not work</em>.
See <a class="reference" href="customizing.html">Customising Roundup</a> for details on configuration and schema
changes. You may change any of the configuration after
you've initialised the tracker - it's just better to have valid values
for this stuff now.</p>
</li>
<li><p class="first">Initialise the tracker database with <tt class="docutils literal"><span class="pre">roundup-admin</span> <span class="pre">initialise</span></tt>.
You will need to supply an admin password at this step. You will be
prompted:</p>
<pre class="literal-block">
Admin Password:
       Confirm:
</pre>
<p>Note: running this command will <em>destroy any existing data in the
database</em>. In the case of MySQL and PostgreSQL, any exsting database
will be dropped and re-created.</p>
<p>Once this is done, the tracker has been created.</p>
</li>
</ol>
</li>
<li><p class="first">At this point, your tracker is set up, but doesn't have a nice user
interface. To set that up, we need to <a class="reference" href="#configure-a-web-interface">configure a web interface</a> and
optionally <a class="reference" href="#configure-an-email-interface">configure an email interface</a>. If you want to try your
new tracker out, assuming &quot;tracker :: web&quot; is set to
<tt class="docutils literal"><span class="pre">'http://localhost:8080/support/'</span></tt>, run:</p>
<pre class="literal-block">
roundup-server support=/opt/roundup/trackers/support
</pre>
<p>then direct your web browser at:</p>
<blockquote>
<p><a class="reference" href="http://localhost:8080/support/">http://localhost:8080/support/</a></p>
</blockquote>
<p>and you should see the tracker interface.</p>
</li>
</ol>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id11" id="choosing-your-template" name="choosing-your-template">Choosing Your Template</a></h2>
<div class="section">
<h3><a id="classic-template" name="classic-template">Classic Template</a></h3>
<p>The classic template is the one defined in the <a class="reference" href="spec.html">Roundup Specification</a>. It
holds issues which have priorities and statuses. Each issue may also have a
set of messages which are disseminated to the issue's list of nosy users.</p>
</div>
<div class="section">
<h3><a id="minimal-template" name="minimal-template">Minimal Template</a></h3>
<p>The minimal template has the minimum setup required for a tracker
installation. That is, it has the configuration files, defines a user database
and the basic HTML interface to that. It's a completely clean slate for you to
create your tracker on.</p>
</div>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id12" id="choosing-your-backend" name="choosing-your-backend">Choosing Your Backend</a></h2>
<p>The actual storage of Roundup tracker information is handled by backends.
There's several to choose from, each with benefits and limitations:</p>
<table border="1" class="docutils">
<colgroup>
<col width="18%" />
<col width="20%" />
<col width="9%" />
<col width="54%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Name</th>
<th class="head">Speed</th>
<th class="head">Users</th>
<th class="head">Support</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>anydbm</td>
<td>Slowest</td>
<td>Few</td>
<td>Always available</td>
</tr>
<tr><td>sqlite</td>
<td>Fastest(*)</td>
<td>Few</td>
<td>Needs install (<a class="reference" href="http://pysqlite.org/">PySQLite</a>)</td>
</tr>
<tr><td>metakit</td>
<td>Fastest(*)</td>
<td>Few</td>
<td>Needs install (<a class="reference" href="http://www.equi4.com/metakit/">metakit</a>)</td>
</tr>
<tr><td>postgresql</td>
<td>Fast</td>
<td>Many</td>
<td>Needs install/admin (<a class="reference" href="http://initd.org/software/initd/psycopg">psycopg</a>)</td>
</tr>
<tr><td>mysql</td>
<td>Fast</td>
<td>Many</td>
<td>Needs install/admin (<a class="reference" href="http://sourceforge.net/projects/mysql-python">MySQLdb</a>)</td>
</tr>
</tbody>
</table>
<dl class="docutils">
<dt><strong>sqlite</strong> and <strong>metakit</strong></dt>
<dd>These use the embedded database engines <a class="reference" href="http://pysqlite.org/">PySQLite</a> and <a class="reference" href="http://www.equi4.com/metakit/">metakit</a> to provide
very fast backends. They are not suitable for trackers which will have
many simultaneous users, but require much less installation and
maintenance effort than more scalable postgresql and mysql backends.
If you are choosing from these two, please select sqlite.</dd>
<dt><strong>postgresql</strong></dt>
<dd>Backend for popular RDBMS PostgreSQL. You must read doc/postgresql.txt for
additional installation steps and requirements. You must also configure
the <tt class="docutils literal"><span class="pre">rdbms</span></tt> section of your tracker's <tt class="docutils literal"><span class="pre">config.ini</span></tt>.  It is recommended
that you use at least version 1.1.21 of psycopg.</dd>
<dt><strong>mysql</strong></dt>
<dd>Backend for popular RDBMS MySQL. You must read doc/mysql.txt for additional
installation steps and requirements. You must also configure the <tt class="docutils literal"><span class="pre">rdbms</span></tt>
section of your tracker's <tt class="docutils literal"><span class="pre">config.ini</span></tt></dd>
</dl>
<p>You may defer your decision by setting your tracker up with the anydbm
backend (which is guaranteed to be available) and switching to one of the
other backends at any time using the instructions in the <a class="reference" href="admin_guide.html">administration
guide</a>.</p>
<p>Regardless of which backend you choose, Roundup will attempt to initialise
a new database for you when you run the roundup-admin &quot;initialise&quot; command.
In the case of MySQL and PostgreSQL you will need to have the appropriate
privileges to create databases.</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id13" id="configure-a-web-interface" name="configure-a-web-interface">Configure a Web Interface</a></h2>
<p>There are three web interfaces to choose from:</p>
<ol class="arabic simple">
<li><a class="reference" href="#web-server-cgi-bin">web server cgi-bin</a></li>
<li><a class="reference" href="#stand-alone-web-server">stand-alone web server</a></li>
<li><a class="reference" href="#zope-product-zroundup">Zope product - ZRoundup</a></li>
<li><a class="reference" href="#apache-http-server-with-mod-python">Apache HTTP Server with mod_python</a></li>
</ol>
<p>You may need to give the web server user permission to access the tracker home
- see the <a class="reference" href="#unix-environment-steps">UNIX environment steps</a> for information. You may also need to
configure your system in some way - see <a class="reference" href="#platform-specific-notes">platform-specific notes</a>.</p>
<div class="section">
<h3><a id="web-server-cgi-bin" name="web-server-cgi-bin">Web Server cgi-bin</a></h3>
<p>A benefit of using the cgi-bin approach is that it's the easiest way to
restrict access to your tracker to only use HTTPS. Access will be slower
than through the <a class="reference" href="#stand-alone-web-server">stand-alone web server</a> though.</p>
<p>If your Python isn't install as &quot;python&quot; then you'll need to edit
the <tt class="docutils literal"><span class="pre">roundup.cgi</span></tt> script to fix the first line.</p>
<p>If you're using IIS on a Windows platform, you'll need to run this command
for the cgi to work (it turns on the PATH_INFO cgi variable):</p>
<pre class="literal-block">
adsutil.vbs set w3svc/AllowPathInfoForScriptMappings TRUE
</pre>
<p>The <tt class="docutils literal"><span class="pre">adsutil.vbs</span></tt> file can be found in either <tt class="docutils literal"><span class="pre">c:\inetpub\adminscripts</span></tt>
or <tt class="docutils literal"><span class="pre">c:\winnt\system32\inetsrv\adminsamples\</span></tt> or
<tt class="docutils literal"><span class="pre">c:\winnt\system32\inetsrv\adminscripts\</span></tt> depending on your installation.</p>
<p>More information about ISS setup may be found at:</p>
<blockquote>
<a class="reference" href="http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B276494">http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B276494</a></blockquote>
<p>Copy the <tt class="docutils literal"><span class="pre">cgi-bin/roundup.cgi</span></tt> file to your web server's <tt class="docutils literal"><span class="pre">cgi-bin</span></tt>
directory. You will need to configure it to tell it where your tracker home
is. You can do this either:</p>
<dl class="docutils">
<dt>Through an environment variable</dt>
<dd>Set the variable TRACKER_HOMES to be a colon (&quot;:&quot;) separated list of
name=home pairs (if you're using apache, the SetEnv directive can do this)</dd>
<dt>Directly in the <tt class="docutils literal"><span class="pre">roundup.cgi</span></tt> file itself</dt>
<dd>Add your instance to the TRACKER_HOMES variable as <tt class="docutils literal"><span class="pre">'name':</span> <span class="pre">'home'</span></tt></dd>
</dl>
<p>The &quot;name&quot; part of the configuration will appear in the URL and identifies the
tracker (so you may have more than one tracker per cgi-bin script). Make sure
there are no spaces or other illegal characters in it (to be safe, stick to
letters and numbers). The &quot;name&quot; forms part of the URL that appears in the
tracker config &quot;tracker :: web&quot; variable, so make sure they match. The &quot;home&quot;
part of the configuration is the tracker home directory.</p>
<p>If you're using Apache, you can use an additional trick to hide the
<tt class="docutils literal"><span class="pre">.cgi</span></tt> extension of the cgi script. Place the <tt class="docutils literal"><span class="pre">roundup.cgi</span></tt> script
wherever you want it to be, renamed it to just <tt class="docutils literal"><span class="pre">roundup</span></tt>, and add a
couple lines to your Apache configuration:</p>
<pre class="literal-block">
&lt;Location /path/to/roundup&gt;
  SetHandler cgi-script
&lt;/Location&gt;
</pre>
</div>
<div class="section">
<h3><a id="stand-alone-web-server" name="stand-alone-web-server">Stand-alone Web Server</a></h3>
<p>This approach will give you the fastest of the three web interfaces. You may
investigate using ProxyPass or similar configuration in apache to have your
tracker accessed through the same URL as other systems.</p>
<p>The stand-alone web server is started with the command <tt class="docutils literal"><span class="pre">roundup-server</span></tt>. It
has several options - display them with <tt class="docutils literal"><span class="pre">roundup-server</span> <span class="pre">-h</span></tt>.</p>
<p>The tracker home configuration is similar to the cgi-bin - you may either edit
the script to change the TRACKER_HOMES variable or you may supply the
name=home values on the command-line after all the other options.</p>
<p>To make the server run in the background, use the &quot;-d&quot; option, specifying the
name of a file to write the server process id (pid) to.</p>
</div>
<div class="section">
<h3><a id="zope-product-zroundup" name="zope-product-zroundup">Zope Product - ZRoundup</a></h3>
<p>ZRoundup installs as a regular Zope product. Copy the ZRoundup directory to
your Products directory either in INSTANCE_HOME/Products or the Zope
code tree lib/python/Products.</p>
<p>When you next (re)start up Zope, you will be able to add a ZRoundup object
that interfaces to your new tracker.</p>
</div>
<div class="section">
<h3><a id="apache-http-server-with-mod-python" name="apache-http-server-with-mod-python">Apache HTTP Server with mod_python</a></h3>
<p><a class="reference" href="http://www.modpython.org/">Mod_python</a> is an <a class="reference" href="http://httpd.apache.org/">Apache</a> module that embeds the Python interpreter
within the server.  Running Roundup this way is much faster than all
above options and, like <a class="reference" href="#web-server-cgi-bin">web server cgi-bin</a>, allows to use HTTPS
protocol.  The drawback is that this setup is more complicated.</p>
<p>The following instructions were tested on apache 2.0 with mod_python 3.1.
If you are using older versions, your mileage may vary.</p>
<p>Mod_python uses OS threads.  If your apache was built without threads
(quite commonly), you must load the threading library to run mod_python.
This is done by setting <tt class="docutils literal"><span class="pre">LD_PRELOAD</span></tt> to your threading library path
in apache <tt class="docutils literal"><span class="pre">envvars</span></tt> file.  Example for gentoo linux (<tt class="docutils literal"><span class="pre">envvars</span></tt> file
is located in <tt class="docutils literal"><span class="pre">/usr/lib/apache2/build/</span></tt>):</p>
<pre class="literal-block">
LD_PRELOAD=/lib/libpthread.so.0
export LD_PRELOAD
</pre>
<p>Example for FreeBSD (<tt class="docutils literal"><span class="pre">envvars</span></tt> is in <tt class="docutils literal"><span class="pre">/usr/local/sbin/</span></tt>):</p>
<pre class="literal-block">
LD_PRELOAD=/usr/lib/libc_r.so
export LD_PRELOAD
</pre>
<p>Next, you have to add Roundup trackers configuration to apache config.
Roundup apache interface uses two options specified with <tt class="docutils literal"><span class="pre">PythonOption</span></tt>
directives:</p>
<blockquote>
<dl class="docutils">
<dt>TrackerHome:</dt>
<dd>defines the tracker home directory - the directory that was specified
when you did <tt class="docutils literal"><span class="pre">roundup-admin</span> <span class="pre">init</span></tt>.  This option is required.</dd>
<dt>TrackerLaguage:</dt>
<dd>defines web user interface language.  mod_python applications do not
receive OS environment variables in the same way as command-line
programs, so the language cannot be selected by setting commonly
used variables like <tt class="docutils literal"><span class="pre">LANG</span></tt> or <tt class="docutils literal"><span class="pre">LC_ALL</span></tt>.  <tt class="docutils literal"><span class="pre">TrackerLanguage</span></tt>
value has the same syntax as values of these environment variables.
This option may be omitted.</dd>
<dt>TrackerDebug:</dt>
<dd>run the tracker in debug mode.  Setting this option to <tt class="docutils literal"><span class="pre">yes</span></tt> or
<tt class="docutils literal"><span class="pre">true</span></tt> has the same effect as running <tt class="docutils literal"><span class="pre">roundup-server</span> <span class="pre">-t</span> <span class="pre">debug</span></tt>:
the database schema and used html templates are rebuilt for each
HTTP request.  Values <tt class="docutils literal"><span class="pre">no</span></tt> or <tt class="docutils literal"><span class="pre">false</span></tt> mean that all html
templates for the tracker are compiled and the database schema is
checked once at startup.  This is the default behaviour.</dd>
<dt>TrackerTiming:</dt>
<dd>has nearly the same effect as environment variable <tt class="docutils literal"><span class="pre">CGI_SHOW_TIMING</span></tt>
for standalone roundup server.  The difference is that setting this
option to <tt class="docutils literal"><span class="pre">no</span></tt> or <tt class="docutils literal"><span class="pre">false</span></tt> disables timings display.  Value
<tt class="docutils literal"><span class="pre">comment</span></tt> writes request handling times in html comment, and
any other non-empty value makes timing report visible.  By default,
timing display is disabled.</dd>
</dl>
</blockquote>
<p>In the following example we have two trackers set up in
<tt class="docutils literal"><span class="pre">/var/db/roundup/support</span></tt> and <tt class="docutils literal"><span class="pre">var/db/roundup/devel</span></tt> and accessed
as <tt class="docutils literal"><span class="pre">https://my.host/roundup/support/</span></tt> and <tt class="docutils literal"><span class="pre">https://my.host/roundup/devel/</span></tt>
respectively.  Having them share same parent directory allows us to
reduce the number of configuration directives.  Support tracker has
russian user interface.  The other tracker (devel) has english user
interface (default).</p>
<p>Static files from <tt class="docutils literal"><span class="pre">html</span></tt> directory are served by apache itself - this
is quickier and generally more robust than doing that from python.
Everything else is aliased to dummy (non-existing) <tt class="docutils literal"><span class="pre">py</span></tt> file,
which is handled by mod_python and our roundup module.</p>
<p>Example mod_python configuration:</p>
<pre class="literal-block">
#################################################
# Roundup Issue tracker
#################################################
# enable Python optimizations (like 'python -O')
PythonOptimize On
# let apache handle static files from 'html' directories
AliasMatch /roundup/(.+)/&#64;&#64;file/(.*) /var/db/roundup/$1/html/$2
# everything else is handled by roundup web UI
AliasMatch /roundup/([^/]+)/(?!&#64;&#64;file/)(.*) /var/db/roundup/$1/dummy.py/$2
# roundup requires a slash after tracker name - add it if missing
RedirectMatch permanent /roundup/([^/]+)$ /roundup/$1/
# common settings for all roundup trackers
&lt;Directory /var/db/roundup/*&gt;
  Order allow,deny
  Allow from all
  AllowOverride None
  Options None
  AddHandler python-program .py
  PythonHandler roundup.cgi.apache
  # uncomment the following line to see tracebacks in the browser
  # (note that *some* tracebacks will be displayed anyway)
  #PythonDebug On
&lt;/Directory&gt;
# roundup tracker homes
&lt;Directory /var/db/roundup/support&gt;
  PythonOption TrackerHome /var/db/roundup/support
  PythonOption TrackerLanguage ru
&lt;/Directory&gt;
&lt;Directory /var/db/roundup/devel&gt;
  PythonOption TrackerHome /var/db/roundup/devel
&lt;/Directory&gt;
</pre>
</div>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id14" id="configure-an-email-interface" name="configure-an-email-interface">Configure an Email Interface</a></h2>
<p>If you don't want to use the email component of Roundup, then remove the
&quot;<tt class="docutils literal"><span class="pre">nosyreaction.py</span></tt>&quot; module from your tracker &quot;<tt class="docutils literal"><span class="pre">detectors</span></tt>&quot; directory.</p>
<p>See <a class="reference" href="#platform-specific-notes">platform-specific notes</a> for steps that may be needed on your system.</p>
<p>There are three supported ways to get emailed issues into the
Roundup tracker.  You should pick ONE of the following, all
of which will continue my example setup from above:</p>
<div class="section">
<h3><a id="as-a-mail-alias-pipe-process" name="as-a-mail-alias-pipe-process">As a mail alias pipe process</a></h3>
<p>Set up a mail alias called &quot;issue_tracker&quot; as (include the quote marks):
&quot;<tt class="docutils literal"><span class="pre">|/usr/bin/python</span> <span class="pre">/usr/bin/roundup-mailgw</span> <span class="pre">&lt;tracker_home&gt;</span></tt>&quot;
(substitute <tt class="docutils literal"><span class="pre">/usr/bin</span></tt> for wherever roundup-mailgw is installed).</p>
<p>In some installations (e.g. RedHat 6.2 I think) you'll need to set up smrsh so
sendmail will accept the pipe command. In that case, symlink
<tt class="docutils literal"><span class="pre">/etc/smrsh/roundup-mailgw</span></tt> to &quot;<tt class="docutils literal"><span class="pre">/usr/bin/roundup-mailgw</span></tt>&quot; and change
the command to:</p>
<pre class="literal-block">
|roundup-mailgw /opt/roundup/trackers/support
</pre>
<p>To test the mail gateway on unix systems, try:</p>
<pre class="literal-block">
echo test |mail -s '[issue] test' support&#64;YOUR_DOMAIN_HERE
</pre>
</div>
<div class="section">
<h3><a id="as-a-custom-router-transport-using-a-pipe-process-exim4-specific" name="as-a-custom-router-transport-using-a-pipe-process-exim4-specific">As a custom router/transport using a pipe process (Exim4 specific)</a></h3>
<p>The following configuration snippets for <a class="reference" href="http://www.exim.org/">Exim 4</a> configuration
implement a custom router &amp; transport to accomplish mail delivery to
roundup-mailgw. A configuration for Exim3 is similar but not
included, since Exim3 is considered obsolete.</p>
<p>This configuration is similar to the previous section, in that it uses
a pipe process. However, there are advantages to using a custom
router/transport process, if you are using Exim.</p>
<ul class="simple">
<li>This avoids privilege escalation, since otherwise the pipe process
will run as the mail user, typically mail. The transport can be
configured to run as the user appropriate for the task at hand. In the
transport described in this section, Exim4 runs as the unprivileged
user <tt class="docutils literal"><span class="pre">roundup</span></tt>.</li>
<li>Separate configuration is not required for each tracker
instance. When a email arrives at the server, Exim passes it through
the defined routers. The roundup_router looks for a match with one of
the roundup directories, and if there is one it is passed to the
roundup_transport, which uses the pipe process described in the
previous section (<a class="reference" href="#as-a-mail-alias-pipe-process">As a mail alias pipe process</a>).</li>
</ul>
<p>The matching is done in the line:</p>
<pre class="literal-block">
require_files = /usr/bin/roundup-mailgw:ROUNDUP_HOME/$local_part/schema.py
</pre>
<p>The following configuration has been tested on Debian Sarge with
Exim4.</p>
<div class="note">
<p class="first admonition-title">Note</p>
<p>Note that the Debian Exim4 packages don't allow pipes in alias files
by default, so the method described in the section <a class="reference" href="#as-a-mail-alias-pipe-process">As a mail alias
pipe process</a> will not work with the default configuration. However,
the method described in this section does. See the discussion in
<tt class="docutils literal"><span class="pre">/usr/share/doc/exim4-config/README.system_aliases</span></tt> on any Debian
system with Exim4 installed.</p>
<p class="last">For more Debian-specific information, see suggested addition to
README.Debian in
<a class="reference" href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=343283">http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=343283</a>, which will
hopefully be merged into the Debian package eventually.</p>
</div>
<p>This config makes a few assumptions:</p>
<ul class="simple">
<li>That the mail address corresponding to the tracker instance has the
same name as the directory of the tracker instance, i.e. the mail
interface address corresponding to a Roundup instance called
<tt class="docutils literal"><span class="pre">/var/lib/roundup/trackers/mytracker</span></tt> is <tt class="docutils literal"><span class="pre">mytracker&#64;your.host</span></tt>.</li>
<li>That (at least) all the db subdirectories of all the tracker
instances (ie. <tt class="docutils literal"><span class="pre">/var/lib/roundup/trackers/*/db</span></tt>) are owned by the same
user, in this case, 'roundup'.</li>
<li>That if the <tt class="docutils literal"><span class="pre">schema.py</span></tt> file exists, then the tracker is ready for
use. Another option is to use the <tt class="docutils literal"><span class="pre">config.ini</span></tt> file, but this recently
changed (in 0.8) from <tt class="docutils literal"><span class="pre">config.py</span></tt>.</li>
</ul>
<p>Macros for Roundup router/transport. Should be placed in the macros
section of the Exim4 config:</p>
<pre class="literal-block">
# Home dir for your Roundup installation
ROUNDUP_HOME=/var/lib/roundup/trackers

# User and group for Roundup.
ROUNDUP_USER=roundup
ROUNDUP_GROUP=roundup
</pre>
<p>Custom router for Roundup. This will (probably) work if placed at the
beginning of the router section of the Exim4 config:</p>
<pre class="literal-block">
roundup_router:
    driver = accept
    # The config file config.ini seems like a more natural choice, but the
    # file config.py was replaced by config.ini in 0.8, and schema.py needs
    # to be present too.
    require_files = /usr/bin/roundup-mailgw:ROUNDUP_HOME/$local_part/schema.py
    transport = roundup_transport
</pre>
<p>Custom transport for Roundup. This will (probably) work if placed at
the beginning of the router section of the Exim4 config:</p>
<pre class="literal-block">
roundup_transport:
    driver = pipe
    command = /usr/bin/python /usr/bin/roundup-mailgw ROUNDUP_HOME/$local_part/
    current_directory = ROUNDUP_HOME
    home_directory = ROUNDUP_HOME
    user = ROUNDUP_USER
    group = ROUNDUP_GROUP
</pre>
</div>
<div class="section">
<h3><a id="as-a-regular-job-using-a-mailbox-source" name="as-a-regular-job-using-a-mailbox-source">As a regular job using a mailbox source</a></h3>
<p>Set <tt class="docutils literal"><span class="pre">roundup-mailgw</span></tt> up to run every 10 minutes or so. For example
(substitute <tt class="docutils literal"><span class="pre">/usr/bin</span></tt> for wherever roundup-mailgw is installed):</p>
<pre class="literal-block">
0,10,20,30,40,50 * * * * /usr/bin/roundup-mailgw /opt/roundup/trackers/support mailbox &lt;mail_spool_file&gt;
</pre>
<p>Where the <tt class="docutils literal"><span class="pre">mail_spool_file</span></tt> argument is the location of the roundup submission
user's mail spool. On most systems, the spool for a user &quot;issue_tracker&quot;
will be &quot;<tt class="docutils literal"><span class="pre">/var/mail/issue_tracker</span></tt>&quot;.</p>
</div>
<div class="section">
<h3><a id="as-a-regular-job-using-a-pop-source" name="as-a-regular-job-using-a-pop-source">As a regular job using a POP source</a></h3>
<p>To retrieve from a POP mailbox, use a <em>cron</em> entry similar to the mailbox
one (substitute <tt class="docutils literal"><span class="pre">/usr/bin</span></tt> for wherever roundup-mailgw is
installed):</p>
<pre class="literal-block">
0,10,20,30,40,50 * * * * /usr/bin/roundup-mailgw /opt/roundup/trackers/support pop &lt;pop_spec&gt;
</pre>
<p>where pop_spec is &quot;<tt class="docutils literal"><span class="pre">username:password&#64;server</span></tt>&quot; that specifies the roundup
submission user's POP account name, password and server.</p>
<p>On windows, you would set up the command using the windows scheduler.</p>
</div>
<div class="section">
<h3><a id="as-a-regular-job-using-an-imap-source" name="as-a-regular-job-using-an-imap-source">As a regular job using an IMAP source</a></h3>
<p>To retrieve from an IMAP mailbox, use a <em>cron</em> entry similar to the
POP one (substitute <tt class="docutils literal"><span class="pre">/usr/bin</span></tt> for wherever roundup-mailgw is
installed):</p>
<pre class="literal-block">
0,10,20,30,40,50 * * * * /usr/bin/roundup-mailgw /opt/roundup/trackers/support imap &lt;imap_spec&gt;
</pre>
<p>where imap_spec is &quot;<tt class="docutils literal"><span class="pre">username:password&#64;server</span></tt>&quot; that specifies the roundup
submission user's IMAP account name, password and server. You may
optionally include a mailbox to use other than the default <tt class="docutils literal"><span class="pre">INBOX</span></tt> with
&quot;<tt class="docutils literal"><span class="pre">imap</span> <span class="pre">username:password&#64;server</span> <span class="pre">mailbox</span></tt>&quot;.</p>
<p>If you have a secure (ie. HTTPS) IMAP server then you may use <tt class="docutils literal"><span class="pre">imaps</span></tt>
in place of <tt class="docutils literal"><span class="pre">imap</span></tt> in the command to use a secure connection.</p>
<p>As with the POP job, on windows, you would set up the command using the
windows scheduler.</p>
</div>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id15" id="unix-environment-steps" name="unix-environment-steps">UNIX Environment Steps</a></h2>
<p>Each tracker ideally should have its own UNIX group, so create
a UNIX group (edit <tt class="docutils literal"><span class="pre">/etc/group</span></tt> or your appropriate NIS map if
you're using NIS).  To continue with my examples so far, I would
create the UNIX group 'support', although the name of the UNIX
group does not have to be the same as the tracker name.  To this
'support' group I then add all of the UNIX usernames who will be
working with this Roundup tracker.  In addition to 'real' users,
the Roundup email gateway will need to have permissions to this
area as well, so add the user your mail service runs as to the
group (typically &quot;mail&quot; or &quot;daemon&quot;).  The UNIX group might then
look like:</p>
<pre class="literal-block">
support:*:1002:jblaine,samh,geezer,mail
</pre>
<p>If you intend to use the web interface (as most people do), you
should also add the username your web server runs as to the group.
My group now looks like this:</p>
<pre class="literal-block">
support:*:1002:jblaine,samh,geezer,mail,apache
</pre>
<p>The tracker &quot;db&quot; directory should be chmod'ed g+sw so that the group can
write to the database, and any new files created in the database will be owned
by the group.</p>
<p>If you're using the mysql or postgresql backend then you'll need to ensure
that the tracker user has appropriate permissions to create/modify the
database. If you're using roundup.cgi, the apache user needs permissions
to modify the database.  Alternatively, explicitly specify a database login
in <tt class="docutils literal"><span class="pre">rdbms</span></tt> -&gt; <tt class="docutils literal"><span class="pre">user</span></tt> and <tt class="docutils literal"><span class="pre">password</span></tt> in <tt class="docutils literal"><span class="pre">config.ini</span></tt>.</p>
<p>An alternative to the above is to create a new user who has the sole
responsibility of running roundup. This user:</p>
<ol class="arabic simple">
<li>runs the CGI interface daemon</li>
<li>runs regular polls for email</li>
<li>runs regular checks (using cron) to ensure the daemon is up</li>
<li>optionally has no login password so that nobody but the &quot;root&quot; user
may actually login and play with the roundup setup.</li>
</ol>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id16" id="additional-language-codecs" name="additional-language-codecs">Additional Language Codecs</a></h2>
<p>If you intend to send messages to Roundup that use Chinese, Japanese or
Korean encodings the you'll need to obtain CJKCodecs from
<a class="reference" href="http://cjkpython.berlios.de/">http://cjkpython.berlios.de/</a></p>
</div>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id17" id="maintenance" name="maintenance">Maintenance</a></h1>
<p>Read the separate <a class="reference" href="admin_guide.html">administration guide</a> for information about how to
perform common maintenance tasks with Roundup.</p>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id18" id="upgrading" name="upgrading">Upgrading</a></h1>
<p>Read the separate <a class="reference" href="upgrading.html">upgrading document</a>, which describes the steps needed to
upgrade existing tracker trackers for each version of Roundup that is
released.</p>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id19" id="further-reading" name="further-reading">Further Reading</a></h1>
<p>If you intend to use Roundup with anything other than the default
templates, if you would like to hack on Roundup, or if you would
like implementation details, you should read <a class="reference" href="customizing.html">Customising Roundup</a>.</p>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id20" id="running-multiple-trackers" name="running-multiple-trackers">Running Multiple Trackers</a></h1>
<p>Things to think about before you jump off the deep end and install
multiple trackers, which involve additional URLs, user databases, email
addresses, databases to back up, etc.</p>
<ol class="arabic simple">
<li>Do you want a tracker per product you sell/support? You can just add
a new property to your issues called Product, and filter by that. See
the customisation example <a class="reference" href="customizing.html#adding-a-new-field-to-the-classic-schema">adding a new field to the classic schema</a>.</li>
<li>Do you want to track internal software development issues and customer
support issues separately? You can just set up an additional &quot;issue&quot;
class called &quot;cust_issues&quot; in the same tracker, mimicing the normal
&quot;issue&quot; class, but with different properties. See the customisation
example <a class="reference" href="customizing.html#tracking-different-types-of-issues">tracking different types of issues</a>.</li>
</ol>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id21" id="platform-specific-notes" name="platform-specific-notes">Platform-Specific Notes</a></h1>
<div class="section">
<h2><a class="toc-backref" href="#id22" id="windows-command-line-tools" name="windows-command-line-tools">Windows command-line tools</a></h2>
<p>To make the command-line tools accessible in Windows, you need to update
the &quot;Path&quot; environment variable in the Registry via a dialog box.</p>
<p>On Windows 2000 and later:</p>
<ol class="arabic simple">
<li>Press the &quot;Start&quot; button.</li>
<li>Choose &quot;Settings&quot;</li>
<li>Choose &quot;Control Panel&quot;</li>
<li>Choose &quot;System&quot;</li>
<li>Choose &quot;Advanced&quot;</li>
<li>Choose &quot;Environmental Variables&quot;</li>
<li>Add: &quot;&lt;dir&gt;Scripts&quot; to the &quot;Path&quot; environmental variable.</li>
</ol>
<p>Where &lt;dir&gt; in 7) is the root directory (e.g., <tt class="docutils literal"><span class="pre">C:\Python22\Scripts</span></tt>)
of your Python installation.</p>
<p>I understand that in XP, 2) above is not needed as &quot;Control
Panel&quot; is directly accessible from &quot;Start&quot;.</p>
<p>I do not believe this is possible to do in previous versions of Windows.</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id23" id="windows-server" name="windows-server">Windows Server</a></h2>
<p>To have the Roundup web server start up when your machine boots up, set the
following up in Scheduled Tasks (note, the following is for a cygwin setup):</p>
<dl class="docutils">
<dt>Run</dt>
<dd><tt class="docutils literal"><span class="pre">c:\cygwin\bin\bash.exe</span> <span class="pre">-c</span> <span class="pre">&quot;roundup-server</span> <span class="pre">TheProject=/opt/roundup/trackers/support&quot;</span></tt></dd>
<dt>Start In</dt>
<dd><tt class="docutils literal"><span class="pre">C:\cygwin\opt\roundup\bin</span></tt></dd>
<dt>Schedule</dt>
<dd>At System Startup</dd>
</dl>
<p>To have the Roundup mail gateway run periodically to poll a POP email address,
set the following up in Scheduled Tasks:</p>
<dl class="docutils">
<dt>Run</dt>
<dd><tt class="docutils literal"><span class="pre">c:\cygwin\bin\bash.exe</span> <span class="pre">-c</span> <span class="pre">&quot;roundup-mailgw</span> <span class="pre">/opt/roundup/trackers/support</span> <span class="pre">pop</span> <span class="pre">roundup:roundup&#64;mail-server&quot;</span></tt></dd>
<dt>Start In</dt>
<dd><tt class="docutils literal"><span class="pre">C:\cygwin\opt\roundup\bin</span></tt></dd>
<dt>Schedule</dt>
<dd>Every 10 minutes from 5:00AM for 24 hours every day
Stop the task if it runs for 8 minutes</dd>
</dl>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id24" id="sendmail-smrsh" name="sendmail-smrsh">Sendmail smrsh</a></h2>
<p>If you use Sendmail's <tt class="docutils literal"><span class="pre">smrsh</span></tt> mechanism, you will need to tell
smrsh that roundup-mailgw is a valid/trusted mail handler
before it will work.</p>
<p>This is usually done via the following 2 steps:</p>
<ol class="arabic simple">
<li>make a symlink in <tt class="docutils literal"><span class="pre">/etc/smrsh</span></tt> called <tt class="docutils literal"><span class="pre">roundup-mailgw</span></tt>
which points to the full path of your actual <tt class="docutils literal"><span class="pre">roundup-mailgw</span></tt>
script.</li>
<li>change your alias to <tt class="docutils literal"><span class="pre">&quot;|roundup-mailgw</span> <span class="pre">&lt;tracker_home&gt;&quot;</span></tt></li>
</ol>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id25" id="linux" name="linux">Linux</a></h2>
<p>Make sure you read the instructions under <a class="reference" href="#unix-environment-steps">UNIX environment steps</a>.</p>
</div>
<div class="section">
<h2><a class="toc-backref" href="#id26" id="solaris" name="solaris">Solaris</a></h2>
<p>You'll need to build Python.</p>
<p>Make sure you read the instructions under <a class="reference" href="#unix-environment-steps">UNIX environment steps</a>.</p>
</div>
</div>
<div class="section">
<h1><a class="toc-backref" href="#id27" id="problems-testing-your-python" name="problems-testing-your-python">Problems? Testing your Python...</a></h1>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last">The <tt class="docutils literal"><span class="pre">run_tests.py</span></tt> script is packaged in Roundup's source distribution
- users of the Windows installer, other binary distributions or
pre-installed Roundup will need to download the source to use it.</p>
</div>
<p>Once you've unpacked roundup's source, run <tt class="docutils literal"><span class="pre">python</span> <span class="pre">run_tests.py</span></tt> in the
source directory and make sure there are no errors. If there are errors,
please let us know!</p>
<p>If the above fails, you may be using the wrong version of python. Try
<tt class="docutils literal"><span class="pre">python2</span> <span class="pre">run_tests.py</span></tt>. If that works, you will need to substitute
<tt class="docutils literal"><span class="pre">python2</span></tt> for <tt class="docutils literal"><span class="pre">python</span></tt> in all further commands you use in relation to
Roundup -- from installation and scripts.</p>
<hr class="docutils" />
<p>Back to <a class="reference" href="index.html">Table of Contents</a></p>
<p>Next: <a class="reference" href="user_guide.html">User Guide</a></p>
</div>
</div>
<div class="footer">
<hr class="footer" />
Generated on: 2006-10-04.

</div>
</body>
</html>