.. 
.. Copyright 2015 Comcast Cable Communications Management, LLC
.. 
.. Licensed under the Apache License, Version 2.0 (the "License");
.. you may not use this file except in compliance with the License.
.. You may obtain a copy of the License at
.. 
..     http://www.apache.org/licenses/LICENSE-2.0
.. 
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.
.. 

.. index::
  Traffic Ops - Installing 
  
.. _rl-ps:

Installing Traffic Ops
%%%%%%%%%%%%%%%%%%%%%%

System Requirements
-------------------
The user must have the following for a successful install:

* CentOS 6
* 4 vCPUs
* 32GB RAM
* 20 GB disk space
* YUM repository with minimally the following dependecies avaliable

  * apr 1.3.9-5 
  * apr-util 1.3.9-3 
  * apr-util-ldap 1.3.9-3   
  * expat-devel 2.0.1-11 
  * genisoimage 1.1.9-12  
  * httpd 2.2.15
  * httpd-tools 2.2.15  
  * libpcap-devel 14:1.4
  * mod_ssl  1:2.2.15-29
  * mysql 5.1.71 
  * autoconf 2.63-5.1.
  * automake 1.11.1-4
  * gcc 4.4.7-4
  * gettext 0.17-16
  * libcurl-devel 7.19.7-37
  * libtool 2.2.6-15.5
  * mysql-devel 5.1.73-3
  * perl-CPAN 1.9402-136
  * libcurl 7.19.7-37
  * openssl 1.0.1e-30
  * cloog-ppl 0.15.7-1.2
  * cpp 4.4.7-4
  * cvs 1.11.23-16
  * libgomp 4.4.7-4
  * libidn-devel 1.18-2
  * m4 1.4.13-5
  * mpfr 2.4.1-6
  * perl-Digest-SHA 1:5.47-136
  * ppl 0.10.2-11
  * curl 7.19.7-37
  * openssl-devel 1.0.1e-30
 
* Access to `The Comprehensive Perl Archive Network (CPAN) <http://www.cpan.org/>`_

.. Note:: The above versions are known to work on CentOS 6.5. Higher versions may work.

.. Note:: Although Traffic Ops supports both MySQL and Postgres as a database, support for MySQL is more mature and better tested. It is best to use MySQL when first getting started, and the rest of this quide assumes MySQL as the database.

Navigating the Install
-----------------------
To begin the install:

1. Install Traffic Ops: 
  Download the traffic_ops rpm package from http://traffic-control-cdn.net/downloads/index.html
  
  ``sudo rpm -ivh traffic_ops-1.*.*-****.x86_64.rpm``





2. After installation of Traffic Ops rpm enter the following command: ``sudo /opt/traffic_ops/install/bin/postinstall``

  Example output::


      trafficops-vm # /opt/traffic_ops/install/bin/postinstall

      This script will build and package the required Traffic Ops perl modules.
      In order to complete this operation, Development tools such as the gcc
      compiler must be installed on this machine.

      Hit ENTER to continue:


  The first thing the post install will do is install additional packages needed from the yum repo.

  Ater that, it will automatically proceed to installing the required Perl packages from CPAN.

  .. Note:: Especially when installing Traffic Ops for the first time on a system this can take a long time, since many dependencies for the Mojolicous application need to be downloaded. Expect 30 minutes. 

  If there are any prompts in this phase, please just answer with the defaults (some CPAN installs can prompt for install questions). 

  When this phase is complete, you will see:: 

      ...
      Successfully installed Test-Differences-0.63
      Successfully installed DBIx-Class-Schema-Loader-0.07042
      Successfully installed Time-HiRes-1.9726 (upgraded from 1.9719)
      Successfully installed Mojolicious-Plugin-Authentication-1.26
      113 distributions installed
      Complete! Modules were installed into /opt/traffic_ops/app/local
      Linking perl libraries...
      Installing perl scripts


      This script will initialize the Traffic Ops database.
      Please enter the following information in order to completely
      configure the Traffic Ops mysql database.


      Database type [mysql]:


  The next phase of the install will ask you about the local environment for your CDN.

  .. Note:: Before proceeding to this step, the database has to have at least a root password, and needs to be started. When using mysql, please type ``service mysqld start`` as root in another terminal and follow the instructions on the screen to set the root password.

  .. Note:: CentOS files note.

  Example output::

      Database type [mysql]:
      Database name [traffic_ops_db]:
      Database server hostname IP or FQDN [localhost]:
      Database port number [3306]:
      Traffic Ops database user [traffic_ops]:
      Password for traffic_ops:
      Re-Enter password for traffic_ops:

      Error: passwords do not match, try again.

      Password for traffic_ops:
      Re-Enter password for traffic_ops:

      Database server root (admin) user name [root]:
      Database server root password:
      Database Type: mysql
      Database Name: traffic_ops_db
      Hostname: localhost
      Port: 3306
      Database User: traffic_ops
      Is the above information correct (y/n) [n]:  y

      The database properties have been saved to /opt/traffic_ops/app/conf/production/database.conf

        The database configuration has been saved.  Now we need to set some custom
        fields that are necessary for the CDN to function correctly.


      Traffic Ops url [https://localhost]:  https://traffic-ops.kabletown.net
      Human-readable CDN Name.  (No whitespace, please) [kabletown_cdn]:
      DNS sub-domain for which your CDN is authoritative [cdn1.kabletown.net]:
      Fully qualified name of your CentOS 6.5 ISO kickstart tar file, or 'na' to skip and add files later [/var/cache/centos65.tgz]:  na
      Fully qualified location to store your ISO kickstart files [/var/www/files]:

      Traffic Ops URL: https://traffic-ops.kabletown.net
      Traffic Ops Info URL: https://traffic-ops.kabletown.net/info
      Domainname: cdn1.kabletown.net
      CDN Name: kabletown_cdn
      GeoLocation Polling URL: https://traffic-ops.kabletown.net/routing/GeoIP2-City.mmdb.gz
      CoverageZone Polling URL: https://traffic-ops.kabletown.net/routing/coverage-zone.json

      Is the above information correct (y/n) [n]:  y
      Install information has been saved to /opt/traffic_ops/install/data/json/post_install.json


      Adding an administration user to the Traffic Ops database.

      Administration username for Traffic Ops:  admin
      Password for the admin user admin:
      Verify the password for admin:
      Do you wish to create an ldap configuration for access to traffic ops [y/n] ? [n]:  n
      creating database
      Creating database...
      Creating user...
      Flushing privileges...
      setting up database
      Executing 'drop database traffic_ops_db'
      Executing 'create database traffic_ops_db'
      Creating database tables...
      Migrating database...
      goose: migrating db environment 'production', current version: 0, target: 20150316100000
      OK    20141222103718_extension.sql
      OK    20150108100000_add_job_deliveryservice.sql
      OK    20150205100000_cg_location.sql
      OK    20150209100000_cran_to_asn.sql
      OK    20150210100000_ds_keyinfo.sql
      OK    20150304100000_add_ip6_ds_routing.sql
      OK    20150310100000_add_bg_fetch.sql
      OK    20150316100000_move_hdr_rw.sql
      Seeding database...
      Database initialization succeeded.
      seeding profile data...
      name EDGE1 description Edge 1
      name TR1 description Traffic Router 1
      name TM1 description Traffic Monitor 1
      name MID1 description Mid 1
      seeding parameter data...

  Explanation of the information that needs to be provided:

    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    |                       Field                        |                                          Description                                          |
    +====================================================+===============================================================================================+
    | Database type                                      | mysql or postgres                                                                             |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Database name                                      | The name of the database Traffic Ops uses to store the configuration information              |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Database server hostname IP or FQDN                | The hostname of the database server                                                           |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Database port number                               | The database port number                                                                      |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Traffic Ops database user                          | The username Traffic Ops will use to read/write from the database                             |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Password for traffic ops                           | The password for the above database user                                                      |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Database server root (admin) user name             | Privileged database user that has permission to create the database and user for Traffic Ops  |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Database server root (admin) user password         | The password for the above privileged database user                                           |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Traffic Ops url                                    | The URL to connect to this instance of Traffic Ops, usually https://<traffic ops host FQDN>/  |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Human-readable CDN Name                            | The name of the first CDN traffic Ops will be managing                                        |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | DNS sub-domain for which your CDN is authoritative | The DNS domain that will be delegated to this Traffic Control CDN                             |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | name of your CentOS 6.5 ISO kickstart tar file     | See :ref:`Creating-CentOS-Kickstart`                                                          |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Administration username for Traffic Ops            | The Administration (highest privilege) Traffic Ops user to create;                            |
    |                                                    | use this user to login for the first time and create other users                              |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+
    | Password for the admin user                        | The password for the above user                                                               |
    +----------------------------------------------------+-----------------------------------------------------------------------------------------------+


  The postinstall script will now seed the database with some inital configuration settings for the CDN and the servers in the CDN.

  The next phase is the download of the geo location database and configuration of information needed for SSL certificates.

  Example output::

    Downloading MaxMind data.
    --2015-04-14 02:14:32--  http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
    Resolving geolite.maxmind.com... 141.101.115.190, 141.101.114.190, 2400:cb00:2048:1::8d65:73be, ...
    Connecting to geolite.maxmind.com|141.101.115.190|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 17633433 (17M) [application/octet-stream]
    Saving to: "GeoLite2-City.mmdb.gz"

    100%[==================================================================================================================================================================>] 17,633,433  7.03M/s   in 2.4s

    2015-04-14 02:14:35 (7.03 MB/s) - "GeoLite2-City.mmdb.gz" saved [17633433/17633433]

    Copying coverage zone file to public dir.

    Installing SSL Certificates.

      We're now running a script to generate a self signed X509 SSL certificate.
      When prompted to enter a pass phrase, just enter 'pass' each time.  The
      pass phrase will be stripped from the private key before installation.

      When prompted to enter a 'challenge password', just hit the ENTER key.

      The remaining enformation Country, State, Locality, etc... are required to
      generate a properly formatted SSL certificate.

    Hit Enter when you are ready to continue:
    Postinstall SSL Certificate Creation.

    Generating an RSA Private Server Key.

    Generating RSA private key, 1024 bit long modulus
    ..........................++++++
    .....................++++++
    e is 65537 (0x10001)
    Enter pass phrase for server.key:
    Verifying - Enter pass phrase for server.key:

    The server key has been generated.

    Creating a Certificate Signing Request (CSR)

    Enter pass phrase for server.key:
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:US
    State or Province Name (full name) []:CO
    Locality Name (eg, city) [Default City]:Denver
    Organization Name (eg, company) [Default Company Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) []:
    Email Address []:

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:pass
    An optional company name []:

    The Certificate Signing Request has been generated.
    Removing the pass phrase from the server key.
    Enter pass phrase for server.key.orig:
    writing RSA key

    The pass phrase has been removed from the server key.

    Generating a Self-signed certificate.
    Signature ok
    subject=/C=US/ST=CO/L=Denver/O=Default Company Ltd
    Getting Private key

    A server key and self signed certificate has been generated.

    Installing the server key and server certificate.

    The private key has been installed.

    Installing the self signed certificate.

    Saving the self signed csr.

      The self signed certificate has now been installed.

      You may obtain a certificate signed by a Certificate Authority using the
      server.csr file saved in the current directory.  Once you have obtained
      a signed certificate, copy it to /etc/pki/tls/certs/localhost.crt and
      restart Traffic Ops.



    SSL Certificates have been installed.

    Starting Traffic Ops.

    Starting Traffic Ops

    Subroutine TrafficOps::has redefined at /opt/traffic_ops/app/local/lib/perl5/Mojo/Base.pm line 38.
    Subroutine TrafficOps::has redefined at /opt/traffic_ops/app/local/lib/perl5/Mojo/Base.pm line 38.
    Loading config from /opt/traffic_ops/app/conf/cdn.conf
    Reading log4perl config from /opt/traffic_ops/app/conf/production/log4perl.conf
    Starting hot deployment for Hypnotoad server 32192.

    Waiting for Traffic Ops to start.


    Shutdown Traffic Ops [y/n] [n]:  n

    To start Traffic Ops:  service traffic_ops start
    To stop Traffic Ops:   service traffic_ops stop

    traffic_ops #

Traffic Ops is now installed!

Upgrading Traffic Ops
=====================
To upgrade:

1. Enter the following command:``service traffic_ops stop``
2. Enter the following command:``yum upgrade traffic_ops``
3. See :ref:`rl-ps` to run the post install.
4. Enter the following command:``service traffic_ops start``
