]> git.ozlabs.org Git - patchwork/blob - docs/INSTALL
Add XML-RPC interface and command line client
[patchwork] / docs / INSTALL
1 Deploying Patchwork
2
3 Patchwork uses the django framework - there is some background on deploying
4 django applications here:
5
6  http://www.djangobook.com/en/1.0/chapter20/
7
8 You'll need the following (applications used for patchwork development are
9 in brackets):
10
11   * A python interpreter
12   * djano
13   * A webserver (apache)
14   * mod_python or flup
15   * A database server (postgresql)
16
17 1. Database setup
18
19     At present, I've tested with PostgreSQL and (to a lesser extent) MySQL
20     database servers. If you have any (positive or negative) experiences with
21     either, email me.
22
23     For the following commands, a $ prefix signifies that the command should be
24     entered at your shell prompt, and a > prefix signifies the commant-line
25     client for your sql server (psql or mysql)
26
27     Create a database for the system, add accounts for two system users: the
28     web user (the user that your web server runs as) and the mail user (the
29     user that your mail server runs as). On Ubuntu these are
30     www-data and nobody, respectively.
31
32       PostgreSQL:
33         createdb patchwork
34         createuser www-data
35         createuser nobody
36
37       MySQL:
38         $ mysql
39         > CREATE DATABASE 'patchwork';
40         > INSERT INTO user (Host, User) VALUES ('localhost', 'www-data');
41         > INSERT INTO user (Host, User) VALUES ('localhost', 'nobody');
42
43 2. Django setup
44
45         At the time of initial release, patchwork depends on a svn version of
46         django. I've been using svn commit 7854 - but anything after this
47         point should be fine. If your distribution provides a sufficiently
48         recent version of django, you can use that; if not, do a:
49
50          cd lib/packages
51          svn checkout http://code.djangoproject.com/svn/django/trunk django
52          cd ../python
53          ln -s ../packages/django/django ./django
54
55         We also use the django-registration infrastructure from
56         http://code.google.com/p/django-registration/
57
58          cd lib/packages/
59          svn checkout \
60              http://django-registration.googlecode.com/svn/trunk/registration/ \
61              django-registration
62          cd ../../apps
63          ln -s ../lib/packages/django-registration ./registration
64
65         (OPTIONAL) If you want to enable the Patchwork XML-RPC interface,
66         which is required for pwclient to work, you'll need to set up the
67         django_xmlrpc package:
68
69          cd lib/packages/
70          wget \
71              http://django-xmlrpc.googlecode.com/files/django_xmlrpc-0.1.tar.gz
72          tar -zxf django_xmlrpc-0.1.tar.gz
73          cd ../../apps
74          ln -s ../lib/packages/django_xmlrpc ./django_xmlrpc
75
76         The settings.py file contains default settings for patchwork, you'll
77         need to configure settings for your own setup.
78
79         Rather than edit settings.py, create a file 'local_settings.py', and
80         override or add settings as necessary. You'll need to define the
81         following:
82
83           SECRET_KEY
84           ADMINS
85           TIME_ZONE
86           LANGUAGE_CODE
87
88         You can generate the SECRET_KEY with the following python code:
89
90           import string, random
91           chars = string.letters + string.digits + string.punctuation
92           print repr("".join([random.choice(chars) for i in range(0,50)]))
93
94         If you have patchwork installed in somewhere other than /srv/patchwork,
95         you'll also need to define:
96
97           MEDIA_ROOT
98           TEMPLATE_DIRS
99
100         If you wish to enable the XML-RPC interface, add the following to
101         your local_settings.py file:
102
103           ENABLE_XMLRPC = True
104
105         Then, get patchwork to create its tables in your configured database:
106
107          cd apps/
108          PYTHONPATH=../lib/python ./manage.py syncdb
109
110         And add privileges for your mail and web users:
111
112         Postgresql:
113           psql -f lib/sql/grant-all.sql patchwork
114
115
116
117 3. Apache setup
118
119 Example apache configuration files are in lib/apache/.
120
121 mod_python:
122
123         This should be the simpler of the two to set up. An example apache
124         configuration file is in:
125
126           lib/apache/patchwork.mod_python.conf
127
128         However, mod_python and mod_php may not work well together. So, if your
129         web server is used for serving php files, the fastcgi method may suit
130         instead.
131
132 fastcgi:
133
134         django has built-in support for fastcgi, which requires the
135         'flup' python module. An example configuration is in:
136
137           lib/apache/patchwork.fastcgi.conf
138
139         - this also requires the mod_rewrite apache module to be loaded.
140
141         Once you have apache set up, you can start the fastcgi server with:
142
143           cd /srv/patchwork/apps
144           ./manage.py runfcgi method=prefork \
145                               socket=/srv/patchwork/var/fcgi.sock \
146                               pidfile=/srv/patchwork/var/fcgi.pid
147
148 4. Configure patchwork
149     Now, you should be able to administer patchwork, by visiting the
150     URL:
151
152       http://your-host/admin/
153
154     You'll probably want to do the following:
155
156       * Set up your projects
157       * Configure your website address (in the Sites) section of the admin
158
159 5. Subscribe a local address to the mailing list
160
161      You will need an email address for patchwork to receive email on - for
162      example - patchwork@, and this address will need to be subscribed to the
163      list. Depending on the mailing list, you will probably need to confirm the
164      subscription - temporarily direct the alias to yourself to do this.
165
166 6. Setup your MTA to deliver mail to the parsemail script
167
168     Your MTA will need to deliver mail to the parsemail script in the email/
169     directory. (Note, do not use the parsemail.py script directly). Something
170     like this in /etc/aliases is suitable for postfix:
171
172       patchwork: "|/srv/patchwork/apps/patchwork/bin/parsemail.sh"
173
174     You may need to customise the parsemail.sh script if you haven't installed
175     patchwork in /srv/patchwork.
176
177     Test that you can deliver a patch to this script:
178
179      sudo -u nobody /srv/patchwork/apps/patchwork/bin/parsemail.sh < mail
180
181
182 Some errors:
183
184 * __init__() got an unexpected keyword argument 'max_length'
185
186  - you're running an old version of django. If your distribution doesn't
187    provide a newer version, just download and extract django into
188    lib/python/django
189
190 * ERROR: permission denied for relation patchwork_...
191
192  - the user that patchwork is running as (ie, the user of the web-server)
193    doesn't have access to the patchwork tables in the database. Check that
194    your web-server user exists in the database, and that it has permissions
195    to the tables.