Проблема
Я пытаюсь установить 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 я получаю:
(B) 0Конфигурация пакета──────────────────────── Измененный файл конфигурации ├────────────────── ─────┐│ Доступна новая версия файла конфигурации /etc/php5/cli/php.ini, ││ но установленная в настоящее время версия была изменена локально. Что вы хотите сделать с измененным файл конфигурации php.ini? установить версию сопровождающего пакета? сохранить текущую локальную версию? показать различия между версиями? показать параллельную разницу между версиями? запустить новую оболочку. изучить ситуацию │││││││││└─────────────────────────────────────── ─────────────────────────────────────────
Это потому, что он нашел какой-то измененный файл конфигурации. И вопрос - а можно как-нибудь заставить его перезаписать? Как видите, я уже пробовал -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-overwrite"
без всякого успеха (я полагаю, это потому, что этот «диалог» не имеет отношения к dpkg). Проблема с этим «диалоговым окном», очевидно, состоит в том, что все команды настройки вызываются из контейнера CI, и нет «пользователя», который мог бы выполнять какое-либо «действие» - это должно быть полностью автоматическое выполнение.
Очередной раз,
Вопрос: Как в таком случае принудительно перезаписать какие-либо конфиги? Или иначе, как я могу достичь первоначальной цели и обновить php с 5.3 до 5.5, а затем установить php5-memcached?
Данное сообщение не имеет отношения к dpkg
и поэтому его невозможно контролировать с помощью dpkg
параметры. Я нашел два жизнеспособных варианта:
Во-вторых, используйте 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, разрешающие установку / расширение для таких сборок.
P.S. Если кто-то найдет способ обойти сообщение в вопросе, это будет «третий» вариант, но я не верю, что это возможно с dpkg
инструменты.