Installing VCL 2.5.1

VCL 2.5.1 can be installed using an installation script. All you need to
install VCL is the script. It will download and validate the VCL software
and then install it. The script can be used to install all three parts of
VCL (database, web portal, and management node) on a single system or to
install each part individually on separate systems.

Running the installation script with no arguments will step you through
installing all three parts of VCL.


./vcl-install.sh


Alternatively, any combination of the three parts of VCL can be installed by
passing arguments to the script. If installing the management node part of VCL,
it will also prompt you to agree to the installation of various system level
requirements needed for the code to run. The following are the arguments
available:

   vcl-install.sh [-h|--help] [-d|--database] [-w|--web] [-m|--managementnode]
           [--dbhost <hostname> --dbpass <password>] 
           [--mnhost <hostname>] [--webhost <hostname>]

   -d|--database - install database server components
           --dbpass, --mnhost, --mnip, --webhost, and --adminpass must also be
           specified

   -w|--web - install web server components
           --dbhost and --dbpass must also be specified

   -m|--managementnode - install management node (vcld) components
           --dbhost, --dbpass, and --adminpass must also be specified

   --dbhost <hostname> - hostname of database server (default=localhost)

   --dbpass <password> - password VCL will use for accessing
           database (default=random)

   --mnhost <hostname> - hostname of management node (default=localhost)

   --webhost <hostname> - hostname of web server (default=localhost)

   --adminpass <password> - password for VCL admin user









MANUAL INSTALLATION INSTRUCTIONS

The recommended method of installing VCL is to use the installation script. See
above for additional information. If manual installation is required,
instructions are listed below.

1. Install and Configure Database

   VCL currently supports the use of MySQL or MariaDB as the database.

    A. Install MySQL Server or MariaDB Server

      Install MySQL or MariaDB Server

        yum install mysql-server -y

        or

        yum install mariadb-server -y

      Configure the database daemon to start automatically:

        /sbin/chkconfig --level 345 mysqld on

        or

        /sbin/chkconfig --level 345 mariadb on

      Start the database daemon:

        /sbin/service mysqld start

        or

        /sbin/service mariadb start

      If the iptables firewall is being used and the web server and management
      nodes will be on different machines, port 3306 should be opened up to
      each of those nodes. Add the following to your iptables config and
      restart iptables service.
      Note: Insert your web server and management node IP address in the right
      locations.

        vi /etc/sysconfig/iptables

          Add these rules:

            -A INPUT -m state --state NEW -s <web server IP> -p tcp --dport 3306 -j ACCEPT
            -A INPUT -m state --state NEW -s <management node IP> -p tcp --dport 3306 -j ACCEPT

          Restart iptables:

            service iptables restart

      If the firewalld firewall is being used and the web server and
      management nodes will be on different machines, port 3306 should be
      opened up to each of those nodes. Add the following rules and reload the
      rule set.
      Note: Insert your web server and management node IP address in the right
      locations.

          Add these rules:

            firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="<web server IP>" service name="mysql" accept"
            firewall-cmd --zone=public --permanent --add-rich-rule="rule family="ipv4" source address="<management node IP>" service name="mysql" accept"

          Restart iptables:

            firewall-cmd --reload

    B. Create the VCL Database

      Run the MySQL command-line client:

        mysql

      Create a database:

        CREATE DATABASE vcl;

      Create a user with SELECT, INSERT, UPDATE, DELETE, and CREATE TEMPORARY
      TABLES privileges on the database you just created (NOTE Use your own
      password):

        GRANT SELECT,INSERT,UPDATE,DELETE,CREATE TEMPORARY TABLES ON vcl.* TO 'vcluser'@'localhost' IDENTIFIED BY 'vcluserpassword';

      Exit the MySQL command-line client

        exit

      Import the vcl.sql file into the database. The vcl.sql file is included in
      the mysql directory within the Apache VCL source code

        mysql vcl < apache-VCL-2.5.1/mysql/vcl.sql

2. Install and Configure the Web Components

   Prerequisites

    VCL database has been installed and configured

   Web Server:

    Apache HTTP Server v2.x with SSL enabled
    PHP 5.x or 7.x

   Required Linux Packages:

    httpd - Apache HTTP Server
    mod_ssl - SSL/TLS module for the Apache HTTP server
    php - The PHP HTML-embedded scripting language

   Required PHP Modules:

    php
    php-gettext
    php-json (required if your PHP version is 5.2 or later)
    php-ldap (if you will be using LDAP authentication)
    php-mysql
    php-openssl
    php-xml
    php-xmlrpc

   A. Install the Required Linux Packages & PHP Modules

      If your web server is running a Red Hat-based OS, the required components
      can be installed with:

        yum install httpd mod_ssl php php-mysql php-xml php-xmlrpc php-ldap -y

      Configure the web server daemon (httpd) to start automatically:

        /sbin/chkconfig --level 345 httpd on

      Start the web server daemon

        /sbin/service httpd start

      If SELinux is enabled, run the following command to allow the web server
      to connect to the database:

        /usr/sbin/setsebool -P httpd_can_network_connect=1

      If the iptables firewall is being used, port 80 and 443 should be opened
      up in the iptables config file:

        vi /etc/sysconfig/iptables

          Add these rules:

            -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
            -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

          Restart iptables

            service iptables restart

      If the firewalld firewall is being used, port 80 and 443 should be opened
      up:

          Add these rules:

            firewall-cmd --zone=public --add-service=http --permanent
            firewall-cmd --zone=public --add-service=https --permanent

          Reload firewalld rules

            firewall-cmd --reload

    B. Install the VCL Frontend Web Code

      Copy the web directory to a location under the web root of your web
      server and navigate to the destination .ht-inc subdirectory:

        cp -ar apache-VCL-2.5.1/web/ /var/www/html/vcl-2.5.1
        ln -s /var/www/html/vcl-2.5.1 /var/www/html/vcl
        cd /var/www/html/vcl/.ht-inc

      If SELinux is enabled, run the following command to set the context of the
      web code to httpd_sys_content_t

        chcon -R -t httpd_sys_content_t /var/www/html/vcl-2.5.1

      Copy secrets-default.php to secrets.php:

        cp secrets-default.php secrets.php

      Edit the secrets.php file:

        vi secrets.php

            Set the following variables to match your database configuration:
                $vclhost
                $vcldb
                $vclusername
                $vclpassword
            Create random passwords for the following variables:
                $cryptkey (generate with "openssl rand 32 | base64")
                $pemkey
            Save the secrets.php file

      Run the genkeys.sh

        ./genkeys.sh

      Copy conf-default.php to conf.php:

        cp conf-default.php conf.php

      Modify conf.php to match your site

        vi conf.php

            Review every entry under "Things in this section must be
            modified/reviewed". Descriptions and pointers for each value are
            included within conf.php.

      Set the owner of the .ht-inc/maintenance and .ht-inc/cryptkey directories
      to the web server user (normally 'apache'):

        chown apache maintenance
        chown apache cryptkey

      If SELinux is enabled, run the following command to allow the web server
      to write to maintenance and cryptkey

        chcon -t httpd_sys_rw_content_t maintenance
        chcon -t httpd_sys_rw_content_t cryptkey

      Open the testsetup.php page in a web browser:

        If you set up your site to be https://my.server.org/vcl/ open
        https://my.server.org/vcl/testsetup.php
        Debug any issues reported by testsetup.php

    C. Log In to the VCL Website

      Open the index.php page in your browser
      (https://my.server.org/vcl/index.php)

         Select Local Account
         Username: admin
         Password: adminVc1passw0rd

      Set the admin user password (DO NOT skip this step):

         Click User Preferences
         Enter the current password: adminVc1passw0rd
         Enter a new password
         Click Submit Changes

    D. Add a Management Node to the Database

      Click the Management Nodes link

         Select Edit Management Node Profiles
         Click Submit
         Click Add New Management Node
         Fill in these required fields:

            Hostname - The name of the management node server. This value
                    doesn't necessarily need to be a name registered in DNS nor
                    does it need to be the value displayed by the Linux hostname
                    command.  For example, if you are installing all of the VCL
                    components on the same machine you can set this value to
                    localhost.
            IP address - the public IP address of the management node
            SysAdmin Email Address - error emails will be sent to this address
            Install Path - this is the parent directory under which image files
                    will be stored - only required if doing bare metal installs
                    or using VMWare with local disks
            End Node SSH Identity Key Files - enter /etc/vcl/vcl.key unless
                    you know you are using a different SSH identity key file

        Optionally, fill in these fields:

            Address for Shadow Emails - End users are sent various emails about
                    the status of their reservations. If this field is
                    configured, copies of all of those emails will be sent to
                    this address.
            Public NIC configuration method - this defaults to Dynamic DHCP -
                    if DHCP is not available for the public interface of your
                    nodes, you can set this to Static. Then, the IP
                    configuration on the nodes will be manually set using Public
                    Netmask, Public Gateway, Public DNS Server, and the IP
                    address set for the computer under Manage Computers

        Click Add Management Node

        A dialog will pop up informing you to add the management node to a
        group, read it and click Close

        select the allManagementNodes group on the right

            click <-Add
            click Close

3. Install & Configure the Management Node Components

   Prerequisites The following management node installation instructions assume
   the instructions in these previous sections have been completed:

    VCL 2.5.1 Database Installation
    VCL 2.5.1 Web Code Installation

   Supported Operating Systems:

   The VCL management node daemon (vcld) has been developed to run on an
   operating system based on Red Hat Enterprise Linux (RHEL). It has been tested
   on the following:

    Red Hat Enterprise Linux 6.x
    Red Hat Enterprise Linux 7.x
    CentOS 6.x
    CentOS 7.x

   Required Linux Packages:

   The VCL management node daemon (vcld) requires the following Linux packages
   and Perl modules in order to run (see step 2 below for installation
   instructions).

    expat-devel - Libraries and include files to develop XML applications with
                  expat
    gcc - Various compilers (C, C++, Objective-C, Java, ...)
    krb5-devel - Development files needed to compile Kerberos 5 programs
    krb5-libs - The shared libraries used by Kerberos 5
    libxml2-devel - Libraries, includes, etc. to develop XML and HTML
                    applications
    make - GNU make utility to maintain groups of programs
    mysql/mariadb - Includes libraries for connecting to mysql/mariadb
    nmap - Network exploration tool and security scanner
    openssh - The OpenSSH implementation of SSH protocol versions 1 and 2
    openssl-devel - Files for development of applications which will use OpenSSL
    perl - The Perl programming language
    xmlsec1-openssl - OpenSSL crypto plugin for XML Security Library

   Required Perl Modules:

   The VCL management node daemon (vcld) is written in Perl and has been tested
   on Perl 5.10 and 5.16. The following Perl modules available from CPAN are
   also required (see step B below for installation instructions):

    Crypt::CBC - implementation of the cryptographic cipher block chaining mode
    Crypt::OpenSSL::RSA - RSA encoding and decoding, using the openSSL libraries
    Crypt::Rijndael - Crypt::CBC compliant Rijndael encryption module
    DBD::MySQL - MySQL driver for the Perl5 Database Interface (DBI)
    DBI - Generic Database Interface
    Digest::SHA1 - NIST SHA message digest algorithm
    Exception::Class::Base - base class for exception objects
    Frontier::Client - issue Frontier XML RPC requests to a server
    HTTP::Headers - class encapsulating HTTP Message headers
    IO::String - emulate file interface for in-core strings
    JSON - JavaScript Object Notation
    LWP::UserAgent - class implementing a web user agent
    Mail::Mailer - Simple mail agent interface
    Net::Jabber - Jabber perl library
    Net::Netmask - parse, manipulate and lookup IP network blocks
    Net::Ping::External - Cross-platform Perl interface to "ping" utilities
    Net::SSH::Expect - a wrapper to the ssh executable that is available in
                       system's PATH
    Object::InsideOut - Comprehensive inside-out object support
    RPC::XML::Client - XML-RPC client class
    Text::CSV_XS - comma-separated values manipulation routines
    XML::Simple - API for simple XML files
    YAML - YAML Ain't Markup Language

   A. Install the VCL Management Node Code - Perl Daemon

      Copy the managementnode directory to the location where you want it to
      reside (typically /usr/local):

        cp -ar apache-VCL-2.5.1/managementnode /usr/local/vcl-2.5.1
        ln -s /usr/local/vcl-2.5.1 /usr/local/vcl

   B. Install the Required Linux Packages & Perl Modules

      Run the install_perl_libs.pl script located in the bin directory:

        perl /usr/local/vcl/bin/install_perl_libs.pl

      The last line of the install_perl_libs.pl script output should be:

      COMPLETE: installed all components

      Note: The script will hang or terminate if it encounters a problem. If
      this occurs, you will need to troubleshoot the problem by looking at the
      output.

      The install_perl_libs.pl script included in the VCL distribution will
      attempt to download and install the required Linux packages and Perl
      modules. It uses the yum utility to install the required Linux packages.
      The required Perl modules are available from CPAN - The Comprehensive Perl
      Archive Network. The install_perl_libs.pl script attempts to download and
      install the required Perl modules by using the CPAN.pm module which is
      included with most Perl distributions.

      The yum utility should exist on any modern Red Hat-based Linux
      distribution (Red Hat, CentOS, Fedora, etc). If yum isn't available on
      your management node OS, you will need to download and install the
      required Linux packages manually or by using another package management
      utility. After installing the required Linux packages, attempt to run the
      install_perl_libs.pl script again.

   C. Configure vcld.conf

      Create the /etc/vcl directory:

        mkdir /etc/vcl

      Copy the stock vcld.conf file to /etc/vcl:

        cp /usr/local/vcl/etc/vcl/vcld.conf /etc/vcl

      Edit /etc/vcl/vcld.conf:

        vi /etc/vcl/vcld.conf

      The following lines must be configured in order to start the VCL daemon
      (vcld) and allow it to check in to the database:

            FQDN - the fully qualified name of the management node, this should
                   match the name that was configured for the management node
                   in the database
            server - the IP address or FQDN of the database server
            LockerWrtUser - database user account with write privileges
            wrtPass - database user password
            xmlrpc_pass - password for xmlrpc api from vcld to the web interface
                   (can be long). This will be used later to sync the database
                   vclsystem user account
            xmlrpc_url - URL for xmlrpc api
                   https://my.server.org/vcl/index.php?mode=xmlrpccall

      Save the vcld.conf file

   D. Configure the SSH Client

      The SSH client on the management node should be configured to prevent SSH
      processes spawned by the root user to the computers it controls from
      hanging because of missing or different entries in the known_hosts file.

      Edit the ssh_config file:

        vi /etc/ssh/ssh_config

      Set the following parameters:

        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no

      Note: If you do not want these settings applied universally on the
      management node the SSH configuration can also be configured to only apply
      these settings to certain hosts or only for the root user. Consult the SSH
      documentation for more information.

   E. Install and Start the VCL Daemon (vcld) Service

      Steps for systemd - use these steps if your system is using systemd

          Copy the vcld service script to /usr/lib/systemd/system

            cp /usr/local/vcl/etc/systemd/system/vcld.service /usr/lib/systemd/system

          Create a vcld config file in /etc/sysconfig

            echo "OPTIONS='-v -conf=/etc/vcl/vcld.conf'" > /etc/sysconfig/vcld

          If using SELinux, set the correct user and context:

            chcon -u system_u -t systemd_unit_file_t /usr/lib/systemd/system/vcld.service

          Enable vcld.service

            systemctl enable vcld.service

          Start the vcld service:

            systemctl start vcld.service

          Check the vcld service by monitoring the vcld.log file:

            tail -f /var/log/vcld.log

      Steps for SystemV - use these steps if your system is using SystemV
      (scripts located in /etc/init.d)

          Copy the vcld service script to /etc/init.d and name it vcld:

            cp /usr/local/vcl/bin/S99vcld.linux /etc/init.d/vcld

          Add the vcld service using chkconfig:

            /sbin/chkconfig --add vcld

          Configure the vcld service to automatically run at runtime levels 3-5:

            /sbin/chkconfig --level 345 vcld on

          Start the vcld service:

            /sbin/service vcld start

          Check the vcld service by monitoring the vcld.log file:

            tail -f /var/log/vcld.log

      You should see the following being added to the log file every few seconds
      if the management node is checking in with the database:

        2017-07-13 13:23:45|25494|vcld:main(167)|lastcheckin time updated for management node 1: 2017-07-13 13:23:45

   F. Set the vclsystem account password for xmlrpc api

      Using the vcld -setup tool, set the vclsystem account. This is needed to
      properly use the block allocation features.

        /usr/local/vcl/bin/vcld --setup

      Select the options listed below to set the password. When prompted paste
      or type the password from xmlrpc_pass variable in the vcld.conf file and
      hit enter.

        Select 5. Set Local VCL User Account Password
        Select 2. vclsystem
        Enter the password you set for xmlrpc_pass in /etc/vcl/vcld.conf

      After setting the password for the vclsystem user, test that RPC-XML
      Access works correctly by selecting

        2: Test RPC-XML Access

        "SUCCESS: RPC-XML access is configured correctly" should be displayed
        followed by a long list of available XMLRPC functions

   G. Install & Configure the DHCP Service

      DHCP service is needed for the private network to provide address to
      provisioned machines.

      Install dhcp if it is not already installed:

        yum install dhcp -y

      Configure the dhcpd service to automatically start at runlevels 3-5:

        /sbin/chkconfig dhcpd on

      Configure the dhcpd.conf file.

        vi /etc/dhcpd.conf
        -or-
        vi /etc/dhcp/dhcpd.conf

      Configure your dhcpd.conf file according to your network configuration.
      The contents of the dhcpd.conf file will vary based on how your network is
      configured. Below is an example of a basic dhcpd.conf file:

        ddns-update-style none;
        shared-network eth0 {
            subnet 10.100.0.0 netmask 255.255.255.0 {
                     ignore unknown-clients;
            }
        }

        You will add host definitions to the dhcpd.conf file after you add
        computers to VCL using the website. The website allows you to select a
        set of computers for which to generate dhcpd.conf information, which can
        be copied and pasted into the dhcpd.conf file.

      Start the dhcpd service:

        /sbin/service dhcpd start
