- For any functionality at all
  - Unix.  Ubuntu works
  - Apache
  - MySQL
  - PHP, including PEAR
  - php-mysql
  - php-gd for handling graphics directly from PHP scripts
  - php-zip
  - Spreadsheet_Excel_Writer and OLE.  Can be installed with:
    % sudo pear install OLE-1.0.0RC6
    % sudo pear install Spreadsheet_Excel_Writer-0.9.4
    % sudo pear install Mail
  - R, version at least 3.0 
    - additional packages: rrBLUP, rpart, lme4, pheatmap, agricolae, lsmeans
  - Website security - ModSecurity
- For some functions
  - JBrowse
  - libzip
  - for ViroBLAST
    - DBD::CSV, XML::DOM and BioPerl. Can be installed with these commands:
      % sudo cpan DBD::CSV
      % sudo cpan XML::DOM
      % sudo cpan BioPerl
    - sudo apt-get install libgd-gd2-perl
    - sudo apt-get install curl
    - sudo apt-get install libcurl4-openssl-dev
    - sudo apt-get install r-base-dev
    - NCBI BLAST+,
      Edit viroblast/viroblast.ini to use the path to these executables.
    - BLAST databases of the markers:
      - Edit curator_data/format-fasta.php to specify species
	e.g. viroblast/db/nucleotide/oat-markers
	e.g. viroblast/db/nucleotide/oat-index.csv
      - Create a symbolic link to the BLAST databases in the viroblast directory
	e.g. cd viroblast/db
	e.g. ln -s ../../gbs_files/blast/ nucleotide

Instructions for Ubuntu 16.04
sudo apt-get install apache2
sudo apt-get install mysql-server
sudo apt-get install php libapache2-mod-php
sudo apt-get install php-pear
sudo apt-get install php-mail
sudo apt-get install php7.0-mysql
sudo apt-get install php7.0-gd
sudo apt-get install php7.0-zip
sudo apt-get install php7.0-xml
sudo apt-get install r-base
sudo apt-get install r-base-dev
sudo apt-get install libcurl4-openssl-dev
sudo R
sudo cpan DBD::CSV
sudo cpan XML::DOM
sudo cpan BioPerl
sudo mysql -u root
mysql> create database T3wheat
mysql> use T3wheat;
mysql> source T3wheat_schema.sql
mysql> source T3wheat_skeleton.sql
cd /var/www/html
sudo mkdir wheat
sudo chown  wheat
git clone wheat
sudo apt-get install libapache2-modsecurity
cd /etc/modsecurity
sudo mv modsecurity.conf-recommended modsecurity.conf
cd /etc/apache2
sudo mkdir modsecurity-crs
sudo git clone modsecurity-crs
cd /etc/apache2/modsecurity-crs
sudo mv crs-setup.conf.example crs-setup.conf

Setting up the MySQL databases

Load the schema and some initializing data from the .sql files in this
docs/ directory:
mysql> create database T3wheat;
mysql> use T3wheat;
mysql> source T3wheat_schema.sql;
mysql> source T3wheat_skeleton.sql;

The skeleton file T3wheat_skeleton.sql loads some initializing data in
several housekeeping tables.  You will want to modify some of these
values for your installation, especially in table 'settings'.

Grant read-permission (only) to a user such as "publicuser".
mysql> grant select on T3wheat.* to publicuser@localhost identified by '<password>';
mysql> grant execute on T3wheat.* to publicuser@localhost;
mysql> grant update, insert, delete on T3wheat.session_variables to publicuser@localhost;

To help prevent table T3wheat.users from being read by hackers, revoke
the SELECT permission on that table by running the script publicuser.php
in this docs/ directory.  If you add more tables to the database later,
you will have to grant SELECT on them individually.

Grant write permission to another user such as "curator":
mysql> grant all on T3wheat.* to curator@localhost identified by '<password>';

If you have more than one instance of T3 on the same host machine, add
an entry to table 'settings' with name = "database", value = "<unique
name>". The code checks this entry to prevent transfer of session
variables (cookies) between instances.  This is important because the
session variables include the user's login status and privileges, which
otherwise can be transferred simply by opening a new tab in the browser.

If using GBrowse, create the GBrowse database "gtht" and grant
mysql> create database gtht;
mysql> grant select on gtht.* to publicuser@localhost;

Database connection scripts

For security, the password information to connect to the MySQL database
is not stored within the T3 source code repository or even within the
Apache directory.  For example ours is in
/data/tht_data/mysql_connections/.  The file permissions need only allow
read access for the Apache user, e.g.  www-data:

-r-------- 1 www-data www-data 196 2011-01-31 11:56
-r-------- 1 www-data www-data 141 2011-01-31 11:56

Create these files with the contents shown below, and edit your files
includes/  and includes/ to point to the
correct pathname for your system.
  $db_config = array('db_name' => 'T3wheat',
                     'db_user' => 'publicuser',
                     'db_pass' => '<password>',
                     'db_host' => 'localhost');
  $db_config = array('db_name' => 'T3wheat',
                     'db_user' => 'curator',
                     'db_pass' => '<password>',
                     'db_host' => 'localhost');

command line scripts

Some pages use "materialized view" tables of allele data rather than the
source table 'alleles' itself. These tables are normally updated after 
importing new data. If database data is deleted then the materialized view
tables can be updated using scripts in the scripts\ directory.

For GBS import files with over 100K markers it is necessary to use command line
scripts to format and import the data. The scripts for doing these imports are
located in the scripts/ directory.

Directories for uploaded and output files

Uploaded data files are stored in the curator_data/uploads/ directory,
which must be writable by the Apache user, e.g. www-data.  

% cd curator_data
% mkdir uploads
% sudo chown www-data uploads

Likewise, certain raw data files that are not parsed into the database
are archived in the "raw/" directory, so this must be writable by the
Apache user too.  In the Git distribution, "raw/" is a symbolic link to
a directory outside the repository, with the writable permission.

All output and temporary files are stored in directory /tmp/tht/, where
write-access for the scripts isn't a problem and they're all in one
place to be purged daily or hourly with a cron() job.  In order for this
to work there must be a symbolic link from somewhere in the webserver's
documents directory to /tmp/tht.  For example if your T3 repositories
are in a subdirectory "t3" of the webserver's top directory
"/www/htdocs", this would make the link:

% cd /www/htdocs/t3; mkdir tmp; ln -s /tmp/tht tmp/tht


The built-in BLAST interface, ViroBLAST, is not included in the GitHub
repository but is available for academic and nonprofit 
use at no charge.  It should be installed in directory 'viroblast/' at the
top level of the T3 distribution.

If you have installed ViroBLAST, the sequences of the markers will be
maintained in a BLAST database in the directory 'viroblast/db/nucleotide/'.
This directory must be writable by Apache user.

PHP configuration

Some helpful modifications for the php.ini file, such as 
/etc/php/7.0/apache2/php.ini or /etc/php5/apache2/php.ini:

max_input_time = 600
memory_limit = 512M
post_max_size = 100M
upload_max_filesize = 100M
max_input_vars = 10000
error_log = /var/log/php-scripts.log

For logging from PHP, set the owner of the log file to the Apache user,
e.g. www-data
# touch /var/log/php-scripts.log
# chown www-data /var/log/php-scripts.log

Then restart the Apache server to read the new php.ini configuration.


See installation instructions at
The installation should be in the DocumentRoot of Apache. As and example, if the installed version is JBrowse-1.12.1 use the following command
sudo ln -s JBrowse-1.12.1/ jbrowse