]> git.ozlabs.org Git - patchwork/blob - docs/INSTALL
[docs] Create python and packages directories
[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     For PostgreSQL
33
34         $ createdb patchwork
35         $ createuser www-data
36         $ createuser nobody
37
38         - postgres uses the standard UNIX authentication, so these users
39           will only be accessible for processes running as the same username.
40           This means that no passwords need to be set.
41
42      For MySQL:
43         $ mysql
44         > CREATE DATABASE 'patchwork';
45         > CREATE USER 'www-data'@'localhost' IDENTIFIED BY '<password>';
46         > CREATE USER 'nobody'@'localhost' IDENTIFIED BY '<password>';
47
48 2. Django setup
49
50         Set up some initial directories in the patchwork base directory:
51
52          mkdir -p lib/packages lib/python
53
54         At the time of initial release, patchwork depends on a svn version of
55         django. I've been using svn commit 7854 - but anything after this
56         point should be fine. If your distribution provides a sufficiently
57         recent version of django, you can use that; if not, do a:
58
59          cd lib/packages
60          svn checkout http://code.djangoproject.com/svn/django/trunk django
61          cd ../python
62          ln -s ../packages/django/django ./django
63
64         We also use the django-registration infrastructure from
65         http://code.google.com/p/django-registration/
66
67          cd lib/packages/
68          svn checkout \
69              http://django-registration.googlecode.com/svn/trunk/registration/ \
70              django-registration
71          cd ../../apps
72          ln -s ../lib/packages/django-registration ./registration
73
74         The settings.py file contains default settings for patchwork, you'll
75         need to configure settings for your own setup.
76
77         Rather than edit settings.py, create a file 'local_settings.py', and
78         override or add settings as necessary. You'll need to define the
79         following:
80
81           SECRET_KEY
82           ADMINS
83           TIME_ZONE
84           LANGUAGE_CODE
85
86         You can generate the SECRET_KEY with the following python code:
87
88           import string, random
89           chars = string.letters + string.digits + string.punctuation
90           print repr("".join([random.choice(chars) for i in range(0,50)]))
91
92         If you have patchwork installed in somewhere other than /srv/patchwork,
93         you'll also need to define:
94
95           MEDIA_ROOT
96           TEMPLATE_DIRS
97
98         If you wish to enable the XML-RPC interface, add the following to
99         your local_settings.py file:
100
101           ENABLE_XMLRPC = True
102
103         Then, get patchwork to create its tables in your configured database:
104
105          cd apps/
106          PYTHONPATH=../lib/python ./manage.py syncdb
107
108         And add privileges for your mail and web users:
109
110         Postgresql:
111           psql -f lib/sql/grant-all.postgres.sql patchwork
112
113         MySQL:
114           mysql patchwork < lib/sql/grant-all.mysql.sql
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.