Upgrading to VCL 2.5.1

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

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


./vcl-upgrade.sh


Alternatively, any combination of the three parts of VCL can be upgraded by
passing arguments to the script. If upgrading 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 database upgrade portion does not
have to be run on the actual database server. The following are the arguments
available:

   vcl-upgrade.sh [-h|--help] [-d|--database] [-w|--web] [-m|--managementnode]
           [--dbhost <hostname>] [--dbadminuser <username>]
           [--dbadminpass <password>]

   -d|--database - upgrade database components
           --dbhost may optionally be specified if not localhost

   -w|--web - upgrade web server components

   -m|--managementnode - upgrade management node (vcld) components

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

   --dbname <name> - name of VCL database on database server (default=vcl)

   --dbadminuser <username> - admin username for database; must have access
           to modify database schema and dump data for backup (default=root)

   --dbadminpass <password> - password for dbadminuser (default=[no password])




MANUAL UPGRADE INSTRUCTIONS

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

 1. Shutdown the httpd and vcld services

    service httpd stop
    service vcld stop

 2. Create a backup of the VCL database. This will provide a restore point if
    necessary.

    mysqldump vcl > ~/vcl-pre2.5.1-upgrade.sql

 3. Updates the database schema.

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

 4. Possibly move old web code. If /var/www/html/vcl is a directory, rename it
    to /var/www/html/vcl-2.5. These instructions assume that you installed the
    VCL web code at /var/www/html/vcl. If you installed it elsewhere, replace
    /var/www/html/vcl with your vcl web root.

    mv /var/www/html/vcl /var/www/html/vcl-2.5

 5. Disable access to the old web code

    echo "Require all denied" > /var/www/html/vcl-2.5/.htaccess

 6. Copy the new code in place

    cp -ar /root/apache-VCL-2.5.1/web /var/www/html/vcl-2.5.1
    ln -sfn /var/www/html/vcl-2.5.1 /var/www/html/vcl

 7. Copy your 2.5 config files

    cd /var/www/html/vcl-2.5/.ht-inc
    cp conf.php secrets.php pubkey.pem keys.pem /var/www/html/vcl/.ht-inc
    cp cryptkey/cryptkeyid cryptkey/private.pem /var/www/html/vcl/.ht-inc/cryptkey/

 8. If you are using SELinux, set the correct context:

    chcon -R -t httpd_sys_content_t /var/www/html/vcl-2.5.1
    chcon -t httpd_sys_rw_content_t /var/www/html/vcl-2.5.1/.ht-inc/maintenance
    chcon -t httpd_sys_rw_content_t /var/www/html/vcl-2.5.1/.ht-inc/cryptkey

 9. Update conf.php: the following item needs to be added to the conf.php
    file:

    (don't forget to edit conf.php in the *new* location)
    vim /var/www/html/vcl/.ht-inc/conf.php

    define("SSLOFFLOAD", 0);

10. Make the maintenance and cryptkey directories writable by the web server
    user. Normally this is the apache user, if using a different user change
    below command accordingly.

    chown apache /var/www/html/vcl/.ht-inc/maintenance
    chown apache /var/www/html/vcl/.ht-inc/cryptkey

11. Start httpd service

    service httpd start

12. Check testsetup.php: Check that everything is correct by viewing the
    testsetup.php script in your browser. This script is located in the same
    directory as the index.php script. I.e.

    https://your.site.url/vcl/testsetup.php

13. Copy old management node code:
    If /usr/local/vcl is a directory, copy it to /usr/local/vcl-2.5, rename
    /usr/local/vcl to /usr/local/vcl-2.5.1, and create a symlink.
    If /usr/local/vcl is a symlink to vcl-2.5, copy /usr/local/vcl-2.5 to
    /usr/local/vcl-2.5.1 and update the symlink.

    (for directory)
    cp -ar /usr/local/vcl /usr/local/vcl-2.5
    mv /usr/local/vcl /usr/local/vcl-2.5.1
    ln -s /usr/local/vcl-2.5.1 /usr/local/vcl

    (for symlink)
    cp -ar /usr/local/vcl-2.5 /usr/local/vcl-2.5.1
    ln -sfn /usr/local/vcl-2.5.1 /usr/local/vcl

14. Copy the new management node code over the old code:

    /bin/cp -ar /root/apache-VCL-2.5.1/managementnode/* /usr/local/vcl-2.5.1

15. Run install_perl_libs.pl to add any new perl library requirements:

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

16. Start vcld service

    service vcld start

17. Make some test reservations and watch the vcld.log to verify everything is
    working correctly.

    tail -f /var/log/vcld.log
