Project

General

Profile

MAUSDjangoApache » History » Version 28

Jackson, Mike, 07 March 2012 12:36

1 18 Jackson, Mike
h1. Deploying the MAUS web-front end
2 1 Jackson, Mike
3
{{>toc}}
4
5 22 Jackson, Mike
This page describes how to install and run the MAUS web front-end. 
6 21 Jackson, Mike
7
* The web front-end can either be run in the Django lightweight web server or under Apache 2.0. The latter is recommended for production environments.
8 22 Jackson, Mike
* The MAUS software is *not* required to use the MAUS web front-end. However, if you do not have MAUS then you will need to install Python 2.7 and related packages.
9 21 Jackson, Mike
10 22 Jackson, Mike
h2. Install Python 2.7 and related packages
11 16 Jackson, Mike
12 22 Jackson, Mike
If you have downloaded and built the MAUS software (which comes with Python 2.7 and Python setuptools) then *go down to Install ImageMagick*.
13 14 Jackson, Mike
14 22 Jackson, Mike
To install Python (2.7.2) by building it from its source code:
15 14 Jackson, Mike
16 22 Jackson, Mike
* Log in as a super-user by using @sudo su -@ or @su@.
17
* Get the Python 2.7 source distribution and unpack it,
18 14 Jackson, Mike
<pre>
19
$ wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
20
$ mv Python-2.7.2.tgz Python-2.7.2.tar.gz
21
$ gunzip Python-2.7.2.tar.gz 
22
$ tar -xf Python-2.7.2.tar 
23
$ cd Python-2.7.2
24
</pre>
25
* Configure,
26
<pre>
27 1 Jackson, Mike
$ ./configure
28 14 Jackson, Mike
</pre>
29 1 Jackson, Mike
* Build,
30 14 Jackson, Mike
<pre>
31 1 Jackson, Mike
$ make
32
</pre>
33 14 Jackson, Mike
* Install,
34
<pre>
35
$ make install
36
</pre>
37 15 Jackson, Mike
38 22 Jackson, Mike
For more information, see http://www.python.org/getit/releases/2.7//
39 1 Jackson, Mike
40 22 Jackson, Mike
h3. Install Python setuptools
41 14 Jackson, Mike
42 22 Jackson, Mike
Python setuptools (http://pypi.python.org/pypi/setuptools) is a suite of useful Python configuration tools. Foremost amongst these is @easy_install@ which supports straightforward installation of Python packages.
43
44
To install Python setuptools (0.6c11) for Python 2.7:
45
46
* Log in as a super-user by using @sudo su -@ or @su@.
47 14 Jackson, Mike
* Get the setuptools egg,
48
<pre>
49 1 Jackson, Mike
$ wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea
50
</pre>
51
* Execute the egg,
52 14 Jackson, Mike
<pre>
53 1 Jackson, Mike
$ sh setuptools-0.6c11-py2.7.egg 
54
</pre>
55
56 22 Jackson, Mike
h2. Install ImageMagick
57 1 Jackson, Mike
58 22 Jackson, Mike
The ImageMagick library (http://www.imagemagick.org/script/index.php) is used to convert between image types. 
59 16 Jackson, Mike
60 22 Jackson, Mike
Check to see if you already have this, as it is a commonly installed tool,
61 16 Jackson, Mike
<pre>
62
$ /usr/local/bin/convert -h
63
Version: ImageMagick 6.7.4-0 2011-12-13 Q16 http://www.imagemagick.org
64
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
65
Features: OpenMP    
66
</pre>
67
68 22 Jackson, Mike
If so then *go down to Install Django, MagickWand and Python Image Library packages*.
69 14 Jackson, Mike
70 22 Jackson, Mike
To install ImageMagick (6.7.4),
71
72
* Log in as a super-user by using @sudo su -@ or @su@.
73 14 Jackson, Mike
* Get and unpack ImageMagick,
74
<pre>
75
$ wget http://www.imagemagick.org/download/ImageMagick.tar.gz
76
$ gunzip ImageMagick.tar.gz
77
$ tar -xf ImageMagick.tar
78
$ cd ImageMagick-6.7.4-0/
79
</pre>
80
* Configure,
81
<pre>
82
$ ./configure
83
</pre>
84 1 Jackson, Mike
* Make,
85
<pre>
86
$ make
87
</pre>
88
* Install,
89
<pre>
90 14 Jackson, Mike
$ make install
91
</pre>
92
** This places libraries in @/usr/local/lib@.
93
* Cache the libraries,
94
<pre>
95 28 Jackson, Mike
$ /sbin/ldconfig /usr/local/lib
96 1 Jackson, Mike
</pre>
97
** This avoids problems with libraries not being found by Python's magickwand library.
98 14 Jackson, Mike
* Check,
99
<pre>
100
$ /usr/local/bin/convert -h
101
Version: ImageMagick 6.7.4-0 2011-12-13 Q16 http://www.imagemagick.org
102
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
103 1 Jackson, Mike
Features: OpenMP    
104
</pre>
105
106 22 Jackson, Mike
h2. Install Django, MagickWand and Python Image Library packages
107 1 Jackson, Mike
108 22 Jackson, Mike
* Django (https://www.djangoproject.com/) is a Python package for developing web applications.
109
* MagickWand (http://pypi.python.org/pypi/magickwand) is a Python package allowing ImageMagick to be used from within Python.
110
* Python Image Library (http://www.pythonware.com/products/pil/) is a package of image manipulation utilities.
111 16 Jackson, Mike
112 22 Jackson, Mike
To install the current versions of these Python packages using @easy_install@:
113
114
* If you have installed Python 2.7 as a super-user (and are not using the version bundled with MAUS) then, log in as a super-user by using @sudo su -@ or @su@.
115 14 Jackson, Mike
* Run,
116 1 Jackson, Mike
<pre>
117
$ easy_install django
118
$ easy_install magickwand
119
$ easy_install pil
120
</pre>
121
122 22 Jackson, Mike
Check MagickWand:
123
124 23 Jackson, Mike
* Start Python,
125 14 Jackson, Mike
<pre>
126 16 Jackson, Mike
$ python
127 14 Jackson, Mike
$ import magickwand
128
$ from magickwand.image import Image
129
...
130
</pre>
131
* If you get an error like,
132
<pre>
133
Traceback (most recent call last):
134 1 Jackson, Mike
  File "<stdin>", line 1, in <module>
135
  File "build/bdist.linux-i686/egg/magickwand/image.py", line 2, in <module>
136
  File "build/bdist.linux-i686/egg/magickwand/api/__init__.py", line 1, in <module>
137
    #
138 14 Jackson, Mike
  File "build/bdist.linux-i686/egg/magickwand/api/lib.py", line 11, in <module>
139
  File "/home/user/maus/third_party/install/lib/python2.7/ctypes/__init__.py", 
140
  line 353, in __init__ self._handle = _dlopen(self._name, mode)
141 20 Jackson, Mike
OSError: libMagickWand.so.5: cannot open shared object file: 
142 14 Jackson, Mike
 No such file or directory
143 1 Jackson, Mike
</pre>
144 28 Jackson, Mike
* then, as super-user, run @ldconfig@:
145
<pre>
146
$ /sbin/ldconfig /usr/local/lib
147
</pre>
148 14 Jackson, Mike
149 22 Jackson, Mike
h2. Install Apache 2.2
150 16 Jackson, Mike
151 22 Jackson, Mike
Apache 2.2 (http://httpd.apache.org/) is an HTTP server. 
152 16 Jackson, Mike
153 22 Jackson, Mike
If you do *not* want to use Apache 2 but are happy to use the stand-alone lightweight Django web server then *go down to Install the MAUS web front-end*.
154 19 Jackson, Mike
155 22 Jackson, Mike
To install Apache 2.2,
156
157
* Log in as a super-user by using @sudo su -@ or @su@.
158 1 Jackson, Mike
* Download,
159
<pre>
160
$ wget http://mirrors.ukfast.co.uk/sites/ftp.apache.org//httpd/httpd-2.2.22.tar.gz
161
</pre>
162
* Extract,
163
<pre>
164
$ gzip -d httpd-2.2.22.tar.gz 
165
$ tar xvf httpd-2.2.22.tar
166
$ cd httpd-2.2.22
167
</pre>
168
* Configure,
169
<pre>
170
$ ./configure
171
</pre>
172 22 Jackson, Mike
** This uses a default installation directory of @/usr/local/apache2@.
173 1 Jackson, Mike
* Compile,
174
<pre>
175
$ make 
176
</pre>
177
* Install,
178
<pre>
179
$ make install 
180
</pre>
181
* Start-up server,
182
<pre>
183
$ /usr/local/apache2/bin/apachectl -k start
184
</pre>
185
** If you get an error like,
186
<pre>
187
(98)Address already in use: make_sock: could not bind to address [::]:80
188
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
189
no listening sockets available, shutting down
190
Unable to open logs
191
</pre>
192 22 Jackson, Mike
** Then edit @/usr/local/apache2/conf/httpd.conf@ and change,
193 1 Jackson, Mike
<pre>
194
Listen 80 
195
</pre>
196
** to a port that is not in use e.g.
197
<pre>
198
Listen 9090
199
</pre>
200 22 Jackson, Mike
** and try to start Apache again as described above.
201 1 Jackson, Mike
* Browse to http://localhost:8080 (or whatever port you specified above) and you should see @It works!"@
202
203 22 Jackson, Mike
More information:
204 1 Jackson, Mike
205 22 Jackson, Mike
* Apache 2 configuration file: @/usr/local/apache2/conf/httpd.conf@
206 1 Jackson, Mike
* Error log: @/usr/local/apache2/logs/error_log@
207 22 Jackson, Mike
* Installation instructions: http://httpd.apache.org/docs/current/install.html
208 1 Jackson, Mike
209 22 Jackson, Mike
h2. Install mod_wsgi
210 1 Jackson, Mike
211 22 Jackson, Mike
mod_wsgi (http://code.google.com/p/modwsgi/) is an Apache module allowing the hosting of Python applications which suppport Python's WSGI (Web Server Gateway Interface). 
212 1 Jackson, Mike
213 22 Jackson, Mike
To install mod_wsgi (July 2010 release) under Apache 2.2,
214
215 24 Jackson, Mike
* Log in as a super-user by using @sudo su -@ or @su@.
216 22 Jackson, Mike
* Download release,
217 1 Jackson, Mike
<pre>
218
$ wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
219
</pre>
220
* Extract,
221
<pre>
222
$ gunzip mod_wsgi-3.3.tar.gz 
223
$ tar -xf mod_wsgi-3.3.tar
224
$ cd mod_wsgi-3.3
225
</pre>
226
* Set Python library path,
227 24 Jackson, Mike
** If you are *not* using the MAUS software to provide Python 2.7, then skip this step.
228
** If you *are* using the MAUS software to provide Python 2.7, then set @LD_PYTHON_PATH@ to the location of its libraries e.g.:
229 1 Jackson, Mike
<pre>
230 17 Jackson, Mike
$ export LD_LIBRARY_PATH=/home/user/maus/third_party/install/lib/
231 1 Jackson, Mike
</pre>
232
* Configure,
233 22 Jackson, Mike
** If you installed Python 2.7 then run,
234 1 Jackson, Mike
<pre>
235
$ ./configure --with-apxs=/usr/local/apache2/bin/apxs
236
</pre>
237 24 Jackson, Mike
** If you *are* using the MAUS software to provide Python 2.7, you need to provide the path, so run,
238 17 Jackson, Mike
<pre>
239
$ ./configure --with-apxs=/usr/local/apache2/bin/apxs
240
  --with-python=/home/user/maus/third_party/install/bin/python2.7
241
</pre>
242 1 Jackson, Mike
** If you get an error like:
243
<pre>
244 17 Jackson, Mike
/home/user/maus/third_party/install/bin/python2.7: error while loading 
245 1 Jackson, Mike
shared libraries: libpython2.7.so.1.0: cannot open shared object file: 
246
No such file or directory
247
</pre>
248 22 Jackson, Mike
** then set the @LD_LIBRARY_PATH@ as above.
249 1 Jackson, Mike
** If you get an error like:
250
<pre>
251
checking for apxs2... no
252
checking for apxs... no
253
checking Apache version... ./configure: line 1704: apxs: command not found
254
./configure: line 1704: apxs: command not found
255
./configure: line 1705: apxs: command not found
256
./configure: line 1708: /: is a directory
257
258 17 Jackson, Mike
checking for python... /home/user/maus/third_party/install/bin/python
259 1 Jackson, Mike
./configure: line 1877: apxs: command not found
260
configure: creating ./config.status
261
config.status: error: cannot find input file: Makefile.in
262
</pre>
263 22 Jackson, Mike
** then you forgot to provide the path to Apache's @apxs@ command,
264 1 Jackson, Mike
* Compile,
265
<pre>
266
$ make
267
</pre>
268
* Install,
269
<pre>
270
$ make install
271
</pre>
272
* A @mod_wsgi.so@ library is installed in @/usr/local/apache2/modules@.
273 22 Jackson, Mike
* Configure Apache:
274
** Edit @/usr/local/apache2/conf/httpd.conf@
275
** Look for the comment,
276 1 Jackson, Mike
<pre>
277 22 Jackson, Mike
# Example
278
# LoadModule foo_module modules/mod_foo.so
279
#
280 1 Jackson, Mike
</pre>
281 22 Jackson, Mike
** Under this comment, add,
282 1 Jackson, Mike
<pre>
283 17 Jackson, Mike
LoadModule wsgi_module modules/mod_wsgi.so
284
</pre>
285 22 Jackson, Mike
* Set the @LD_LIBRARY_PATH@ in the Apache environment,
286 24 Jackson, Mike
** If you are *not* using the MAUS software to provide Python 2.7, then skip this step. 
287
** If you *are* using the MAUS software to provide Python 2.7, then set @LD_PYTHON_PATH@ to the location of its libraries,
288
*** Edit @/usr/local/apache2/bin/envvars@ and insert your path on a line before the @export LD_LIBRARY_PATH@ line, so the file becomes
289 1 Jackson, Mike
<pre>
290 22 Jackson, Mike
LD_LIBRARY_PATH="/usr/local/apache2/lib:$LD_LIBRARY_PATH" 
291 17 Jackson, Mike
LD_LIBRARY_PATH="/home/user/maus/third_party/install/lib/:$LD_LIBRARY_PATH" 
292 22 Jackson, Mike
export LD_LIBRARY_PATH
293 1 Jackson, Mike
</pre>
294 22 Jackson, Mike
*** Ensure that the permissions in your path allow group and world read and execute permission (755),
295 17 Jackson, Mike
<pre>
296 1 Jackson, Mike
$ chmod go+rx /home/user
297
</pre>
298
* Restart Apache,
299
<pre>
300
$ /usr/local/apache2/bin/apachectl restart
301
</pre>
302 22 Jackson, Mike
* If all is well you should see, in @/usr/local/apache2/logs/error_log@, a line like,
303 1 Jackson, Mike
<pre>
304
[Tue Feb 07 18:50:37 2012] [notice] Apache/2.2.22 (Unix) mod_wsgi/3.3 
305
Python/2.7.2 configured -- resuming normal operations
306
</pre>
307
* If you see an error like,
308
<pre>
309 2 Jackson, Mike
[Tue Feb 07 18:46:40 2012] [notice] SIGHUP received.  Attempting to restart
310
httpd: Syntax error on line 55 of /usr/local/apache2/conf/httpd.conf: Cannot 
311
load /usr/local/apache2/modules/mod_wsgi.so into server: 
312
libpython2.7.so.1.0: cannot open shared object file: No such file or directory
313
</pre>
314
** then you have to set the @LD_LIBRARY_PATH@ as above.
315 1 Jackson, Mike
* If you see an error like,
316
<pre>
317
Could not find platform independent libraries <prefix>
318
Could not find platform dependent libraries <exec_prefix>
319
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
320
ImportError: No module named site
321
</pre>
322
** then it is likely you did not set the file permissions for the directory in which Python is as described above.
323
* Clean up,
324 2 Jackson, Mike
<pre>
325
$ make clean
326 1 Jackson, Mike
</pre>
327
328 22 Jackson, Mike
To check your installation,
329 1 Jackson, Mike
330
* List server information,
331
<pre>
332
$ /usr/local/apache2/bin/httpd  -V
333
Server version: Apache/2.2.22 (Unix)
334
...
335
Server MPM:     Prefork
336 2 Jackson, Mike
  threaded:     no
337 1 Jackson, Mike
    forked:     yes (variable process count)
338
Server compiled with....
339
 -D APACHE_MPM_DIR="server/mpm/prefork"
340
...
341
</pre>
342
** Important information is the version and prefork settings,
343
* List compiled-in modules,
344
<pre>
345
$ /usr/local/apache2/bin/httpd  -l
346
Compiled in modules:
347
...
348
  prefork.c
349
</pre>
350
** You should see @prefork.c@.
351
* List dynamically-loaded modules,
352
<pre>
353
$ /usr/local/apache2/bin/httpd  -M
354
 mpm_prefork_module (static)
355
 ...
356
 wsgi_module (shared)
357
 ...
358 2 Jackson, Mike
</pre>
359 1 Jackson, Mike
** You should see @wsgi_module@.
360
** If this fails with,
361
<pre>
362
httpd: Syntax error on line 55 of /usr/local/apache2/conf/httpd.conf: 
363
Cannot load /usr/local/apache2/modules/mod_wsgi.so into server: 
364
libpython2.7.so.1.0: cannot open shared object file: No such file or directory
365
</pre>
366
** Then set your @LD_LIBRARY_PATH@ as above and try again,
367 2 Jackson, Mike
<pre>
368
$ export LD_LIBRARY_PATH="/home/user/maus/third_party/install/lib/:$LD_LIBRARY_PATH"
369
$ /usr/local/apache2/bin/httpd -M
370
Loaded Modules:
371
...
372
</pre>
373
* List modules linked to by @mod_wsgi@:
374
<pre>
375
$ ldd /usr/local/apache2/modules/mod_wsgi.so
376
...
377 1 Jackson, Mike
libpython2.7.so.1.0 => /home/user/maus/third_party/install/lib/libpython2.7.so.1.0 
378 2 Jackson, Mike
(0x00110000)
379
...
380
</pre>
381
** You should see the link to your Python library.
382
383 22 Jackson, Mike
More information:
384 2 Jackson, Mike
385 22 Jackson, Mike
* http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide
386
* http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation
387
* http://code.google.com/p/modwsgi/wiki/InstallationInstructions
388
* http://code.google.com/p/modwsgi/wiki/InstallationIssues
389
390
h2. Install the MAUS web front-end
391 1 Jackson, Mike
392 22 Jackson, Mike
Check-out the MAUS Django code,
393 2 Jackson, Mike
<pre>
394 27 Jackson, Mike
$ bzr branch -v lp:maus-apps
395 22 Jackson, Mike
$ cd maus-apps
396 2 Jackson, Mike
</pre>
397 22 Jackson, Mike
398 24 Jackson, Mike
You can either run the MAUS web front-end under the Django web server or under Apache 2.
399 22 Jackson, Mike
400 26 Jackson, Mike
h3. Run the web front-end under the Django web server
401 22 Jackson, Mike
402
* Create the environment script,
403
** If you are *not* using the MAUS software to provide Python 2.7:
404 1 Jackson, Mike
<pre>
405
$ ./configure
406
</pre>
407 22 Jackson, Mike
** If you *are*  using the MAUS software to provide Python 2.7:
408 20 Jackson, Mike
<pre>
409 22 Jackson, Mike
$ ./configure --with-maus
410 1 Jackson, Mike
</pre>
411 22 Jackson, Mike
* Set up the environment,
412
** If you *are* using the MAUS software to provide Python 2.7 then set up the MAUS environment as described in the MAUS user guide, e.g.
413
<pre>
414
$ source /home/user/maus/env.sh
415
</pre>
416
** Set up the MAUS web front-end environment:
417
<pre>
418
$ source env.sh
419
</pre>
420
* Start the Django web server. Run:
421
<pre>
422
$ python src/mausweb/manage.py runserver HOST:PORT
423
</pre>
424
** where @HOST@ is your host name and @PORT@ is the port on which the web server listens. For example
425 1 Jackson, Mike
<pre>
426 22 Jackson, Mike
$ python src/mausweb/manage.py runserver localhost:9000
427 1 Jackson, Mike
</pre>
428
** or,
429
<pre>
430 22 Jackson, Mike
$ python src/mausweb/manage.py runserver maus.epcc.ed.ac.uk:9000
431
</pre>
432
433 26 Jackson, Mike
h3. Run the web front-end under the Apache web server
434 22 Jackson, Mike
435 24 Jackson, Mike
* Create the environment script,
436
** If you are *not* using the MAUS software to provide Python 2.7:
437 2 Jackson, Mike
<pre>
438 24 Jackson, Mike
$ ./configure
439 2 Jackson, Mike
</pre>
440 24 Jackson, Mike
** If you *are*  using the MAUS software to provide Python 2.7:
441 1 Jackson, Mike
<pre>
442 24 Jackson, Mike
$ ./configure --with-maus
443 2 Jackson, Mike
</pre>
444 24 Jackson, Mike
* Log in as a super-user by using @sudo su -@ or @su@.
445
* Set the paths in the Apache environment, edit @/usr/local/apache2/bin/envvars@:
446
** If you are *not* using the MAUS software to provide Python 2.7, then add, on a line before the @export LD_LIBRARY_PATH@ line, a command to sources the MAUS web front-end @env.sh@ script e.g.:
447 2 Jackson, Mike
<pre>
448 24 Jackson, Mike
source /home/user/maus-apps/env.sh
449 1 Jackson, Mike
</pre>
450 24 Jackson, Mike
** If you *are* using the MAUS software to provide Python 2.7, then add, on lines before the @export LD_LIBRARY_PATH@ line, commands to sources the MAUS software and MAUS web front-end @env.sh@ scripts e.g.:
451 1 Jackson, Mike
<pre>
452 24 Jackson, Mike
source /home/user/maus/env.sh
453
source /home/user/maus-apps/env.sh
454 1 Jackson, Mike
</pre>
455 24 Jackson, Mike
** Ensure that the permissions in your path allow group and world read and execute permission (755) to these scripts e.g.,
456 1 Jackson, Mike
<pre>
457 24 Jackson, Mike
$ chmod go+rx /home/user
458 1 Jackson, Mike
</pre>
459 24 Jackson, Mike
* Edit the Apache 2 configuration, @/usr/local/apache2/conf/httpd.conf@ and add to the end of the file:
460 2 Jackson, Mike
<pre>
461 3 Jackson, Mike
WSGIScriptAlias / ${MAUS_WEB_DIR}/apache/django.wsgi  
462 17 Jackson, Mike
 
463 6 Jackson, Mike
<Directory ${MAUS_WEB_DIR}/apache> 
464 8 Jackson, Mike
Order deny,allow  
465 4 Jackson, Mike
Allow from all  
466 6 Jackson, Mike
</Directory> 
467 3 Jackson, Mike
</pre>
468 24 Jackson, Mike
** For your information,
469
*** @/@ specifies the root URL - so all URL requests will be directed to Django.
470
*** @/...@ - location of WSGI file within the MAUS Django project.
471 3 Jackson, Mike
* Restart Apache 2.2,
472 2 Jackson, Mike
<pre>
473
$ /usr/local/apache2/bin/apachectl restart
474
</pre>
475
476 25 Jackson, Mike
For information on running Django under Apache 2.2/mod_wsgi, see:
477
* https://docs.djangoproject.com/en/1.3/howto/deployment/modwsgi
478
* http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango
479 8 Jackson, Mike
480 26 Jackson, Mike
h3. Test your installation
481 8 Jackson, Mike
482 22 Jackson, Mike
* Copy a couple of sample images,
483 24 Jackson, Mike
<pre>
484
$ cp images/* media/raw
485
</pre>
486 25 Jackson, Mike
* Browse to the URL @http://HOST:PORT/maus@ where @HOST@ is your host name and @PORT@ is the port on which the web server listens. For example @http://localhost:80/maus/@
487 24 Jackson, Mike
488 26 Jackson, Mike
h2. Supported images 
489 25 Jackson, Mike
490
Currently the MAUS web front-end supports any image formats with extensions supported by Matplotlib or 
491 24 Jackson, Mike
PyROOT and handled by MagickWand image converter: 
492 25 Jackson, Mike
493
* PostScript: "ps"
494
* Enhanced PostScript: "eps"
495
* PNG: "png"
496
* PDF: "pdf" 
497
* GIF: "gif"
498
* JPEG: "jpg", "jpeg"