* A database server (postgresql, mysql)
* relevant python modules for the database server (e.g: python-mysqldb)
+
1. Database setup
At present, I've tested with PostgreSQL and (to a lesser extent) MySQL
it, tests checking for the correct handling of non-ASCII characters
fail.
+
2. Django setup
- Set up some initial directories in the patchwork base directory:
+ Set up some initial directories in the patchwork base directory:
+
+ mkdir -p lib/packages lib/python
+
+ lib/packages is for stuff we'll download; lib/python is to add
+ to our python path. We'll symlink python modules into lib/python.
+
+ At the time of release, patchwork depends on django version 1.5 or
+ later. Your distro probably provides this. If not, do a:
+
+ cd lib/packages
+ git clone https://github.com/django/django.git -b stable/1.5.x
+ cd ../python
+ ln -s ../packages/django/django ./django
+
+ The patchwork/settings/*.py files contain default settings for patchwork,
+ you'll need to configure settings for your own setup.
+
+ Rather than editing these files (which will cause conflicts when you
+ update the base patchwork code), create a file 'production.py', based on
+ the example:
- mkdir -p lib/packages lib/python
+ cp patchwork/settings/production.example.py \
+ patchwork/settings/production.py
- lib/packages is for stuff we'll download; lib/python is to add
- to our python path. We'll symlink python modules into lib/python.
+ and override or add settings as necessary. You'll need to define the
+ following:
- At the time of release, patchwork depends on django version 1.5 or
- later. Your distro probably provides this. If not, do a:
+ SECRET_KEY
+ ADMINS
+ DATABASES
+ TIME_ZONE
+ LANGUAGE_CODE
+ DEFAULT_FROM_EMAIL
+ NOTIFICATION_FROM_EMAIL
- cd lib/packages
- git clone https://github.com/django/django.git -b stable/1.5.x
- cd ../python
- ln -s ../packages/django/django ./django
+ You can generate the SECRET_KEY with the following python code:
- The settings.py file contains default settings for patchwork, you'll
- need to configure settings for your own setup.
+ import string, random
+ chars = string.letters + string.digits + string.punctuation
+ print repr("".join([random.choice(chars) for i in range(0,50)]))
- Rather than edit settings.py, create a file 'local_settings.py', and
- override or add settings as necessary. You'll need to define the
- following:
+ If you wish to enable the XML-RPC interface, add the following to
+ your local_settings.py file:
- SECRET_KEY
- ADMINS
- TIME_ZONE
- LANGUAGE_CODE
- DEFAULT_FROM_EMAIL
- NOTIFICATION_FROM_EMAIL
+ ENABLE_XMLRPC = True
- You can generate the SECRET_KEY with the following python code:
+ Then, get patchwork to create its tables in your configured database:
- import string, random
- chars = string.letters + string.digits + string.punctuation
- print repr("".join([random.choice(chars) for i in range(0,50)]))
+ PYTHONPATH=lib/python ./manage.py syncdb
- If you wish to enable the XML-RPC interface, add the following to
- your local_settings.py file:
+ and initialise the static content:
- ENABLE_XMLRPC = True
+ PYTHONPATH=lib/python ./manage.py collectstatic
- Then, get patchwork to create its tables in your configured database:
+ You'll also need to load the initial tags and states into the
+ patchwork database:
- cd apps/
- PYTHONPATH=../lib/python ./manage.py syncdb
+ PYTHONPATH=lib/python ./manage.py loaddata default_tags default_states
- And add privileges for your mail and web users. This is only needed if
- you use the ident-based approach. If you use password-based database
- authentication, you can skip this step.
+ Finally, add privileges for your mail and web users. This is only needed if
+ you use the ident-based approach. If you use password-based database
+ authentication, you can skip this step.
- Postgresql:
- psql -f lib/sql/grant-all.postgres.sql patchwork
+ Postgresql:
+ psql -f lib/sql/grant-all.postgres.sql patchwork
- MySQL:
- mysql patchwork < lib/sql/grant-all.mysql.sql
+ MySQL:
+ mysql patchwork < lib/sql/grant-all.mysql.sql
3. Apache setup
-Example apache configuration files are in lib/apache2/.
+ Example apache configuration files are in lib/apache2/.
+
+ wsgi:
-wsgi:
django has built-in support for WSGI, which supersedes the fastcgi
handler. It is thus the preferred method to run patchwork.
a2enmod wsgi
apache2ctl restart
-mod_python:
+
+ mod_python:
An example apache configuration file for mod_python is in:
web server is used for serving php files, the fastcgi method may suit
instead.
-fastcgi:
+
+ fastcgi:
django has built-in support for fastcgi, which requires the
'flup' python module. An example configuration is in:
Once you have apache set up, you can start the fastcgi server with:
- cd /srv/patchwork/apps
+ cd /srv/patchwork/
./manage.py runfcgi method=prefork \
socket=/srv/patchwork/var/fcgi.sock \
pidfile=/srv/patchwork/var/fcgi.pid
+
4. Configure patchwork
Now, you should be able to administer patchwork, by visiting the
URL:
* Set up your projects
* Configure your website address (in the Sites) section
+
5. Subscribe a local address to the mailing list
- You will need an email address for patchwork to receive email on - for
- example - patchwork@, and this address will need to be subscribed to the
- list. Depending on the mailing list, you will probably need to confirm the
- subscription - temporarily direct the alias to yourself to do this.
+ You will need an email address for patchwork to receive email on - for
+ example - patchwork@, and this address will need to be subscribed to the
+ list. Depending on the mailing list, you will probably need to confirm the
+ subscription - temporarily direct the alias to yourself to do this.
+
6. Setup your MTA to deliver mail to the parsemail script
directory. (Note, do not use the parsemail.py script directly). Something
like this in /etc/aliases is suitable for postfix:
- patchwork: "|/srv/patchwork/apps/patchwork/bin/parsemail.sh"
+ patchwork: "|/srv/patchwork/patchwork/bin/parsemail.sh"
You may need to customise the parsemail.sh script if you haven't installed
patchwork in /srv/patchwork.
Test that you can deliver a patch to this script:
- sudo -u nobody /srv/patchwork/apps/patchwork/bin/parsemail.sh < mail
+ sudo -u nobody /srv/patchwork/patchwork/bin/parsemail.sh < mail
+
7. Set up the patchwork cron script
Something like this in your crontab should work:
# m h dom mon dow command
- PYTHONPATH=apps:.
- DJANGO_SETTINGS_MODULE=settings
- */10 * * * * cd patchwork; python apps/patchwork/bin/patchwork-cron.py
+ */10 * * * * cd patchwork; ./manage.py cron
- the frequency should be the same as the NOTIFICATION_DELAY_MINUTES
setting, which defaults to 10 minutes.
+
8. Optional: Configure your VCS to automatically update patches
The tools directory of the patchwork distribution contains a file
similar hook using pwclient to update patch state. If you do write
one, please contribute it.
+
Some errors:
* __init__() got an unexpected keyword argument 'max_length'