# FCM: Installation

## System Requirements

FCM is intended to run on a Unix/Linux system. It is known to work on recent popular Linux distributions such as RHEL-6. See metomi-vms @ Github for information.

FCM releases can be downloaded from Github. Download the tar.gz file and un-pack it into an appropriate location on your system. Add the `bin/` directory into your PATH environment variable. Enable the configuration files in `etc/fcm/` directory and edit them to meet the your requirements. Once you have done this you should now have access to the FCM user utilities, assuming that you have met the requirements described below:

Perl

  used by: `fcm`.

  versions known to work: RHEL-6: 5.10.1

  remark: We assume that all core Perl modules (as documented by perldoc.perl.org) of the known to work versions are installed on your system. (N.B. On platforms based on RHEL, you may need the perl-core RPM instead of just perl, see this discussion.)

Perl module Config::IniFiles

  used by: the admin commands.

  versions known to work: RHEL-6: 2.72.

Perl module DBD::SQLite

  used by: the admin commands.

  versions known to work: RHEL-6: 1.29.

Perl module SVN::Client

  used by: the admin commands.

  versions known to work: RHEL-6: 1.8.5 (RPM from http://opensource.wandisco.com/).

Perl module XML::Parser

  used by: the code management commands.

  versions known to work: RHEL-6: 2.36.

Perl module Tk

  used by: `fcm gui`.

  versions known to work: RHEL-6: 804.028.

Subversion

  used by: the code management commands, the extract system of `fcm make`, the deprecated `fcm extract`.

  versions known to work:RHEL-6: 1.8.10.

  remark: you can use the extract system to mirror code to a remote platform for building. Therefore it is only necessary to have Subversion installed on the platform where you do your code development. If you use other platforms purely for building and running then you do not need to have Subversion installed on these platforms.

Trac

  used by: (optional, but highly recommended as a companion to Subversion)

  versions known to work: RHEL-6: 1.0.5.

xxdiff

  used by: `fcm branch-diff --graphical`, `fcm conflicts`, `fcm diff --graphical`.

  versions known to work: RHEL-6: 3.2.

  remark: The `fcm branch-diff --graphical` and `fcm diff --graphical` commands use xxdiff by default but can also use other graphical diff tools.

GNU diffutils: diff3

  used by: the extract system of `fcm make`, the deprecated `fcm extract`.

  versions known to work: RHEL-6: 2.8.1.

  remark:: used to merge changes to source files modified by 2+ diff source trees (compared with the base).

rsync

  used by: the mirror system of `fcm make`, the deprecated `fcm extract`.

  versions known to work: RHEL-6: 3.0.6.

  remark: used to mirror source file to another USER@HOST.

GNU make

  used by: the deprecated `fcm build`.

  versions known to work: RHEL-6: 3.81.

## Content in the Distribution

ACKNOWLEDGEMENT.md
CONTRIBUTING.md
README.md
COPYING
  Terms of use and project information.
CHANGES.md
  Contains highlight and noteworthy changes since release 2-3-1.
bin/
  Contains the `fcm` user utilities.
doc/
  FCM documentation.
doc/installation/
  Contains this document.
doc/release_notes/
  Contains release notes prior to and including release 2-3-1.
doc/user_guide/
  Contains the FCM User Guide.
etc/
  Miscellaneous items and example site configurations, including the `fcm/keyword.cfg.example` file. If you wish to define keywords for your site you will need to create the `etc/fcm/keyword.cfg` file. An example file, `fcm/keyword.cfg.example`, is provided which is a copy of the file currently used at the Met Office. For further details please refer to the section FCM keywords in the System Admin chapter of the User Guide.
lib/
  Contains the Perl library of FCM.
man/
  Contains a basic manual page for `fcm`.
sbin/
  Contains a selection of useful admin utility commands.
sbin/my-regular-update.example
  An example of how you might set up a cron job to make use of the `<repos>.latest` file (see `svn-hooks/post-commit-background`).
svn-hooks/
  Contains a selection of useful hook scripts for Subversion.
svn-hooks/pre-commit
  This script restricts write-access to the repository by checking the following:
  - It executes the Subversion utility `svnperms.py` if it, and the associated `svnperms.conf` file, exist. This utility checks whether the author of the current transaction has enough permission to write to particular paths in the repository.
  - It checks the disk space required by the current transaction. It fails the commit if it requires more than 10MB of disk space (or whatever is specified in the `pre-commit-size-threshold.conf` file.
svn-hooks/post-commit
  This script runs `post-commit-background` in the background.
svn-hooks/post-commit-background
  This script runs in the background after each commit.
  - It updates a `<repos>.latest` file with the latest revision number.
  - It creates a dump of the new revision.
  - It calls `post-commit-background-custom` if it exists.
svn-hooks/pre-revprop-change
  This script only allows the modification of svn:log.
svn-hooks/post-revprop-change
  This script runs `post-revprop-change-background` in the background.
svn-hooks/post-revprop-change-background
  This script invokes the `trac-admin` command to `resync` the revision property cache stored in the corresponding Trac environment. If a user modifies the log message of a changeset and he/she is not the original author of the changeset, this script will e-mail the original author. If the file `post-revprop-change-background-cc.list` exits, the script will also e-mail those in the list.
t/
  Contains functional test for FCM.
test/
  Contains regression tests for FCM.
test/test_include/
  Contains simple test code to check how your chosen compilers handle include files.
tutorial/
  Contains the files necessary to set up a Subversion repository for the FCM tutorial. This will allow you to follow the tutorial section in the User Guide. See `tutorial/README` on how to set it up.