FOSSology Multiple System Install
=================================
FOSSology is designed so that it is possible to divide functions up over
several machines. You can have one function per machine, or you might
choose to put multiple function on a machine.
For example a common config is to have one machine running the database,
scheduler, and web ui and then have multiple machines running agents.
There are more details of why you might want to do this and detailed
instructions at
  http://fossology.org/multi-system_setup
This document is a short list of how to install.
  
To do a multi-system install:

1) Follow the instructions in INSTALL for each machine to build and
install FOSSology, but do not run the fo-postinstall script yet. If
the machine will serve as a web ui machine follow the apache and php
configuration steps. If using the fo-installdeps utility you can use
the -a option for agent only machines to avoid installing unneeded
things like the postgresql and apache servers.

2) On each machine edit the default Db.conf file that was installed and
configure it to point at the database server. If one of the systems
you are installing is the database server, on that machine configure
Db.conf to point at "localhost"

3) On the machine with the database server run the postinstall with the
database flag
  # /usr/local/lib/fossology/fo-postinstall -d
This will create the database so that when you run the postinstall on
the other machines they will be able to connect to it. (If your
database resides on a remote server that you aren't installing
FOSSology on then you can run the above command, by itself, on one of
the other machines.)

4) Run the fo-postinstall script on each machine using flags to indicate
what functions the machine will serve. Here is the fo-postinstall usage text

Usage: fo-postinstall [options]
  -a or --agent      : agent specific actions
  -d or --database   : database specific actions
  -w or --web        : web interface specific actions
  -s or --scheduler  : scheduler specific actions
  -e or --everything : all actions (default)
  -o or --overwrite  : overwrite config files with new versions
  -h or --help       : this help text

WARNING: the fo-postinstall script will create the fossy user on each
machine, but it is important that the user's UID and GID are the same
across machines so that NFS will work correctly (NFSv4's rpc.idmapd
might be a solution for this)

5) Setup NFS (or similar) on each agent machine to export it's repo
directory to the other machines and mount all repos on all agent
machines and the scheduler machine. For example:

* an agent machine should have something like this in /etc/exports
/srv/fossology/repository/agent1   192.168.8.0/24(rw,async,no_subtree_check)

* the other agent machines and the scheduler would then have something
like this in /etc/fstab
agent1:/srv/fossology/repository/agent1 /srv/fossology/repository/agent1 \
  nfs nfsvers=3,defaults,soft

6) On all machines setup the Hosts.conf file according to the format
explained in the documentation (at the URL listed above) and to how
you want to split the repository.

7) On the scheduler machine as the fossy user use ssh-keygen to generate
a ssh key that does not have a passphrase. Then copy the public half of
that key to each of the agent machines' ~fossy/.ssh/authorized_keys file.
Test that you can ssh from the scheduler machine, as the fossy user, to
each of the agent machines without it prompting for a passphrase or
password.

8) On the scheduler machine the default version of Scheduler.conf is
for a single system install. You will need to change the "host=" lines
and add additional entries for each agent. The easiest way to do this is
with the mkschedconf program.  

Use -C to identify the number of CPUs on the host, -R to specify the 
remote-login command, and -H to create entries for a given hostname.

For example: if you have two machines (agent1 and agent2), one with 
4 cpus and the other with 8, use the following command to generate the
Scheduler.conf file in /usr/local/etc/fossology/Scheduler.conf: 
  mkschedconf  -o /usr/local/etc/fossology/Scheduler.conf \
         -C 4 -R '/usr/bin/ssh fossy@agent1.foo.com "%s"' -H agent1 \
         -C 8 -R '/usr/bin/ssh fossy@agent2.foo.com "%s"' -H agent2

9) Run /usr/local/lib/fossology/fossology-scheduler -t to test that
your Scheduler.conf file is correct and that the scheduler can talk to
all the agent and that they are also configured correctly. If not then
adjust until it does.

10) Start the scheduler
  # /etc/init.d/fossology start
