问题
我正在尝试安装php 5.5
并php5-memcached
安装到已预装 php 5.3 的机器上。此外,我无法更改默认配置,因为它是为 CI 提供的暂存箱。因此,我们假设已预装 php 5.3,并且可以不是被改变。
因此,我首先尝试安装 php,然后安装 php-memcached:
sudo apt-get update
sudo apt-get -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-overwrite" install -y php5
sudo apt-get -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-overwrite" install -y php5-memcached
重要的是,上述命令由构建运行器调用,因此,它不是“交互”模式,因为没有负责安装的“用户”。
问题是由于现有的 php 5.3 我得到了:
A new version of configuration file /etc/php5/cli/php.ini is available, but the version installed currently has been locally
modified.
1. install the package maintainer's version 3. show the differences between the versions 5. start a new shell to examine the situation
2. keep the local version currently installed 4. show a side-by-side difference between the versions
这是因为它发现了一些修改过的配置文件。问题是 - 我能以某种方式强制覆盖它吗?如您所见,我已经尝试过但-o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-overwrite"
没有成功(我想这是因为这个“对话框”与 dpkg 无关)。这个“对话框”的问题显然在于,事实上,所有设置命令都是从 CI 容器内部调用的,并且没有可以执行任何“操作”的“用户” - 它应该是完全自动执行的。
再次,
问题:在这种情况下,我如何强制覆盖任何配置?否则,我如何实现初始目标并将 php 从 5.3 升级到 5.5,然后安装 php5-memcached?
答案1
有问题的消息与此无关dpkg
,因此无法通过dpkg
选项来控制它。我发现有两个可行的选择:
- 首先,完全重新安装 PHP:先删除 PHP 5.3,然后在“空白系统”上安装 5.5。就我而言,这不是一个好的解决方案,因为删除 PHP 5.3 将花费很长时间(超过 500,000 个文件和相应的检查)
二、使用
phpenv
和php-build
用于管理不同的 PHP 环境,而无需触及当前安装的环境。默认情况下,它附带pyrus
扩展,用于pyrus
数据包管理器,允许使用它。对于 php-memcached,我简单地使用它:pyrus install pecl/memcached-2.1.0 pyrus build pecl/memcached-2.1.0 phpenv rehash
请注意,
pyrus install pecl/memcached
在某些 PHP 版本上可能会失败,因此,为构建指定特定版本的 PHP 更为安全。此方法pyrus
将允许安装任何可用的包pyrus
。如果您仍然需要自定义的东西(我需要 phalcon),您可以使用自定义编译来构建它,例如:#!/bin/bash PHPVERSION=$1 # get the extension via wget, for example # cd to extension directory # Perform the compilation ~/.phpenv/versions/$PHPVERSION/bin/phpize ./configure --with-php-config=/home/ubuntu/.phpenv/versions/$PHPVERSION /bin/php-config --enable-extension make && make install echo "extension=extension.so" > ~/.phpenv/versions/$PHPVERSION/etc/conf.d/extension.ini
其中
--enable-extension
,"extension.so"
等等,您需要用编译的扩展进行替换。
如您所见,这不是解决问题的直接方法,但它仍然符合全自动 CI 构建的目标,允许为此类构建创建任何 PHP 版本设置/扩展启用。
PS:如果有人能找到一种方法来克服问题中的信息,这将是“第三”个选项,但我不相信使用dpkg
工具可以实现。