在Ubuntu 14.04上安装的PHP 7现在由于无法解析的libssl依赖而失败了吗?

时间:2017-07-06 11:21:40

标签: php ubuntu docker ubuntu-14.04 php-7

我正在使用shippable来构建我的项目,其中一部分需要PHP。

构建脚本是这样的:

apt-get update
apt-get install -y software-properties-common python-software-properties language-pack-en-base
LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
apt-get update
apt-get install -y php7.0 php7.0-bcmath

今天在安装PHP时构建失败并出现以下错误:

apt-get install -y php7.0 php7.0-bcmath

Reading package lists...
Building dependency tree...
Reading state information...
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:
 php7.0 : Depends: libapache2-mod-php7.0 but it is not going to be installed or
                   php7.0-fpm but it is not going to be installed or
                   php7.0-cgi but it is not going to be installed
          Depends: php7.0-common but it is not going to be installed
 php7.0-bcmath : Depends: php7.0-common but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

所以我启动了一个本地的docker容器,看看是否在shippable上发生了一些奇怪的事情 - 使用以下命令:

docker run -i -t ubuntu:14.04 /bin/bash

并运行上面列出的5条构建行,我得到了同样的错误。我做的下一件事是安装aptitude以查看我是否可以获得更好的错误,并运行此aptitude install -y php7.0 php7.0-bcmath - 这是aptitude输出:

aptitude install -y php7.0 php7.0-bcmath
The following NEW packages will be installed:
  apache2{a} apache2-bin{a} apache2-data{a} libapache2-mod-php7.0{ab} 
  libapr1{a} libaprutil1{a} libaprutil1-dbd-sqlite3{a} libaprutil1-ldap{a} 
  libedit2{a} php-common{a} php7.0 php7.0-bcmath php7.0-cli{ab} 
  php7.0-common{ab} php7.0-json{a} php7.0-opcache{a} php7.0-readline{a} 
  psmisc{a} ssl-cert{a} 
0 packages upgraded, 19 newly installed, 0 to remove and 7 not upgraded.
Need to get 4950 kB of archives. After unpacking 20.2 MB will be used.
The following packages have unmet dependencies:
 php7.0-cli : Depends: libssl1.1 (>= 1.1.0) which is a virtual package.
 php7.0-common : Depends: libssl1.1 (>= 1.1.0) which is a virtual package.
 libapache2-mod-php7.0 : Depends: libssl1.1 (>= 1.1.0) which is a virtual package.
The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     libapache2-mod-php7.0 [Not Installed]              
2)     php7.0 [Not Installed]                             
3)     php7.0-bcmath [Not Installed]                      
4)     php7.0-cli [Not Installed]                         
5)     php7.0-common [Not Installed]                      
6)     php7.0-json [Not Installed]                        
7)     php7.0-opcache [Not Installed]                     
8)     php7.0-readline [Not Installed]                    



The following NEW packages will be installed:
  psmisc{a} 
0 packages upgraded, 1 newly installed, 0 to remove and 7 not upgraded.
Need to get 53.2 kB of archives. After unpacking 229 kB will be used.
Get: 1 http://archive.ubuntu.com/ubuntu/ trusty/main psmisc amd64 22.20-1ubuntu2 [53.2 kB]
Fetched 53.2 kB in 0s (911 kB/s)
Selecting previously unselected package psmisc.
(Reading database ... 14894 files and directories currently installed.)
Preparing to unpack .../psmisc_22.20-1ubuntu2_amd64.deb ...
Unpacking psmisc (22.20-1ubuntu2) ...
Setting up psmisc (22.20-1ubuntu2) ...

我有几个问题:

1)我该如何解决这个问题?我做了一些看,但无法解决如何更新libssl

2)为什么会突然发生这种情况,以前这对PHP7.0来说从来都不是问题?

其他一些信息:

openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Mon Jan 30 20:38:38 UTC 2017
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) 
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/lib/ssl"

uname -a
Linux b5cbe94d7da8 4.9.13-moby #1 SMP Sat Mar 25 02:48:44 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

1 个答案:

答案 0 :(得分:3)

PPA维护者已经修复了'这,according to a GitHub issue

回答你的问题:

  

1)我该如何解决这个问题?我已经做了一些看,但无法解决如何更新libssl

PPA已经修复,但下次请在适当的地方填写问题 - 例如issue tracker

  

2)为什么会突然发生这种情况,这对PHP7.0来说从来都不是问题?

ppa:ondrej/php build中的包依赖于最近更新到OpenSSL 1.1.0库的ppa:ondrej/apache2,而这些包是由最新版本的PHP获取的。 ppa:ondrej/php必须使用OpenSSL 1.1.0库进行更新,以及此举的结果。

偶尔会发生一两个错误,只要在相应位置填充错误就会修复错误。

即使在相同的二进制文件中混合使用更多版本的OpenSSL也是完全安全的,因为OpenSSL使用正确的SONAME并且共享库中的所有符号都是versioned