312
312
For more advanced configuration, see :ref:`Configuring IVLE
313
313
<ref-configuring-ivle>`.
317
Installing from an Ubuntu package
318
=================================
320
IVLE is packaged in `a Launchpad PPA <https://launchpad.net/~unimelb-ivle/+archive/production>`_,
321
providing a more managed installation and upgrade mechanism than a source
324
These instructions document the process to install a production-ready
325
multi-node IVLE cluster. They expect that you have three domain names:
326
one for the main IVLE web UI, one for the Subversion service, and one
327
for serving user files publicly.
330
By design the public domain may have arbitrary user-generated content
331
served. Because of this, it should not have any domain with sensitive
332
cookies as a suffix, including the main IVLE web UI. Be very careful
333
with your choice here.
339
All master and slave nodes need to have access to the IVLE PPA.
340
`Visit it <https://launchpad.net/~unimelb-ivle/+archive/production>`_ and
341
follow the installation instructions on all involved systems.
347
Setting up the database server
348
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
350
The master server runs the central IVLE PostgreSQL database. ::
352
sudo apt-get install postgresql
354
Ubuntu's default PostgreSQL configuration doesn't permit remote access,
355
so we need to tweak it to allow password access from our slave. In
356
``/etc/postgresql/8.3/main/postgresql.conf``, find the ``listen_addresses``
357
option, and ensure it is set to ``*``. In
358
``/etc/postgresql/8.3/main/pg_hba.conf`` add a line like the following to the
359
end. This example will allow any host in the ``1.2.3.4/24`` subnet to
360
authenticate with a password as the ``ivle`` user to the ``ivle`` database. ::
362
host ivle ivle 1.2.3.4/24 md5
364
Then restart PostgreSQL, and the slaves should be able to see the database. ::
366
sudo /etc/init.d/postgresql-8.3 restart
369
Installing and configuring IVLE
370
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
372
We can now install IVLE. The installation process will ask you a few questons.
373
Answer that this host is a **master**, let it generate a random usrmgt-server
374
secret, elect to manage the database with ``dbconfig-common``, and use a
377
sudo apt-get install ivle
379
Once that's done, we have a couple of additional configuration items to set:
380
the URLs discussed earlier. Open up ``/etc/ivle/ivle.conf``,
381
and replace ``public.ivle.localhost`` and ``svn.ivle.localhost`` with the
382
correct domain names.
384
Make sure you restart the ``usrmgt-server`` afterwards, or newly created users
385
may inherit the old domain names. ::
387
sudo /etc/init.d/usrmgt-server restart
390
Sharing data between the servers
391
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
393
As well as its relational database, IVLE has a data hierarchy on the
394
fileystem. Two part of this (``/var/lib/ivle/jails`` and
395
``/var/lib/ivle/sessions``) must be shared between the master and all of the
396
slaves. It doesn't matter how you achieve this, but a reasonable method is
397
described here: exporting over NFS from the master.
399
We'll first create a tree (``/export/ivle`` in this example, but it can be
400
whatever you want) to be exported to the slaves, move the existing data
401
directories into it, and symlink them back into place. ::
403
sudo mkdir /export/ivle
404
sudo mv /var/lib/ivle/{sessions,jails} /export/ivle
405
sudo ln -s /export/ivle/{sessions,jails} /var/lib/ivle
407
Next install an NFS server. ::
409
sudo apt-get install nfs-kernel-server
411
Now we can export the directory we created earlier across the network.
412
Add something like the following line to ``/etc/exports``. ``someslave``
413
should be replaced with the hostname, IP address, or subnet of your
416
/export/ivle someslave(rw,sync)
418
Make sure you inform the kernel of the new export. ::
426
The master serves Subversion repositories through Apache on the Subversion
427
domain name that was discussed above. ::
429
sudo cp /usr/share/doc/ivle/apache-svn.conf /etc/apache2/sites-available/ivle-svn
430
sudo a2ensite ivle-svn
432
Edit ``/etc/apache2/sites-available/ivle-svn``, ensuring that the
433
``ServerName`` matches your chosen domain name. Then reload Apache's
436
sudo /etc/init.d/apache2 reload
439
Setting up a jail environment
440
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
442
IVLE requires that a base jail be provided, on top of which all of the
443
individual user jails are constructed in order to safely execute user code.
445
We need to change some configuration options before we can build a working
446
jail. First set the mirror and Ubuntu release -- make sure you replace the
447
URL and release code name with an Ubuntu mirror and your Ubuntu release. ::
449
sudo ivle-config --jail/mirror http://url.to.mirror/ubuntu --jail/suite hardy
451
Now comes the ugly bit: we need to tell the jail builder where to get the
452
IVLE code that must be present in the jail. If you're using the production
453
PPA, the following ``/etc/ivle/ivle.conf`` snippet will work. If you're not,
454
you'll have to replace the ``extra_keys`` and ``extra_sources`` values ::
458
-----BEGIN PGP PUBLIC KEY BLOCK-----
461
mI0ES2pQKAEEANiscebT7+SFnvpN8nABcwT5nEV6psUOF8CcIIrz3iv6b6wA3lYd0DzbD7RD
462
fs1MNriEHHgqPF6EUhGrkk1165Oqi+lULdjgL0Fzi3GFvLV9F8+BtL3wt3+MM7YC+aTS1nhF
463
dQcPpnhNAJagW5gR4dIc4w87sNquxgCdJeJn/N3XABEBAAG0KkxhdW5jaHBhZCBVbml2ZXJz
464
aXR5IG9mIE1lbGJvdXJuZSBJVkxFIFBQQYi2BBMBAgAgBQJLalAoAhsDBgsJCAcDAgQVAggD
465
BBYCAwECHgECF4AACgkQVwp7ATtnautCMgP8C6PbLNyx9akgbiwhakFfGaEbxGFCo1EAUE7v
466
FgdelJSEkeQLAn4WoANpixuojNi++PEDis22S4tz+ZC6G0dRU9Pcc1bb4xUgphR83QTcufH7
467
5EagfTf5lLIWaLdg5f/NeuHHrKvwKvPVkNJ3ShQejFB/xWGpqe2Rr7Rscm9lT0Q=
469
-----END PGP PUBLIC KEY BLOCK-----
471
extra_packages = ivle-services,
472
extra_sources = deb http://ppa.launchpad.net/unimelb-ivle/production/ubuntu hardy main,
474
Now we can build the jail. This will download lots of packages, and install
475
a minimal Ubuntu system in ``/var/lib/ivle/jails/__base__``. ::
477
sudo ivle-buildjail -r
479
You should now have a functional master.
482
Creating the initial user
483
~~~~~~~~~~~~~~~~~~~~~~~~~
485
The last master step for getting a usable IVLE set up is creating a user.
486
You'll probably want admin privileges - if not, drop the ``--admin``. ::
488
sudo ivle-adduser --admin -p PASSWORD USERNAME 'FULL NAME'
490
You can then visit your IVLE web UI domain and login in with the username
497
Installing and configuring IVLE
498
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
500
We need to tell the database configuration assistant that we want to connect
501
to a remote database. The second command will also ask you whether you want to
502
store administrative passwords: say no here. ::
504
sudo apt-get install dbconfig-common
505
sudo dpkg-reconfigure dbconfig-common
507
We are going to need some details from the master for authentication purposes.
508
Grab the ``password`` value from the ``database`` section, and the ``magic``
509
value from the ``usrmgt`` section of the master's ``/etc/ivle/ivle.conf``.
511
Now we can install IVLE. Advise the installer that this machine is not a
512
master, and use the details retrieved from the master to answer the rest of
515
sudo apt-get install ivle
517
Once the installation has completed, make the same configuration changes as on
518
the master: set the domain names in ``ivle.conf`` to real values.
520
For maximum performance, you should also set the ``version`` value in the
521
``media`` section. The exact string is not important, as long as the value is
522
identical on every slave, and changed on each upgrade. It is used to make
523
static file URLs unique, so clients can cache them indefinitely. The IVLE
524
version is conventionally used as this string.
527
Getting access to the shared data
528
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
530
We need to mount the shared components of the IVLE data hierarchy from the
531
master. If you've used the suggested method, follow these instructions.
532
Otherwise you'll have to work it out for yourself.
534
First install the NFS common utilities, required for NFS mounts. ::
536
sudo apt-get install nfs-common
538
Now we can add the mount to ``/etc/fstab``. Something like this should do: ::
540
themaster:/export/ivle /export/ivle nfs defaults 0 0
542
Then mount the filesystem, and link the shared directories into the
547
rmdir /var/lib/ivle/{sessions,jails}
548
ln -s /export/ivle/{sessions,jails} /var/lib/ivle
554
The slaves use Apache to serve the main IVLE web UI and public user files.
555
Let's activate the configuration now. ::
557
sudo cp /usr/share/doc/ivle/apache.conf /etc/apache2/sites-available/ivle
560
Now edit ``/etc/apache2/sites-available/ivle``, and ensure that the
561
``ServerName`` matches your chosen IVLE web UI domain name, and
562
``ServerAlias`` your public name. Then reload Apache's configuration. ::
564
sudo /etc/init.d/apache2 reload