Linux – How to install PHP 5.6 redis extension on Ubuntu 14

linuxPHPubuntu-14.04

We used to install PHP's Redis extension using PECL. But it seems PECL has dropped support for this for PHP versions less than 7.0. What's the best way to do this without PECL? We're on Ubuntu 14.x running PHP 5.6

ubuntu@box776:~$ pecl help version
PEAR Version: 1.10.1
PHP Version: 5.6.18
Zend Engine Version: 2.6.0
Running on: Linux box776.localdomain 3.13.0-86-generic #131-Ubuntu SMP Thu May 12 23:33:13 UTC 2016 x86_64

Update 1

$ sudo apt-get install php5-redis

Reading package lists... 0%
Reading package lists... 0%
Reading package lists... 0%
Reading package lists... 0%
Reading package lists... 0%
Reading package lists... 0%
Reading package lists... 41%
Reading package lists... Done


Building dependency tree... 50%
Building dependency tree       


Reading state information... Done

The following package was automatically installed and is no longer required:
  os-prober
Use 'apt-get autoremove' to remove it.
The following NEW packages will be installed:
  php5-redis
0 upgraded, 1 newly installed, 0 to remove and 59 not upgraded.
Need to get 105 kB of archives.
After this operation, 359 kB of additional disk space will be used.


0% [Working]Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe php5-redis amd64 2.2.4-1build2 [105 kB]

13% [1 php5-redis 14.2 kB/105 kB 13%]Fetched 105 kB in 0s (264 kB/s)
Selecting previously unselected package php5-redis.
(Reading database ... 
(Reading database ... 10%
(Reading database ... 25%
(Reading database ... 40%
(Reading database ... 303857 files and directories currently installed.)
Preparing to unpack .../php5-redis_2.2.4-1build2_amd64.deb ...
Unpacking php5-redis (2.2.4-1build2) ...
Setting up php5-redis (2.2.4-1build2) ...
php5_invoke: Enable module redis for apache2 SAPI
php5_invoke: Enable module redis for cli SAPI

This all seems to go swimmingly, but then composer install says:

$ composer install --no-interaction

You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested PHP extension ext-redis * is missing from your system. Install or enable PHP's redis extension.


composer install --no-interaction returned exit code 2

Action failed: composer install

Update 2

I SSHed into the box and ran the same command…

ubuntu@box776:~$ apt-get install php5-redis
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
ubuntu@box776:~$ sudo apt-get install php5-redis
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  os-prober
Use 'apt-get autoremove' to remove it.
The following NEW packages will be installed:
  php5-redis
0 upgraded, 1 newly installed, 0 to remove and 59 not upgraded.
Need to get 105 kB of archives.
After this operation, 359 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe php5-redis amd64 2.2.4-1build2 [105 kB]
Fetched 105 kB in 0s (274 kB/s)
Selecting previously unselected package php5-redis.
(Reading database ... 303857 files and directories currently installed.)
Preparing to unpack .../php5-redis_2.2.4-1build2_amd64.deb ...
Unpacking php5-redis (2.2.4-1build2) ...
Setting up php5-redis (2.2.4-1build2) ...
php5_invoke: Enable module redis for apache2 SAPI
php5_invoke: Enable module redis for cli SAPI

I wonder if those last two lines are what I'm missing? Is it telling me I need to take additional steps to "enable module redis"?

Best Answer

CircleCI loads and configures PHP from its own location: /opt/circleci/php/{version}. We solved the posted problem by installing php-redis via APT and then wiring CircleCI's version of PHP up to the APT-installed files. It looks like this in our circle.yml file:

dependencies:
  pre:
    # Set up php-redis.
    # The PHPAPI version (20131226) needs to match.
    # If we start using a different version of PHP this section may need to be updated.
    - sudo apt-add-repository -y ppa:ondrej/php
    - sudo apt-get update
    - sudo apt-get install php-redis
    - echo 'extension=/usr/lib/php/20131226/redis.so' | sudo tee /opt/circleci/php/5.6.17/etc/conf.d/redis.ini
    - echo 'extension=/usr/lib/php/20131226/igbinary.so' | sudo tee /opt/circleci/php/5.6.17/etc/conf.d/igbinary.ini

This broke again recently when CircleCI started running Composer with php -n, which declines to load a configuration file for PHP and thus ignores the above change. But you can override the Composer command with your own. We added this to circle.yml:

dependencies:
  override:
    # CircleCI's new method of running composer breaks our php-redis setup below.
    - composer install --no-interaction