~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to doc/man/install.rst

  • Committer: David Coles
  • Date: 2010-07-20 05:55:20 UTC
  • Revision ID: coles.david@gmail.com-20100720055520-yxyfn2qqycfwboiq
URL quote paths in checkout URLs.

The two benefits of this are that we no longer have issues with spaces in 
submitted paths and also don't have to worry about shell escape characters 
(and possible shell injection to a lectures console).

Show diffs side-by-side

added added

removed removed

Lines of Context:
55
55
Master versus slave servers
56
56
===========================
57
57
 
58
 
Installing from a Debian package
59
 
================================
60
 
 
61
 
.. _database-setup:
 
58
IVLE is normally deployed in a cluster of several machines, split into
 
59
two different roles: master and slave.
 
60
 
 
61
There must be exactly one master server per cluster. The master normally
 
62
runs the PostgreSQL database server, the Subversion server, and the IVLE User
 
63
Management Server (``ivle-usrmgt-server``). It might also export shared data
 
64
directories to the slaves over NFS.
 
65
 
 
66
There may be any number of slaves in a cluster. They run the IVLE web
 
67
application, which also starts console host processes. Each slave makes use
 
68
of the shared services on the master.
 
69
 
 
70
For a small instance a slave may be run on the same machine as the master.
 
71
This is the setup described in the source installation section, while the
 
72
Ubuntu package installation section describes a multi-node configuration.
62
73
 
63
74
 
64
75
Installing from source
66
77
 
67
78
When setting up a development IVLE environment on Ubuntu 9.04 or later,
68
79
there are scripts to automate most of the process. First get and extract
69
 
a release, or check out the latest code from the bzr branch: ::
 
80
`a release tarball <https://launchpad.net/ivle/+download>`_, or check out
 
81
the latest code from the Bazaar branch: ::
70
82
 
71
83
   bzr get lp:ivle
72
84
 
74
86
source tree. The remaining steps assume that you are in this new
75
87
directory.
76
88
 
 
89
 
 
90
Automated setup
 
91
---------------
 
92
 
77
93
The ``ivle-dev-setup`` script will configure PostgreSQL, Apache, IVLE
78
94
and the filesystem to cooperate, getting you most of the way to a
79
95
working system in just one step: ::
150
166
    python-formencode python-genshi python-psycopg2 python-svn python-storm \
151
167
    libjs-jquery postgresql subversion debootstrap rsync build-essential
152
168
 
153
 
While installing from a distribution package is often a better idea for
154
 
users, developers will need to install from a plain source tree.
155
 
 
156
 
To get the tree, either grab and extract a release tarball, or get the
157
 
very latest code using bzr: ::
158
 
 
159
 
   bzr get lp:ivle
160
 
 
161
 
You should then change into the new source directory.
162
 
 
163
169
As IVLE needs to compile some binaries, you must first build, then
164
 
install it: ::
 
170
install it. From the source directory created earlier: ::
165
171
 
166
172
   ./setup.py build
167
173
   sudo ./setup.py install
168
174
 
169
 
Unlike the package, you will have to manually set up the database and
170
 
configuration.
 
175
.. _database-setup:
 
176
 
 
177
Setting up the database
 
178
~~~~~~~~~~~~~~~~~~~~~~~
171
179
 
172
180
First, it is recommended that you create a separate database user for IVLE.
173
181
You may use any name for the user. ::
192
200
   sudo ivle-config
193
201
 
194
202
 
195
 
Basic configuration
196
 
===================
197
 
 
198
 
.. Note: Place here only the configuration required to get the system
199
 
   installed and running. Any further configuration should go in config.rst.
 
203
Creating the data tree
 
204
~~~~~~~~~~~~~~~~~~~~~~
200
205
 
201
206
IVLE needs a directory hierarchy in which to store filesystem data, which
202
207
by default lives in ``/var/lib/ivle``. Create it now. ::
205
210
 
206
211
 
207
212
Configuring the jail environment
208
 
--------------------------------
 
213
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
209
214
 
210
215
You will require a self-contained jail environment in which to safely
211
216
execute student code. 
217
222
   devmode = True
218
223
   suite = jaunty # Replace this with the codename of your Ubuntu release.
219
224
   mirror = http://url.to.archive/mirror # Replace with a fast Ubuntu mirror.
220
 
   extra_packages = python-configobj, python-svn, python-cjson
221
225
 
222
226
.. TODO: Move this around a bit, as the config options required differ for
223
227
   the packaged version.
228
232
 
229
233
   sudo ivle-buildjail -r
230
234
 
 
235
 
231
236
Configuring Apache
232
 
------------------
 
237
~~~~~~~~~~~~~~~~~~
233
238
 
234
239
IVLE makes use of two Apache virtual hosts: one for the application itself,
235
240
and one for the Subversion services. There are example configuration files
246
251
 
247
252
 
248
253
Configuring hostname resolution
249
 
--------------------------------
 
254
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
250
255
 
251
256
All of IVLE's hostnames need to be resolvable from the local system. For a
252
257
production environment, this would be done in DNS. For a development system,
265
270
 
266
271
 
267
272
Configuring the user management server
268
 
--------------------------------------
 
273
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
269
274
 
270
275
You need to have the IVLE user management server (``usrmgt-server``) running
271
276
for many parts of IVLE to operate properly, so it should be configured to
279
284
 
280
285
 
281
286
Creating the initial user
282
 
-------------------------
 
287
~~~~~~~~~~~~~~~~~~~~~~~~~
283
288
 
284
289
The final step in getting a usable IVLE set up is creating a user. You'll
285
290
probably want admin privileges - if not, drop the ``--admin``. ::
286
291
 
287
 
   sudo ivle-adduser --admin -p password username 'Full Name'
 
292
   sudo ivle-adduser --admin -p PASSWORD USERNAME 'FULL NAME'
288
293
 
289
294
You should then be able to browse to http://ivle.localhost/, and
290
295
log in with that username and password.
295
300
.. note::
296
301
   For more advanced configuration, see :ref:`Configuring IVLE
297
302
   <ref-configuring-ivle>`.
 
303
 
 
304
 
 
305
 
 
306
Installing from an Ubuntu package
 
307
=================================
 
308
 
 
309
IVLE is packaged in `a Launchpad PPA <https://launchpad.net/~unimelb-ivle/+archive/production>`_,
 
310
providing a more managed installation and upgrade mechanism than a source
 
311
installation.
 
312
 
 
313
These instructions document the process to install a production-ready
 
314
multi-node IVLE cluster. They expect that you have three domain names:
 
315
one for the main IVLE web UI, one for the Subversion service, and one
 
316
for serving user files publicly.
 
317
 
 
318
.. warning::
 
319
   By design the public domain may have arbitrary user-generated content
 
320
   served. Because of this, it should not have any domain with sensitive
 
321
   cookies as a suffix, including the main IVLE web UI. Be very careful
 
322
   with your choice here.
 
323
 
 
324
 
 
325
Shared setup
 
326
------------
 
327
 
 
328
All master and slave nodes need to have access to the IVLE PPA.
 
329
`Visit it <https://launchpad.net/~unimelb-ivle/+archive/production>`_ and
 
330
follow the installation instructions on all involved systems.
 
331
 
 
332
 
 
333
Master setup
 
334
------------
 
335
 
 
336
Setting up the database server
 
337
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
338
 
 
339
The master server runs the central IVLE PostgreSQL database. ::
 
340
 
 
341
   sudo apt-get install postgresql
 
342
 
 
343
Ubuntu's default PostgreSQL configuration doesn't permit remote access,
 
344
so we need to tweak it to allow password access from our slave. In
 
345
``/etc/postgresql/8.3/main/postgresql.conf``, find the ``listen_addresses``
 
346
option, and ensure it is set to ``*``. In
 
347
``/etc/postgresql/8.3/main/pg_hba.conf`` add a line like the following to the
 
348
end. This example will allow any host in the ``1.2.3.4/24`` subnet to
 
349
authenticate with a password as the ``ivle`` user to the ``ivle`` database. ::
 
350
 
 
351
   host    ivle        ivle        1.2.3.4/24      md5
 
352
 
 
353
Then restart PostgreSQL, and the slaves should be able to see the database. ::
 
354
 
 
355
   sudo /etc/init.d/postgresql-8.3 restart
 
356
 
 
357
 
 
358
Installing and configuring IVLE
 
359
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
360
 
 
361
We can now install IVLE. The installation process will ask you a few questons.
 
362
Answer that this host is a **master**, let it generate a random usrmgt-server
 
363
secret, elect to manage the database with ``dbconfig-common``, and use a
 
364
random password. ::
 
365
 
 
366
   sudo apt-get install ivle
 
367
 
 
368
Once that's done, we have a couple of additional configuration items to set:
 
369
the URLs discussed earlier. Open up ``/etc/ivle/ivle.conf``, 
 
370
and replace ``public.ivle.localhost`` and ``svn.ivle.localhost`` with the
 
371
correct domain names.
 
372
 
 
373
Make sure you restart the ``usrmgt-server`` afterwards, or newly created users
 
374
may inherit the old domain names. ::
 
375
 
 
376
   sudo /etc/init.d/usrmgt-server restart
 
377
 
 
378
 
 
379
Sharing data between the servers
 
380
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
381
 
 
382
As well as its relational database, IVLE has a data hierarchy on the
 
383
fileystem. Two part of this (``/var/lib/ivle/jails`` and
 
384
``/var/lib/ivle/sessions``) must be shared between the master and all of the
 
385
slaves. It doesn't matter how you achieve this, but a reasonable method is
 
386
described here: exporting over NFS from the master.
 
387
 
 
388
We'll first create a tree (``/export/ivle`` in this example, but it can be
 
389
whatever you want) to be exported to the slaves, move the existing data
 
390
directories into it, and symlink them back into place. ::
 
391
 
 
392
   sudo mkdir /export/ivle
 
393
   sudo mv /var/lib/ivle/{sessions,jails} /export/ivle
 
394
   sudo ln -s /export/ivle/{sessions,jails} /var/lib/ivle
 
395
 
 
396
Next install an NFS server. ::
 
397
 
 
398
   sudo apt-get install nfs-kernel-server
 
399
 
 
400
Now we can export the directory we created earlier across the network.
 
401
Add something like the following line to ``/etc/exports``. ``someslave``
 
402
should be replaced with the hostname, IP address, or subnet of your
 
403
slave(s). ::
 
404
 
 
405
   /export/ivle         someslave(rw,sync)
 
406
 
 
407
Make sure you inform the kernel of the new export. ::
 
408
 
 
409
   sudo exportfs -a
 
410
 
 
411
 
 
412
Configuring Apache
 
413
~~~~~~~~~~~~~~~~~~
 
414
 
 
415
The master serves Subversion repositories through Apache on the Subversion
 
416
domain name that was discussed above. ::
 
417
 
 
418
   sudo cp /usr/share/doc/ivle/apache-svn.conf /etc/apache2/sites-available/ivle-svn
 
419
   sudo a2ensite ivle-svn
 
420
 
 
421
Edit ``/etc/apache2/sites-available/ivle-svn``, ensuring that the
 
422
``ServerName`` matches your chosen domain name. Then reload Apache's
 
423
configuration. ::
 
424
 
 
425
   sudo /etc/init.d/apache2 reload
 
426
 
 
427
 
 
428
Setting up a jail environment
 
429
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
430
 
 
431
IVLE requires that a base jail be provided, on top of which all of the
 
432
individual user jails are constructed in order to safely execute user code.
 
433
 
 
434
We need to change some configuration options before we can build a working
 
435
jail. First set the mirror and Ubuntu release -- make sure you replace the
 
436
URL and release code name with an Ubuntu mirror and your Ubuntu release. ::
 
437
 
 
438
   sudo ivle-config --jail/mirror http://url.to.mirror/ubuntu --jail/suite hardy
 
439
 
 
440
Now comes the ugly bit: we need to tell the jail builder where to get the
 
441
IVLE code that must be present in the jail. If you're using the production
 
442
PPA, the following ``/etc/ivle/ivle.conf`` snippet will work. If you're not,
 
443
you'll have to replace the ``extra_keys`` and ``extra_sources`` values ::
 
444
 
 
445
   [jail]
 
446
   extra_keys = '''
 
447
   -----BEGIN PGP PUBLIC KEY BLOCK-----
 
448
   Version: SKS 1.0.10
 
449
   
 
450
   mI0ES2pQKAEEANiscebT7+SFnvpN8nABcwT5nEV6psUOF8CcIIrz3iv6b6wA3lYd0DzbD7RD
 
451
   fs1MNriEHHgqPF6EUhGrkk1165Oqi+lULdjgL0Fzi3GFvLV9F8+BtL3wt3+MM7YC+aTS1nhF
 
452
   dQcPpnhNAJagW5gR4dIc4w87sNquxgCdJeJn/N3XABEBAAG0KkxhdW5jaHBhZCBVbml2ZXJz
 
453
   aXR5IG9mIE1lbGJvdXJuZSBJVkxFIFBQQYi2BBMBAgAgBQJLalAoAhsDBgsJCAcDAgQVAggD
 
454
   BBYCAwECHgECF4AACgkQVwp7ATtnautCMgP8C6PbLNyx9akgbiwhakFfGaEbxGFCo1EAUE7v
 
455
   FgdelJSEkeQLAn4WoANpixuojNi++PEDis22S4tz+ZC6G0dRU9Pcc1bb4xUgphR83QTcufH7
 
456
   5EagfTf5lLIWaLdg5f/NeuHHrKvwKvPVkNJ3ShQejFB/xWGpqe2Rr7Rscm9lT0Q=
 
457
   =TJYw
 
458
   -----END PGP PUBLIC KEY BLOCK-----
 
459
   '''
 
460
   extra_packages = ivle-services,
 
461
   extra_sources = deb http://ppa.launchpad.net/unimelb-ivle/production/ubuntu hardy main,
 
462
 
 
463
Now we can build the jail. This will download lots of packages, and install
 
464
a minimal Ubuntu system in ``/var/lib/ivle/jails/__base__``. ::
 
465
 
 
466
   sudo ivle-buildjail -r
 
467
 
 
468
You should now have a functional master.
 
469
 
 
470
 
 
471
Creating the initial user
 
472
~~~~~~~~~~~~~~~~~~~~~~~~~
 
473
 
 
474
The last master step for getting a usable IVLE set up is creating a user.
 
475
You'll probably want admin privileges - if not, drop the ``--admin``. ::
 
476
 
 
477
   sudo ivle-adduser --admin -p PASSWORD USERNAME 'FULL NAME'
 
478
 
 
479
You can then visit your IVLE web UI domain and login in with the username
 
480
and password.
 
481
 
 
482
 
 
483
Slave setup
 
484
-----------
 
485
 
 
486
Installing and configuring IVLE
 
487
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
488
 
 
489
We need to tell the database configuration assistant that we want to connect
 
490
to a remote database. The second command will also ask you whether you want to
 
491
store administrative passwords: say no here. ::
 
492
 
 
493
   sudo apt-get install dbconfig-common
 
494
   sudo dpkg-reconfigure dbconfig-common
 
495
 
 
496
We are going to need some details from the master for authentication purposes.
 
497
Grab the ``password`` value from the ``database`` section, and the ``magic``
 
498
value from the ``usrmgt`` section of the master's ``/etc/ivle/ivle.conf``.
 
499
 
 
500
Now we can install IVLE. Advise the installer that this machine is not a
 
501
master, and use the details retrieved from the master to answer the rest of
 
502
the questions. ::
 
503
 
 
504
   sudo apt-get install ivle
 
505
 
 
506
Once the installation has completed, make the same configuration changes as on
 
507
the master: set the domain names in ``ivle.conf`` to real values.
 
508
 
 
509
For maximum performance, you should also set the ``version`` value in the
 
510
``media`` section. The exact string is not important, as long as the value is
 
511
identical on every slave, and changed on each upgrade. It is used to make
 
512
static file URLs unique, so clients can cache them indefinitely. The IVLE
 
513
version is conventionally used as this string.
 
514
 
 
515
 
 
516
Getting access to the shared data
 
517
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
518
 
 
519
We need to mount the shared components of the IVLE data hierarchy from the
 
520
master. If you've used the suggested method, follow these instructions.
 
521
Otherwise you'll have to work it out for yourself.
 
522
 
 
523
First install the NFS common utilities, required for NFS mounts. ::
 
524
 
 
525
   sudo apt-get install nfs-common
 
526
 
 
527
Now we can add the mount to ``/etc/fstab``. Something like this should do: ::
 
528
 
 
529
  themaster:/export/ivle /export/ivle nfs defaults 0 0
 
530
 
 
531
Then mount the filesystem, and link the shared directories into the
 
532
hierarchy. ::
 
533
 
 
534
   mount -a
 
535
   ivle-createdatadirs
 
536
   rmdir /var/lib/ivle/{sessions,jails}
 
537
   ln -s /export/ivle/{sessions,jails} /var/lib/ivle
 
538
 
 
539
 
 
540
Configuring Apache
 
541
~~~~~~~~~~~~~~~~~~
 
542
 
 
543
The slaves use Apache to serve the main IVLE web UI and public user files.
 
544
Let's activate the configuration now. ::
 
545
 
 
546
   sudo cp /usr/share/doc/ivle/apache.conf /etc/apache2/sites-available/ivle
 
547
   sudo a2ensite ivle
 
548
 
 
549
Now edit ``/etc/apache2/sites-available/ivle``, and ensure that the
 
550
``ServerName`` matches your chosen IVLE web UI domain name, and
 
551
``ServerAlias`` your public name. Then reload Apache's configuration. ::
 
552
 
 
553
   sudo /etc/init.d/apache2 reload