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