Amazon web services Codebuild未安装PHP软件包

Amazon web services Codebuild未安装PHP软件包,amazon-web-services,aws-codebuild,Amazon Web Services,Aws Codebuild,到今天为止,我的代码构建一直运行良好。它失败,出现以下错误: Reading state information... E: Unable to locate package php7.1 E: Couldn't find any package by regex 'php7.1' E: Unable to locate package php7.1-xml E: Couldn't find any package by regex 'php7.1-xml' E: Unable to

到今天为止,我的代码构建一直运行良好。它失败,出现以下错误:

Reading state information... 
E: Unable to locate package php7.1 
E: Couldn't find any package by regex 'php7.1' 
E: Unable to locate package php7.1-xml 
E: Couldn't find any package by regex 'php7.1-xml' 
E: Unable to locate package php7.1-xmlrpc 
E: Couldn't find any package by regex 'php7.1-xmlrpc' 
E: Unable to locate package php7.1-zip 
E: Couldn't find any package by regex 'php7.1-zip' 
E: Unable to locate package php7.1-mysql 
E: Couldn't find any package by regex 'php7.1-mysql' 
E: Unable to locate package php7.1-mbstring 
E: Couldn't find any package by regex 'php7.1-mbstring' 
E: Unable to locate package php7.1-mcrypt 
E: Couldn't find any package by regex 'php7.1-mcrypt' 
E: Unable to locate package php7.1-gd 

可能是什么问题? 请注意,构建与此设置配合得很好。buildspec文件中没有更改

这就是我所尝试的:

version: 0.2
phases:
 install:
   commands:
     - |

         apt-get install -y software-properties-common

         export DEBIAN_FRONTEND=noninteractive
         apt-get update

         LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php


我希望php软件包能像以前一样正常安装。

这是我在Ubuntu 14.04上使用的基本映像的问题。Ubuntu14.04 LTS于2019年4月结束支持,从ondrej存储库中没有与Ubuntu14.04匹配的repo文件夹


我不得不将我的基本映像切换到aws/codebuild/standard:2.0,这解决了我的问题。

当您切换到aws/codebuild/standard:2.0时,它为您提供了Ubuntu 18。您还必须提供一个运行时,如

phases:
  install:
    runtime-versions:
      php: 7.3
我发现AWS将其PHP ini放在/usr/local/etc/PHP/conf.d/中,但当您安装扩展时,ini会放在/etc/PHP/7.3/cli/PHP.ini中-因此您必须将非标准加入到标准中,以便找到扩展文件

可以通过将标准路径添加到ini文件来解决此问题,如下所示:

touch /usr/local/etc/php/conf.d/extra_config.ini
echo extension_dir="/usr/lib/php/20180731/" >> /usr/local/etc/php/conf.d/extra_config.ini
echo extension=gd.so >> /usr/local/etc/php/conf.d/extra_config.ini
Running command php -m
最终的buildspec.yml如下所示(带有一些调试,以便您可以查看之前和之后的内容,以及额外的_config.ini的内容):

phases:
  install:
    runtime-versions:
      php: 7.3
    commands:
      - php -v
      - php -m
      - lsb_release -a
      - LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
      - apt-get update -y
      - apt-get install -y php7.3-gd  php7.3-xdebug
      - ls /usr/lib/php/20180731
      - touch /usr/local/etc/php/conf.d/extra_config.ini
      - "echo extension_dir=\"/usr/lib/php/20180731/\" >> /usr/local/etc/php/conf.d/extra_config.ini"
      - "echo extension=gd.so >> /usr/local/etc/php/conf.d/extra_config.ini"
      - "echo zend_extension=xdebug.so >> /usr/local/etc/php/conf.d/extra_config.ini"  
      - cat /usr/local/etc/php/conf.d/extra_config.ini
      - php -m

我要更新这个问题,因为这里接受的答案似乎对我不起作用,即使它起作用了,这也是一个非常脆弱的解决方案。AWS为Ubuntu 18.04(v2)验证的PHP安装似乎是从源代码以及所有其他受支持的“运行时版本”编译而成的然后转储到/usr/local中。如果查看此文件夹,您会立即注意到您获得了所有运行时版本,而不管您在buildspec文件中指定了哪个版本。这就引出了一个问题,为什么运行时版本是必需的,甚至包括在buildspec文件中?我假设AWS这样做是为了假装他们有mo重新设计功能和更复杂的系统

那么,如何获得PHP的工作版本呢?以下是我正在使用的buildspec.yml文件的一部分。您可以选择任何想要的运行时版本,我们已经确定该参数没有任何作用。然后您需要删除/usr/local/bin中包含的所有PHP垃圾AWS,因为该位置位于/usr/bin之前e环境路径。我假设亚马逊这样做是为了使这个过程变得尽可能困难。现在路径中不再有PHP,您可以通过
apt get install-y php7.2-cli php7.2-zip
安装PHP的package Manager版本。最后,不要忘了为ensur安装的模块运行
phpenmod
e它们已启用

version: 0.2

run-as: root

phases:
  install:
    runtime-versions:
      nodejs: 8
    commands:
      - rm -f /usr/local/bin/php*
      - rm -f /usr/local/bin/phar*
      - rm -f /usr/local/bin/pear*
      - rm -f /usr/local/bin/pecl*
      - apt-get update
      - apt-get upgrade -y
      - apt-get install -y php7.2-cli php7.2-zip
      - phpenmod zip

这是一个奇怪的情况@AlexBarker-AWS说“构建是开源的,所以你可以看到它是如何工作的”。一旦我们得到Ubuntu19,他们就会去更改目录,这给我们大家带来了极大的不便。我在这里尝试了你的解决方案,但是这个/usr/lib/php lib文件夹不在那里…find/-name simplexml.so-print什么都没有返回。它没有要获得可用的PHP安装,唯一的方法是使用NodeJS运行时,即使您不需要它,也可以通过包管理器手动安装PHP或滚动您自己的容器。运行命令touch/usr/local/bin/PHP/conf.d/extra_config.ini时出错
touch:cannot touch'/usr/local/bin/PHP/conf.d/extra_config.ini':没有这样的文件或目录
@AnkitSharma我也遇到了同样的错误。我的buildspec文件在过去6个月里一直在处理这个问题。@Majid我能够通过代码构建->应用->编辑环境->覆盖图像并选择“aws/codebuild/standard:2.0-1.12.0”而不是“始终为此运行时版本使用最新映像"因此,它与新的图像版本中断,但在旧版本上工作。很糟糕,这是唯一能让它工作的方法,但其他方法对我来说都不起作用,所以我想我会这样做。我最终直接使用ubuntu:bionic容器,并将其连接到AWS,这比试图让他们的机器图像做任何事情都要简单seful。我是在aws/codebuild/standard:2.0上得到这个的。但后来我转到了aws/codebuild/standard:4.0(已经有一段时间了),删除了@sixfive提到的hack,它现在可以工作了。
version: 0.2

run-as: root

phases:
  install:
    runtime-versions:
      nodejs: 8
    commands:
      - rm -f /usr/local/bin/php*
      - rm -f /usr/local/bin/phar*
      - rm -f /usr/local/bin/pear*
      - rm -f /usr/local/bin/pecl*
      - apt-get update
      - apt-get upgrade -y
      - apt-get install -y php7.2-cli php7.2-zip
      - phpenmod zip