Назад | Перейти на главную страницу

Обновление PHP и установка библиотек в неинтерактивном режиме

Проблема

Я пытаюсь установить 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 параметры. Я нашел два жизнеспособных варианта:

  • Сначала полностью переустановите 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, разрешающие установку / расширение для таких сборок.

P.S. Если кто-то найдет способ обойти сообщение в вопросе, это будет «третий» вариант, но я не верю, что это возможно с dpkg инструменты.