Thank you for visiting the Rackspace Community
The The Community is live! Post new content or topics so our teams can assist.

Please contact your support team if you have a question or need assistance for any Rackspace products, services, or articles.

Upgrading to PHP 7 from PHP 5.3.29 for Rackspace Cloud on Centos 6.8 Using Rackspace IUS Repo

  • These instructions only apply in specific cases.

    Specifically CentOS 6.8 Final machines, running in the Rackspace Cloud. These are generally running the IUS Rackspace provided repository for CentOS.

    This Rackspace IUS repository provides several things not usually available within the CentOS repo, without IUS (or another 3rd party repository like webtatic), it is a case of manually compiling more recent versions, which are not in the stable repository yet. One of them, you'll find missing from CentOS machines is the latest version of PHP7.0 and PHP7.1.

    I wanted to quickly document the process, since it is relatively simple to do, and, can actually be done without any maintenance window, if you know what your doing. And, therefore with very minimal, (if any) disruption to running sites. an apachectl graceful, actually, should be enough. Since apachectl gracefully restarts apache httpd, the downtime you’ll see will be super minimal. Expect nobody to notice you upgraded to PHP7 if you do this right.

    If you do this incorrectly, you will break the PHP installation, and worse, break all of the sites using mod_php. So, if your unsure, ask before proceeding.  Or better since it's cloud always take a cloud-server image backup.

    Alternatively to taking a cloud server image backup, if you are confident you could instead take a backup of your apache/httpd files and PHP ini. Just in case any of them get overwritten.

    # Find out the location of PHP INI Files to backup
    $ whereis php.ini
    php: /usr/bin/php /etc/php.d /etc/php.ini /usr/lib64/php /usr/include/php /usr/share/man/man1/php.1.gz
    
    # Find out the location of HTTPD Configuration files to backup
    
    $ whereis httpd
    httpd: /usr/sbin/httpd /usr/sbin/httpd.worker /usr/sbin/httpd.event /etc/httpd /usr/lib64/httpd /usr/include/httpd /usr/share/man/man8/httpd.8.gz
    [root@server3 conf]#
    
    # Create folder for the backups
    mkdir /root/backup;
    # Backup files preserving permission structure
    cp -Rp --parents /etc/httpd /root/backup
    
    cp -p /etc/php.ini /root/etc/php.ini



    Lets take a look at the steps:

    Step 1. Check available PHP modules provided by presently configured REPO

    root@server ~]# yum search php7
    Loaded plugins: fastestmirror, versionlock
    Loading mirror speeds from cached hostfile
    drivesrvr                                                                                                                                                                                                                                              | 2.2 kB     00:00
    ============================================================================================================================= N/S Matched: php7 ==============================================================================================================================
    php70u-debuginfo.x86_64 : Debug information for package php70u
    php70u-ioncube-loader-debuginfo.x86_64 : Debug information for package php70u-ioncube-loader
    php70u-pecl-amqp-debuginfo.x86_64 : Debug information for package php70u-pecl-amqp
    php70u-pecl-apcu-debuginfo.x86_64 : Debug information for package php70u-pecl-apcu
    php70u-pecl-igbinary-debuginfo.x86_64 : Debug information for package php70u-pecl-igbinary
    php70u-pecl-imagick-debuginfo.x86_64 : Debug information for package php70u-pecl-imagick
    php70u-pecl-redis-debuginfo.x86_64 : Debug information for package php70u-pecl-redis
    php70u-pecl-smbclient-debuginfo.x86_64 : Debug information for package php70u-pecl-smbclient
    php70u-pecl-xdebug-debuginfo.x86_64 : Debug information for package php70u-pecl-xdebug
    php71u-debuginfo.x86_64 : Debug information for package php71u
    php71u-pecl-apcu-debuginfo.x86_64 : Debug information for package php71u-pecl-apcu
    php71u-pecl-igbinary-debuginfo.x86_64 : Debug information for package php71u-pecl-igbinary
    php71u-pecl-redis-debuginfo.x86_64 : Debug information for package php71u-pecl-redis
    php71u-pecl-xdebug-debuginfo.x86_64 : Debug information for package php71u-pecl-xdebug
    sclo-php70-php-pecl-propro-devel.x86_64 : sclo-php70-php-pecl-propro developer files (header)
    sclo-php70-php-pecl-raphf-devel.x86_64 : sclo-php70-php-pecl-raphf developer files (header)
    uwsgi-plugin-php70u-debuginfo.x86_64 : Debug information for package uwsgi-plugin-php70u
    mod_php70u.x86_64 : PHP module for the Apache HTTP Server
    mod_php71u.x86_64 : PHP module for the Apache HTTP Server
    php70u-bcmath.x86_64 : A module for PHP applications for using the bcmath library
    php70u-cli.x86_64 : Command-line interface for PHP
    php70u-common.x86_64 : Common files for PHP
    php70u-dba.x86_64 : A database abstraction layer module for PHP applications
    php70u-dbg.x86_64 : The interactive PHP debugger
    php70u-devel.x86_64 : Files needed for building PHP extensions
    php70u-embedded.x86_64 : PHP library for embedding in applications
    php70u-enchant.x86_64 : Enchant spelling extension for PHP applications
    php70u-fpm.x86_64 : PHP FastCGI Process Manager
    php70u-fpm-httpd.noarch : Apache HTTP Server configuration for PHP-FPM
    php70u-fpm-nginx.noarch : Nginx configuration for PHP-FPM
    php70u-gd.x86_64 : A module for PHP applications for using the gd graphics library
    php70u-gmp.x86_64 : A module for PHP applications for using the GNU MP library
    php70u-imap.x86_64 : A module for PHP applications that use IMAP
    php70u-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases
    php70u-intl.x86_64 : Internationalization extension for PHP applications
    php70u-ioncube-loader.x86_64 : IonCube Loader provides PHP Modules to read IonCube Encoded Files
    php70u-json.x86_64 : JavaScript Object Notation extension for PHP
    php70u-ldap.x86_64 : A module for PHP applications that use LDAP
    php70u-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
    php70u-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
    php70u-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
    php70u-odbc.x86_64 : A module for PHP applications that use ODBC databases
    php70u-opcache.x86_64 : The Zend OPcache
    php70u-pdo.x86_64 : A database access abstraction module for PHP applications
    php70u-pdo-dblib.x86_64 : PDO driver Microsoft SQL Server and Sybase databases
    php70u-pear.noarch : PHP Extension and Application Repository framework
    php70u-pecl-amqp.x86_64 : Communicate with any AMQP compliant server
    php70u-pecl-apcu.x86_64 : APC User Cache
    php70u-pecl-apcu-devel.x86_64 : APCu developer files (header)
    php70u-pecl-apcu-panel.noarch : APCu control panel
    php70u-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer
    php70u-pecl-igbinary-devel.x86_64 : Igbinary developer files (header)
    php70u-pecl-imagick.x86_64 : Provides a wrapper to the ImageMagick library
    php70u-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store
    php70u-pecl-smbclient.x86_64 : PHP wrapper for libsmbclient
    php70u-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
    php70u-pgsql.x86_64 : A PostgreSQL database module for PHP
    php70u-process.x86_64 : Modules for PHP script using system process interfaces
    php70u-pspell.x86_64 : A module for PHP applications for using pspell interfaces
    php70u-recode.x86_64 : A module for PHP applications for using the recode library
    php70u-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices
    php70u-soap.x86_64 : A module for PHP applications that use the SOAP protocol
    php70u-tidy.x86_64 : Standard PHP module provides tidy library support
    php70u-xml.x86_64 : A module for PHP applications which use XML
    php70u-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
    php71u-bcmath.x86_64 : A module for PHP applications for using the bcmath library
    php71u-cli.x86_64 : Command-line interface for PHP
    php71u-common.x86_64 : Common files for PHP
    php71u-dba.x86_64 : A database abstraction layer module for PHP applications
    php71u-dbg.x86_64 : The interactive PHP debugger
    php71u-devel.x86_64 : Files needed for building PHP extensions
    php71u-embedded.x86_64 : PHP library for embedding in applications
    php71u-enchant.x86_64 : Enchant spelling extension for PHP applications
    php71u-fpm.x86_64 : PHP FastCGI Process Manager
    php71u-fpm-httpd.noarch : Apache HTTP Server configuration for PHP-FPM
    php71u-fpm-nginx.noarch : Nginx configuration for PHP-FPM
    php71u-gd.x86_64 : A module for PHP applications for using the gd graphics library
    php71u-gmp.x86_64 : A module for PHP applications for using the GNU MP library
    php71u-imap.x86_64 : A module for PHP applications that use IMAP
    php71u-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases
    php71u-intl.x86_64 : Internationalization extension for PHP applications
    php71u-json.x86_64 : JavaScript Object Notation extension for PHP
    php71u-ldap.x86_64 : A module for PHP applications that use LDAP
    php71u-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
    php71u-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
    php71u-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
    php71u-odbc.x86_64 : A module for PHP applications that use ODBC databases
    php71u-opcache.x86_64 : The Zend OPcache
    php71u-pdo.x86_64 : A database access abstraction module for PHP applications
    php71u-pdo-dblib.x86_64 : PDO driver Microsoft SQL Server and Sybase databases
    php71u-pecl-apcu.x86_64 : APC User Cache
    php71u-pecl-apcu-devel.x86_64 : APCu developer files (header)
    php71u-pecl-apcu-panel.noarch : APCu control panel
    php71u-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer
    php71u-pecl-igbinary-devel.x86_64 : Igbinary developer files (header)
    php71u-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store
    php71u-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
    php71u-pgsql.x86_64 : A PostgreSQL database module for PHP
    php71u-process.x86_64 : Modules for PHP script using system process interfaces
    php71u-pspell.x86_64 : A module for PHP applications for using pspell interfaces
    php71u-recode.x86_64 : A module for PHP applications for using the recode library
    php71u-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices
    php71u-soap.x86_64 : A module for PHP applications that use the SOAP protocol
    php71u-tidy.x86_64 : Standard PHP module provides tidy library support
    php71u-xml.x86_64 : A module for PHP applications which use XML
    php71u-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
    sclo-php70-php-pecl-apcu.x86_64 : APC User Cache
    sclo-php70-php-pecl-apcu-bc.x86_64 : APCu Backwards Compatibility Module
    sclo-php70-php-pecl-apcu-devel.x86_64 : APCu developer files (header)
    sclo-php70-php-pecl-apfd.x86_64 : Always Populate Form Data
    sclo-php70-php-pecl-http.x86_64 : Extended HTTP support
    sclo-php70-php-pecl-http-devel.x86_64 : Extended HTTP support developer files (header)
    sclo-php70-php-pecl-lzf.x86_64 : Extension to handle LZF de/compression
    sclo-php70-php-pecl-mongodb.x86_64 : MongoDB driver for PHP
    sclo-php70-php-pecl-propro.x86_64 : Property proxy
    sclo-php70-php-pecl-raphf.x86_64 : Resource and persistent handles factory
    sclo-php70-php-pecl-selinux.x86_64 : SELinux binding for PHP scripting language
    sclo-php70-php-pecl-solr2.x86_64 : Object oriented API to Apache Solr
    sclo-php70-php-pecl-uploadprogress.x86_64 : An extension to track progress of a file upload
    sclo-php70-php-pecl-uuid.x86_64 : Universally Unique Identifier extension for PHP
    sclo-php70-php-pecl-xattr.x86_64 : Extended attributes
    sclo-php70-php-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts
    uwsgi-plugin-php70u.x86_64 : uWSGI - Plugin for PHP support
    
      Name and summary matches only, use "search all" for everything

    As we can see php7 is there. Great. But what about the older php modules installed with the old php package we have already? That’s coming up next.

    Although it is an older legacy thing, pecl might have some additional things which are not shown by the package manager YUM in the above output. Check quickly that no pecl modules are used.

    # pecl list
    (no packages installed from channel pecl.php.net)

    If the output is 'no packages installed' , you don't need to worry about this. If it does, you'll want to reach out to Rackspace, as each case is different. It's hard to give a general overview, of what actions you should take on the conditional output of pecl list. As long as it says no packages installed, your good.

    Step 2. Check presence of plugin replace, we’ll use this to upgrade to mod_php70 once we’re ready

    # Locate plugin replace is available
    yum search yum-plugin-replace
    # Install yum plugin replace if available (otherwise this will not work for you as easily)
    yum install yum-plugin-replace

    Step 3. Run a mock yum replace

    # yum replace php53u --replace-with mod_php70u.x86_64
    Loaded plugins: fastestmirror, replace, versionlock
    Replacing packages takes time, please be patient...
    Loading mirror speeds from cached hostfile
    drivesrvr                                                                                                                                                                                                                                              | 2.2 kB     00:00
    Error: No Package Matching mod_php70u.x86_64
    [root@server3 ~]# yum replace php53u --replace-with mod_php70u
    Loaded plugins: fastestmirror, replace, versionlock
    Replacing packages takes time, please be patient...
    Loading mirror speeds from cached hostfile
    drivesrvr                                                                                                                                                                                                                                              | 2.2 kB     00:00
    
    WARNING: Unable to resolve all providers: ['config(php53u-common)', 'curl.so()(64bit)', 'fileinfo.so()(64bit)', 'json.so()(64bit)', 'phar.so()(64bit)', 'php-api', 'php-pecl(Fileinfo)', 'php-pecl(phar)', 'php-pecl(zip)', 'php-pecl-Fileinfo', 'php-pecl-phar', 'php-pecl-zip', 'php-zend-abi', 'php53(api)', 'php53(language)', 'php53(zend-abi)', 'php53-api', 'php53-bz2', 'php53-calendar', 'php53-common', 'php53-ctype', 'php53-curl', 'php53-date', 'php53-exif', 'php53-filter', 'php53-ftp', 'php53-gettext', 'php53-gmp', 'php53-hash', 'php53-iconv', 'php53-json', 'php53-libxml', 'php53-openssl', 'php53-pcre', 'php53-pecl(Fileinfo)', 'php53-pecl(json)', 'php53-pecl(phar)', 'php53-pecl(zip)', 'php53-pecl-Fileinfo', 'php53-pecl-json', 'php53-pecl-phar', 'php53-pecl-zip', 'php53-posix', 'php53-reflection', 'php53-session', 'php53-shmop', 'php53-simplexml', 'php53-sockets', 'php53-spl', 'php53-sqlite3', 'php53-sysvmsg', 'php53-sysvsem', 'php53-sysvshm', 'php53-tokenizer', 'php53-wddx', 'php53-zend-abi', 'php53-zip', 'php53-zlib', 'php53u(api)', 'php53u(language)', 'php53u(zend-abi)', 'php53u-api', 'php53u-bz2', 'php53u-calendar', 'php53u-ctype', 'php53u-curl', 'php53u-date', 'php53u-exif', 'php53u-fileinfo', 'php53u-filter', 'php53u-ftp', 'php53u-gettext', 'php53u-gmp', 'php53u-hash', 'php53u-iconv', 'php53u-json', 'php53u-libxml', 'php53u-openssl', 'php53u-pcre', 'php53u-pecl(Fileinfo)', 'php53u-pecl(json)', 'php53u-pecl(phar)', 'php53u-pecl(zip)', 'php53u-pecl-Fileinfo', 'php53u-pecl-json', 'php53u-pecl-phar', 'php53u-pecl-zip', 'php53u-posix', 'php53u-reflection', 'php53u-session', 'php53u-shmop', 'php53u-simplexml', 'php53u-sockets', 'php53u-spl', 'php53u-sqlite3', 'php53u-sysvmsg', 'php53u-sysvsem', 'php53u-sysvshm', 'php53u-tokenizer', 'php53u-wddx', 'php53u-zend-abi', 'php53u-zip', 'php53u-zlib', 'zip.so()(64bit)', 'php53u-common', 'php53u-common(x86-64)', 'php53-cgi', 'php53-cli', 'php53-pcntl', 'php53-readline', 'php53u-cgi', 'php53u-pcntl', 'php53u-readline', 'php53u-cli', 'php53u-cli(x86-64)', 'config(php53u-pdo)', 'pdo.so()(64bit)', 'pdo_sqlite.so()(64bit)', 'php53-pdo', 'php53-pdo-abi', 'php53-pdo_sqlite', 'php53u-pdo-abi', 'php53u-pdo', 'php53u-pdo(x86-64)', 'config(php53u-mysql)', 'mysql.so()(64bit)', 'mysqli.so()(64bit)', 'pdo_mysql.so()(64bit)', 'php-mysql', 'php53-mysql', 'php53-mysqli', 'php53u-mysqli', 'php53u-mysql', 'php53u-mysql(x86-64)', 'config(php53u)', 'libphp5.so()(64bit)', 'mod_php53u', 'php53', 'php53u', 'php53u(x86-64)', 'libphp5.so()(64bit)', 'php53-zts', 'php53u-zts', 'php53u-zts(x86-64)']
    
    This may be normal depending on the package.  Continue? [y/N] y
    Resolving Dependencies
    --> Running transaction check
    ---> Package mod_php70u.x86_64 0:7.0.14-3.ius.centos6 will be installed
    ---> Package php53u.x86_64 0:5.3.29-1.ius.centos6 will be erased
    ---> Package php53u-cli.x86_64 0:5.3.29-1.ius.centos6 will be erased
    ---> Package php53u-common.x86_64 0:5.3.29-1.ius.centos6 will be erased
    ---> Package php53u-mysql.x86_64 0:5.3.29-1.ius.centos6 will be erased
    ---> Package php53u-pdo.x86_64 0:5.3.29-1.ius.centos6 will be erased
    ---> Package php53u-pear.noarch 1:1.9.4-3.ius.centos6 will be erased
    ---> Package php53u-zts.x86_64 0:5.3.29-1.ius.centos6 will be erased
    ---> Package php70u-cli.x86_64 0:7.0.14-3.ius.centos6 will be installed
    ---> Package php70u-common.x86_64 0:7.0.14-3.ius.centos6 will be installed
    ---> Package php70u-gmp.x86_64 0:7.0.14-3.ius.centos6 will be installed
    ---> Package php70u-json.x86_64 0:7.0.14-3.ius.centos6 will be installed
    ---> Package php70u-mysqlnd.x86_64 0:7.0.14-3.ius.centos6 will be installed
    ---> Package php70u-pdo.x86_64 0:7.0.14-3.ius.centos6 will be installed
    ---> Package php70u-pear.noarch 1:1.10.1-2.ius.centos6 will be installed
    ---> Package php70u-process.x86_64 0:7.0.14-3.ius.centos6 will be installed
    ---> Package php70u-xml.x86_64 0:7.0.14-3.ius.centos6 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ==============================================================================================================================================================================================================================================================================
     Package                                                             Arch                                                        Version                                                                      Repository                                                 Size
    ==============================================================================================================================================================================================================================================================================
    Installing:
     mod_php70u                                                          x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                       2.7 M
     php70u-cli                                                          x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                       4.0 M
     php70u-common                                                       x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                       1.1 M
     php70u-gmp                                                          x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                        65 k
     php70u-json                                                         x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                        62 k
     php70u-mysqlnd                                                      x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                       221 k
     php70u-pdo                                                          x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                       115 k
     php70u-pear                                                         noarch                                                      1:1.10.1-2.ius.centos6                                                       ius                                                       362 k
     php70u-process                                                      x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                        72 k
     php70u-xml                                                          x86_64                                                      7.0.14-3.ius.centos6                                                         ius                                                       183 k
    Removing:
     php53u                                                              x86_64                                                      5.3.29-1.ius.centos6                                                         @ius                                                      4.4 M
     php53u-cli                                                          x86_64                                                      5.3.29-1.ius.centos6                                                         @ius                                                      7.9 M
     php53u-common                                                       x86_64                                                      5.3.29-1.ius.centos6                                                         @ius                                                      3.4 M
     php53u-mysql                                                        x86_64                                                      5.3.29-1.ius.centos6                                                         @ius                                                      219 k
     php53u-pdo                                                          x86_64                                                      5.3.29-1.ius.centos6                                                         @ius                                                      126 k
     php53u-pear                                                         noarch                                                      1:1.9.4-3.ius.centos6                                                        @ius                                                      2.2 M
     php53u-zts                                                          x86_64                                                      5.3.29-1.ius.centos6                                                         @ius                                                      4.6 M
    
    Transaction Summary
    ==============================================================================================================================================================================================================================================================================
    Install      10 Package(s)
    Remove        7 Package(s)
    
    Total download size: 8.8 M
    Is this ok [y/N]: N
    Exiting on user Command
    Your transaction was saved, rerun it with:
     yum load-transaction /tmp/yum_save_tx-2017-01-13-10-57L3T7JK.yumtx

    Don't say Yes. Unless your absolutely sure that all of the removing modules, are matching all of the installing. The reason is, applications using PHP might require some of those modules. In this case, we can see the php53u-zts is no longer provided by php70u. (note the u indicates the package is within the IUS repository and is not the 'official Redhat/CentOS repo').

    When your happy, type 'Y' for yes.


    In this case, I needed to check what php-ZTS does.

    Checking out which modules are required

    Google is your friend. If you don't know what the package does, google it. That's what I did. Naturally, if you are satisfied that you do not need php53u-zts, the only php module which is not supported by PHP7 shown from the output above, then you can proceed.

    If you are wondering what ZTS is, The php-zts package contains a module for use with the Apache HTTP
    Server which can operate under a threaded server processing model. (source pbone.net CentOS REPO)

    ZTS is not required for MPM prefork, and is generally only used with MPM worker, afaik. So as long as your using prefork apache httpd your fine;

    # apachectl -l
    Compiled in modules:
      core.c
      prefork.c
      http_core.c
      mod_so.c
    

    As you can see prefork is being used, not MPM worker. So , we most likely don't need ZTS because php-zts is not used by prefork php.

    Final step - restart httpd (apache2)

    Now we've upgraded php5.3 to php5.7, by running step 3 and choosing yes, the only thing left is restart apache2, so that the new php configuration pushed to httpd configuration is applied. First though, it might be a good idea to check the syntax of the configuration is OK.

    Sometimes a technician or user of the server might have altered the httpd without restarting the service, this could mean that the restart of apache httpd could fail, as a result of a previous change that had nothing to do with the upgrade.

    # Test apache configuration is Syntax OK
    apachectl -t
    
    # If SYNTAX OK returned you can restart apache2 httpd safely
    /etc/init.d/httpd restart
    

    Any questions or concerns, please don't hesitate to reach out to us, we are here to help!

    Cheers &
    Best wishes,
    Adam

     

     

  • It also would be worth to mention to take backups of main files such as Apche configuration files and PHP before proceeding with the upgrade.

    Few times I came across modules installed from PECL, so it would also be reasonable to check it before by running "pecl list" command.

    As a good habit I also save list of installed rpm's before upgrading them, so in case of rollback I know what to install

  • Hi Michal,

    Thanks for the very pertinent suggestions. I've revised the article to include some detail about pecl list, and also included some detail about backing up /etc/httpd as well as the php.ini used by the webserver.

    Please let me know if there is anything else you think could be added to this one chap!

    Cheers &
    Best wishes,
    Adam