Atualizando o PHP e instalando bibliotecas no modo não interativo

3

Problema

Estou tentando instalar php 5.5 e php5-memcached para minha máquina que tem o php 5.3 pré-instalado. Além disso, não posso alterar a configuração padrão, pois é a caixa de teste fornecida para o CI. Portanto, vamos supor que o php 5.3 esteja pré-instalado e que não seja alterado.

Então, primeiro eu tento instalar o php, depois o 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

O importante é que os comandos acima são invocados pelo executor de compilação, portanto, não é um modo "interativo", pois não existe um "usuário" que esteja cuidando da instalação.

O problema é que por causa do php 5.3 existente estou recebendo:

(B)0Package configuration┌──────────────────────┤ Modified configuration file ├──────────────────────┐│ A new version of configuration file /etc/php5/cli/php.ini is available, ││ but the version installed currently has been locally modified.││││ What do you want to do about modified configuration file php.ini?││││install the package maintainer's version││keep the local version currently installed ││show the differences between the versions││show a side-by-side difference between the versions││start a new shell to examine the situation│││││││││└───────────────────────────────────────────────────────────────────────────┘

Isso porque ele encontrou alguns arquivos de configuração modificados. E a questão é - posso de alguma forma forçar que seja sobrescrito? Como você pode ver, eu já tentei -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-overwrite" sem nenhum sucesso (suponho que isso seja porque esse "diálogo" não está relacionado ao dpkg). O problema com este "diálogo" é, obviamente, o fato de que todos os comandos de configuração são invocados dentro do contêiner do CI, e não há "usuário" que possa fazer qualquer "ação" - deve ser uma execução completamente automática.

Mais uma vez,

Pergunta : Como posso forçar a sobrescrever qualquer configuração neste caso? Ou então, como posso atingir o objetivo inicial e atualizar o php de 5.3 para 5.5 e, em seguida, instalar o php5-memcached?

    
por Alma Do 17.04.2015 / 10:53

1 resposta

0

A mensagem em questão não está relacionada a dpkg e, portanto, não é possível controlá-la com dpkg opções. Existem duas opções viáveis que encontrei:

  • Primeiro, reinstale completamente o PHP: primeiro remova o PHP 5.3 e depois instale o 5.5 em "blank system". No meu caso, esta não é uma boa solução, já que remover o PHP 5.3 levará muito tempo (mais de 500.000 arquivos e cheques correspondentes)
  • Em segundo lugar, use phpenv e php-build para gerenciar diferentes ambientes PHP sem tocar no atual. Por padrão, ele é fornecido com a extensão pyrus , que é para pyrus gerenciador de pacotes, que permite para usá-lo. Para o php-memcached eu usei simplesmente como:

    pyrus install pecl/memcached-2.1.0
    pyrus build pecl/memcached-2.1.0
    phpenv rehash
    

    Note que pyrus install pecl/memcached pode falhar em algumas versões do PHP, portanto, é mais seguro que a compilação especifique determinada versão do PHP. Este método com pyrus permitirá instalar qualquer pacote disponível para pyrus . Se você ainda precisa de algo personalizado (eu precisava de phalcon), você pode construí-lo com uma compilação personalizada, como:

    #!/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
    

    onde --enable-extension , "extension.so" etc. você precisa substituir sua extensão compilada.

Como você pode ver, essa não é uma forma direta de resolver um problema, mas ainda corresponde a uma meta de configuração de CI totalmente automática, permitindo a criação de qualquer ativação de configuração / extensão de versões do PHP para essas construções.

P.S. Se alguém encontrar uma maneira de superar a mensagem na pergunta, essa será a "terceira opção", mas não acredito que seja possível com dpkg tools.

    
por 20.04.2015 / 09:25