PHP 安装在干净的 Amazon Linux AMI 上

Tre*_*r Z 5 php amazon-ec2 amazon-web-services

我正在尝试编写一个脚本,以便使用 php55 和 Amazon PHP sdk 启动新的 Amazon Linux EC2 实例。但是,我遇到了一个我认为是由 PHP 版本冲突引起的问题。我认为 yum 在这种情况下是如何工作的,我缺少一些东西。

归结为最简单的情况,如果我运行:

yum install -y httpd24 php55 php-amazon-sdk2
Run Code Online (Sandbox Code Playgroud)

我收到“错误:php55-common 与 php-common-5.3.29-1.7.amzn1.x86_64 冲突

但是,如果我运行:

yum install -y httpd24 php55
Run Code Online (Sandbox Code Playgroud)

然后分别运行:

yum install -y php-amazon-sdk2
Run Code Online (Sandbox Code Playgroud)

它工作得很好。需要明确的是,当我运行这些命令时,系统上根本没有 PHP 版本,所以它与已经存在的东西没有冲突。

我对 yum 依赖项的工作方式不是很熟悉,但这似乎表明 php-amazon-sdk2 对 php55 很好,但由于某种原因,如果我同时安装它,它会试图强制 php53。解决此问题的正确方法是什么(意思是,我不想只是强制安装它,忽略依赖项,但我也不想在单独的步骤中执行这些操作)?

小智 8

这是由于 Amazon Linux 上 RPM/YUM 的限制,以及 php 多个版本的打包方式。Amazon Linux 的特点之一是有多种语言和其他开源软件包的多个版本。在许多情况下,这些软件包必须相互冲突,因为该软件不是为同时安装而设计的。

在这种情况下,发生的事情是每个 php 包都有一个通用的提供(即 php php54 和 php55 都提供 php)。php-amazon-sdk2 只需要 php,这是通过在 yum 命令行上指定 php55 包来满足的。冲突错误来自 php-guzzle-Guzzle 包,它需要 php-common。在这种情况下,如果您在安装 php-amazon-sdk2 软件包时将 php55-common 添加到您的 yum 命令中,它将成功。

yum install -y httpd24 php55 php55-common php-amazon-sdk2
Run Code Online (Sandbox Code Playgroud)

通常,在 Amazon Linux AMI 上,如果您遇到与 php 的冲突错误,解决方法是将正确的版本包添加到 yum 命令行。在这种情况下,报告的冲突是 php-common。你知道你想安装 php55,所以这只是告诉 yum 你想要什么(即我想要 php55-common,而不是 php-common)。如果你安装了一个需要 php 的包,并且你没有指定任何其他的 php 包,那么 yum 会选择通用的 php 包,并且会安装 PHP 5.3。这些冲突错误通常是 php54 和 php55 包的问题。

我同意这项工作并不直观,Amazon Linux AMI 团队已经注意到这个问题。他们正在探索针对此问题的几种不同解决方案。他们对 php 打包和一般的 Amazon Linux AMI 的反馈非常开放。他们确实监控 aws 论坛,因此这将是发布问题的最佳场所。如果您有 AWS Premium Support,则可以向他们开立案例,并将其转发给 Amazon Linux AMI 团队。

谢谢,希思

  • 该死的好第一个答案。欢迎来到本站! (3认同)