Recently I had to upgrade PHP version on the build server based on Ubuntu 12.04 LTS to PHP 5.6 At that moment there was PHP 5.5 installed on the server. Everything should have been as easy and promising as described, for example, in this post. Yes, it was going well to the moment
sudo apt-get dist-upgrade
Then dpkg claimed unmet dependencies… You know, as usual. I decided — f…k it, I will remove existing php and everything related. Simple removal with
sudo apt-get remove php*
did not work fine and stuck on removing phpmyadmin.
That guysexited with an error code 10 being reported from its post-remove script. After pretty short googling, I found the solution which worked for me.
The similar shit happened with php5-imagick package, so the solution I used was similar to phpmyadmin removal. Afterwards, I checked for presence anything starting with or inlcuding php:
sudo dpkg -l | grep php
Everything was clean. OK, here we go…
sudo apt-get clean && sudo apt-get autoclean
sudo apt-get udpate && sudo apt-get upgrade && sudo apt-get dist-upgrade
…and still the same error in result:
Reading package lists… Done Building dependency tree Reading state information… Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: php5 : Depends: libapache2-mod-php5 (>= 5.6.16+dfsg-2+deb.sury.org~precise+1~) but it is not going to be installed or libapache2-mod-php5filter (>= 5.6.16+dfsg-2+deb.sury.org~precise+1~) but it is not going to be installed or php5-cgi (>= 5.6.16+dfsg-2+deb.sury.org~precise+1~) but it is not going to be installed or php5-fpm (>= 5.6.16+dfsg-2+deb.sury.org~precise+1~) but it is not going to be installed E: Unable to correct problems, you have held broken packages.
I tried install with -f flag, package-by-package. Nothing worked. The final unmet dependency was:
sudo apt-get -f install php5-json
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
php5-json : Depends: phpapi-20121212
E: Unable to correct problems, you have held broken packages.
And here I stuck, as googling at this point didn’t help me at all… I visited the home of php5.6 PPA hoping to find something there. And a brilliant idea came to my mind — I should check APT’s sources list! I saw this files inside /etc/apt/sources.list.d:
/etc/apt/sources.list.d$ ll
total 32
drwxr-xr-x 2 root root 4096 Jan 5 11:12 ./
drwxr-xr-x 6 root root 4096 Jan 5 11:11 ../
-rw-r--r-- 1 root root 138 Jan 5 10:32 chris-lea-node_js-precise.list
-rw-r--r-- 1 root root 138 Jan 5 10:32 chris-lea-node_js-precise.list.save
-rw-r--r-- 1 root root 60 Jan 5 10:32 nginx-stable-lucid.list
-rw-r--r-- 1 root root 60 Jan 5 10:32 nginx-stable-lucid.list.save
-rw-r--r-- 1 root root 134 Jan 5 10:32 ondrej-php5-5_6-precise.list
-rw-r--r-- 1 root root 134 Jan 5 10:32 ondrej-php5-5_6-precise.list.save
-rw-r--r-- 1 root root 126 Jan 5 10:32 ondrej-php5-precise.list
-rw-r--r-- 1 root root 126 Jan 5 10:32 ondrej-php5-precise.list.save
I realised, the problem could be that packages were overwritten from older php-5.5, which apparently was installed manually to the server some time earlier. Once I removed these two files:
ondrej-php5-precise.list ondrej-php5-precise.list.save
and updated apt one more time, I was able to install PHP 5.6 as usual:
sudo apt-get install php5
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
shtool libc-client2007e node-node-uuid libicu52 libicu48 libv8-3.7.12.22 libmcrypt4 libt1-5 mlock libssl-dev libvpx1 libssl-doc zlib1g-dev libgd3 libev4 libv8-dev libc-ares2 libev-dev
libc-ares-dev
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
libapache2-mod-php5 php5-cli php5-json php5-readline
Suggested packages:
php-pear
The following NEW packages will be installed:
libapache2-mod-php5 php5 php5-cli php5-json php5-readline
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 5,575 kB of archives.
After this operation, 18.9 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
The main idea of this story, before adding new custom repository for PHP, make sure you removed any other old ones! Good luck and happy coding!