Como fazer update sem afetar PHP5 compilado ?

Iniciado por zaptool, 18 de Março de 2015, 14:56

tópico anterior - próximo tópico

zaptool

Olá galera !!! 

Meu primeiro tópico aqui ... 

Vamos lá .. .tenho um servidor WEB com ubuntu 14.04, houve a necessidade de se utilizar o php5 compilado para manter todo o ambiente da empresa padronizado em uma versão.

Para poder compilar o php5 depois de alguns problemas, tive a necessidade de satisfazer diversas dependências utilizando o recurso "sudo apt-get build-dep php5", depois disso compilei normalmente o meu php e passei a utiliza-lo nas estações dos desenvolvedores e também nos servidores.

1º problema, sempre que um desenvolvedor faz um update na estação, ferra com a minha compilação, o update enfia outro php mais atual por cima, quando ocorre isso, sou obrigado a recompilar o php.

2º problema, por este motivo tenho evitado atualizar os servidores e isso não é bacana.

Pergunta, como faço para configurar o update para atualizar o S.O com excessão do PHP5 ?


agradeço muito pela ajuda

Felix

Fiquei curioso a respeito do problema e fui pesquisar, encontrei neste link, mas ainda não testei, dê um feedback depois para nós, já que você precisa testar isso:


Citar
3.10 Como manter versões específicas de pacotes instaladas (complexo)

Algumas vezes você fez uma modificação em um programa e não tem tempo ou vontade de portar aquelas mudanças para um versão nova do programa. Então você "prega" a versão que você tem instalada para que não seja feita a atualização. Ou você acaba de atualizar sua distribuição Debian para a 3.0 mas quer continuar com um certo pacote da 2.2.

É para esse propósito que serve o "pinning". A utilização desse recurso é simples. Basta editar o arquivo /etc/apt/preferences.

O formato é simples:

     Package: <pacote>
     Pin: <definição do pin>
     Pin-Priority: <prioridade do pin>

Cada entrada deve ser separada de qualquer outra por uma linha em branco. Por exemplo, para manter o pacote sylpheed que eu modifiquei para aceitar "responder para a lista" na versão 0.4.99, eu adiciono:

     Package: sylpheed
     Pin: version 0.4.99*

Note que eu usei um * (asterisco). Isso serve para dizer que quero que esse "pin" sirva para todas as versões que comecem com 0.4.99. Isso porque o Debian versiona seus pacotes com uma "revisão Debian" e eu não quero impedir essas revisões de entrar. Ou seja, as versões 0.4.99-1 e 0.4.99-10 seriam instaladas a partir do momento em que existissem. Se você modificou uma versão do pacote você não vai querer que isso aconteça assim, no entanto.

A prioridade do pin ajuda a determinar se um pacote que case com as linhas "Packages:" e "Pin:" será instalado, com as prioridades maiores aumentando a possibilidade de que isso aconteça. Você pode ler apt_preferences(7) para uma discussão detalhada de prioridades, mas uns poucos exemplos devem dar uma boa idéia básica. Vejamos uma lista descrevendo o efeito de definir a opção do campo prioridade para diferentes valores no exemplo do sylpheed acima.

1001

    A versão 0.4.99 do Sylpheed nunca será trocada pelo apt. Se estiver disponível o APT irá instalar a versão 0.4.99 mesmo que ela substitua um pacote já instalado com uma versão maior. Apenas pacotes com prioridade maior que 1000 terão sua versão rebaixada.

1000

    O efeito é o mesmo da prioridade 1001, mas o apt se recusará a baixar uma versão instalada que seja maior que 0.4.99.

990

    A versão 0.4.99 será trocada apenas por uma versão maior que esteja disponível a partir da distribuição designada como a preferida usando a variável "APT::Default-Release" (veja Como manter um sistema misto, Seção 3.8 acima).

500

    Qualquer versão maior que 0.4.99 do sylpheed que esteja disponível a partir de qualquer distribuição terá preferência sobre a 0.4.99, mas a 0.4.99 será ainda preferida a qualquer versão inferior.

100

    Versões maiores do sylpheed disponíveis de qualquer distribuição terão preferência sobre a versão 0.4.99, assim como qualquer versão maior que esteja instalada; então a versão 0.4.99 será instalada somente quando não houver versão alguma instalada. Essa é a prioridade dos pacotes instalados.

-1

    As prioridades negativas são permitidas, também, e evitam que a versão 0.4.99 seja instalada.

As opções para o pin podem ser: version, release ou origin.

A opção version, como já vimos, suporta uma versão normal e uma máscara (como um asterisco, por exemplo) para definir várias verões de uma vez.

A opção release é mais ampla e depende do arquivo Release do repositório APT, ou do CD. Esta opção pode deixar a desejar pois alguns repositórios não o contém. Você pode ver o conteúdo dos arquivos Release que você tem em /var/lib/apt/lists/. As sub-opções são: a (archive), c (componente), v (versão), o (origin) e l (label).

Um exemplo:

     Package: *
     Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
     Pin-Priority: 1001

Neste exemplo escolhemos versão do Debian 2.2*, que considera as "revisões" (que vêm com consertos de segurança e bugs sérios), repositório stable, seção main (poderia ser contrib e non-free, por exemplo) e origem e nome Debian. Origem (o=) define quem produziu aquele arquivo Release, o nome (l=) define o nome da distribuição: Debian para o próprio Debian e Progeny para a mesma, por exemplo. Um exemplo de arquivo Release:

     $ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release
     Archive: stable
     Version: 2.2r3
     Component: main
     Origin: Debian
     Label: Debian
     Architecture: i386

zaptool

Obrigado pelas preciosas dicas, eu tentei aqui, mas logo de cara não encontrei o arquivo informado no inicio do texto /etc/apt/prefenrence

A versão do meu linux é 14.04


Vou continuar pesquisando aqui como implementar essa dica.


muito agradecido.

Felix

Também uso o Ubuntu 14.04 e encontrei apenas uma pasta vazia em /etc/apt/preferences.d

Porém você pode encontrar maiores informações respectivas ao Ubuntu neste link: https://help.ubuntu.com/community/PinningHowto (em inglês) que trata justamente sobre sua dúvida.

irtigor

A sugestão do Felix foi certeira, se não existisse esse recurso, eu sugeriria colocar um numero alto pro teu pacote.

Luiz Antonio

Acredito que dá para fazer também pelo synaptic.

Menu - Package - Lock version

JFMMão de Ferro

Há meses atrás senti necessidade de bloquear a versão do Gramps que vem por defeito no 14.04 porque não está completamente desenvolvida, usando a primeira instrução, igual ao Félix


http://revolutionsfree.blogspot.pt/2010/01/travar-atualizacoes-de-programas.html

http://tutorfreebr.blogspot.pt/2011/07/evitar-atualizacao-de-um-programa.html

Usei o primeiro, ficando o meu assim, até hoje nunca mais houve actualizações

sudo gedit /etc/apt/preferences

Package: gramps
Pin: version 3.4.8*
Pin-Priority: 600

JFMMF

druidaobelix

#7
Não tem segredo, é exatamente isso, usar o pinning, basta criar o arquivo preferences dentro de /etc/preferences.d/ e colocar lá as restrições.
O arquivo 'preferences' não existe, o diretório vem vazio por padrão, basta criá-lo.

Uso isso há muito tempo e funciona sem problemas, tenho aqui um computador que é multiboot e que não quero a atualização de kernel em razão de funcionar bem apenas com uma específica compilação de placa de vídeo, então o kernel é travado para uma determinada versão.

Um exemplo real do que uso aqui do conteúdo do arquivo 'preferences' instalado num Ubuntu 12.04 travando atualização do kernel:


Package: linux-generic
Pin: version 3.2.0.70.84
Pin-Priority: 1000

Package: linux-headers-generic
Pin: version 3.2.0.70.84
Pin-Priority: 1000

Package: linux-image-generic
Pin: version 3.2.0.70.84
Pin-Priority: 1000

Package: linux-libc-dev
Pin: version 3.2.0-70.105
Pin-Priority: 1000


Uma informação de caráter mais geral para quem do Fórum queira usar esse recurso, use:

apt-cache search palavra

onde 'palavra' é um termo qualquer que você conhece de um determinado pacote.
Isso irá trazer uma relação de pacotes que contenham no nome aquela palavra.
É necessário quando não se sabe o nome exato do pacote que se quer travar.
O nome do pacote é necessário para que se possa configurar o pinning.

exemplo:

apt-cache search php5

Vai produzir uma lista enorme de pacotes relativos ao php5

Use ainda:

apt-cache show pacote

onde pacote é o nome de um específico pacote encontrado na relação anterior.
Vai informar os dados específicos desse pacote, onde se poderá ver a versão para configurar o pinning.

exemplo:

apt-cache show php5-common

Vai se obter os dados específicos do pacote php5-common.
Nessa relação de dados se destaca a versão,
Por exemplo:

Version: 5.5.9+dfsg-1ubuntu4.7

Vai usar isso para travar, para fazer o pinning


www.arredondar.org.br
Vencedor Desafio de Impacto Social Google 2016!
Você também pode participar e fazer a diferença.

zaptool

Olá galera !!

Que ótimo todos estes comentários sobre este assunto, bom ..vamos lá ..

Eu fiz exatamente como sugestão dos colegas, criei o arquivo preferente no path /etc/apt/preference.d/

coloquei o seguinte conteúdo:


Package:php5
Pin: version 5.5.9+dfsg-1ubuntu4
Priority: -1

Package:php5-common
Pin: version 5.5.9+dfsg-1ubuntu4.3
Priority: -1

Package:php5-cli
Pin: version 5.5.9+dfsg-1ubuntu4.3
Priority: -1

Package:php5-readline
Pin: version 5.5.9+dfsg-1ubuntu4.3
Priority: -1




resultado do meu apt-get upgrade:

apache2 apache2-bin apache2-data apache2-dev apache2-mpm-prefork
  apache2-utils apparmor apport apt apt-transport-https apt-utils base-files
  bash bind9-host binutils bsdutils ca-certificates comerr-dev coreutils cpio
  curl dbus dh-apparmor dnsutils e2fslibs e2fsprogs file gcc-4.9-base git
  git-man gnupg gpgv icu-devtools initscripts krb5-locales krb5-multidev
  landscape-common language-pack-de language-pack-de-base language-pack-en
  language-pack-en-base language-selector-common libapache2-mod-php5
  libapparmor-perl libapparmor1 libapt-inst1.5 libapt-pkg4.12
  libasn1-8-heimdal libbind9-90 libblkid1 libc-bin libc-dev-bin libc6
  libc6-dev libcgmanager0 libcomerr2 libcurl3 libcurl3-gnutls
  libcurl4-openssl-dev libdbus-1-3 libdns100 libdrm2 libelf1 libevent-2.0-5
  libevent-core-2.0-5 libevent-dev libevent-extra-2.0-5 libevent-openssl-2.0-5
  libevent-pthreads-2.0-5 libfreetype6 libfreetype6-dev libgcc1 libgcrypt11
  libgcrypt11-dev libglib2.0-0 libglib2.0-bin libglib2.0-data libglib2.0-dev
  libgnutls-dev libgnutls-openssl27 libgnutls26 libgnutlsxx27 libgssapi-krb5-2
  libgssapi3-heimdal libgssrpc4 libhcrypto4-heimdal libheimbase1-heimdal
  libheimntlm0-heimdal libhx509-5-heimdal libicu-dev libicu52 libisc95
  libisccc90 libisccfg90 libk5crypto3 libkadm5clnt-mit9 libkadm5srv-mit9
  libkdb5-7 libkrb5-26-heimdal libkrb5-3 libkrb5-dev libkrb5support0
  liblwres90 libmagic-dev libmagic1 libmount1 libmysqlclient-dev
  libmysqlclient18 libnuma1 libpam-systemd libplymouth2 libpq-dev libpq5
  libprocps3 libroken18-heimdal libsepol1 libss2 libssl-dev libssl1.0.0
  libsystemd-daemon-dev libsystemd-daemon0 libsystemd-login0 libtiff5
  libtiff5-dev libtiffxx5 libudev1 libuuid1 libwind0-heimdal libxml2
  libxml2-dev linux-firmware linux-libc-dev lshw man-db mime-support mount
  multiarch-support mysql-common ntp ntpdate openssl php5-cli php5-common
  php5-readline
plymouth plymouth-theme-ubuntu-text ppp procps python-apt
  python-apt-common python-requests python-urllib3 python3-apport python3-apt
  python3-distupgrade python3-problem-report python3-software-properties
  rsyslog software-properties-common sudo systemd-services sysv-rc
  sysvinit-utils tcpdump tzdata ubuntu-release-upgrader-core udev
  unattended-upgrades unzip update-notifier-common util-linux uuid-dev
  uuid-runtime wget wpasupplicant x11-common x11proto-core-dev xtrans-dev

Vejam que os pacotes php-cli common e readline continuam sendo listados para o upgrade... fiz algo errado ?


abs

zaptool

Consegui Baralho !!!

Modifiquei o que tinha feito no post anterior:

Meu preferences ficou assim:

Package: php5 php5-cli php5-curl php5-gd php5-mysql php5-pgsql php5-common php5-mcrypt php5-cgi libapache2-mod-php5
Pin: version 5.5.9*
Pin-Priority: -1



Agora deu certo, não está aparecendo na lista do upgrade.


Muito obrigado a todos pela ajuda !!




zekkerj

Citação de: zaptool online 18 de Março de 2015, 14:56
Olá galera !!! 

Meu primeiro tópico aqui ... 

Vamos lá .. .tenho um servidor WEB com ubuntu 14.04, houve a necessidade de se utilizar o php5 compilado para manter todo o ambiente da empresa padronizado em uma versão.

Para poder compilar o php5 depois de alguns problemas, tive a necessidade de satisfazer diversas dependências utilizando o recurso "sudo apt-get build-dep php5", depois disso compilei normalmente o meu php e passei a utiliza-lo nas estações dos desenvolvedores e também nos servidores.

1º problema, sempre que um desenvolvedor faz um update na estação, ferra com a minha compilação, o update enfia outro php mais atual por cima, quando ocorre isso, sou obrigado a recompilar o php.

2º problema, por este motivo tenho evitado atualizar os servidores e isso não é bacana.

Pergunta, como faço para configurar o update para atualizar o S.O com excessão do PHP5 ?


agradeço muito pela ajuda

Pergunta, zaptool: quais foram as opções que te levaram a usar o PHP modificado?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

zaptool

Citação de: zekkerj online 15 de Abril de 2015, 21:27
Citação de: zaptool online 18 de Março de 2015, 14:56
Olá galera !!! 

Meu primeiro tópico aqui ... 

Vamos lá .. .tenho um servidor WEB com ubuntu 14.04, houve a necessidade de se utilizar o php5 compilado para manter todo o ambiente da empresa padronizado em uma versão.

Para poder compilar o php5 depois de alguns problemas, tive a necessidade de satisfazer diversas dependências utilizando o recurso "sudo apt-get build-dep php5", depois disso compilei normalmente o meu php e passei a utiliza-lo nas estações dos desenvolvedores e também nos servidores.

1º problema, sempre que um desenvolvedor faz um update na estação, ferra com a minha compilação, o update enfia outro php mais atual por cima, quando ocorre isso, sou obrigado a recompilar o php.

2º problema, por este motivo tenho evitado atualizar os servidores e isso não é bacana.

Pergunta, como faço para configurar o update para atualizar o S.O com excessão do PHP5 ?


agradeço muito pela ajuda

Pergunta, zaptool: quais foram as opções que te levaram a usar o PHP modificado?

Na verdade o PHP não está modificado, simplesmente congelado em uma versão. Como existem muitos sistemas desenvolvidos em uma determinada versão, não fazemos update para novas versões para evitar problemas.

abs

zekkerj

Mas essa versão é do repositório? Se for, vc pode forçar a instalação dela, e depois "piná-la".
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D