Assistência aplicando patches mal empacotados?

1

Eu gerencio um punhado de servidores executando as várias funções de uma solução de backup on-line Ahsay .

Algumas vezes por ano, o software é atualizado e eu preciso aplicar patches em meus servidores.

Irritantemente, os patches são mal empacotados / distribuídos, então, onde alguém gostaria de ter os servidores instalados / atualizados usando o yum, tudo é manipulado manualmente.

Instalar o servidor pela primeira vez é bastante simples, descompacte o arquivo para / usr / local e execute install.sh (para criar scripts init e outros).

Depois disso, no entanto, a gestão começa a ficar irritante. Para fazer alterações de configuração e renomear o servidor, você faz alterações nos scripts de inicialização e nos arquivos xml reais que compõem o servidor.

Isso, por si só, não seria um grande problema se não fosse pelo fato de que toda vez que um novo patch é lançado, ele vem com as versões de estoque desses arquivos e instruções para sobrescrever os personalizados.

Reescrever os arquivos em cada atualização em vários servidores naturalmente é um incômodo.

Então eu me vejo revisando a maioria dos arquivos no patch, escolhendo os que eu acho que contêm as atualizações reais e atualizando apenas aqueles.

Agora, não são bilhões de arquivos, apenas o suficiente para serem irritantes. O último patch:

# find . -type f
./webapps/rdr/jsp/lib/common.js
./webapps/rdr/WEB-INF/lib/rdr.jar
./webapps/rdr/WEB-INF/web.xml
./webapps/rdr/WEB-INF/struts-config.xml
./webapps/obs/WEB-INF/lib/rdr.jar
./webapps/obs/WEB-INF/web.xml
./webapps/obs/WEB-INF/struts-config.xml
./tomcat/lib/libFileSysUtilObdX86.so
./tomcat/lib/libFileSysUtilFbdX64.so
./tomcat/lib/libFileSysUtilObdX64.so
./tomcat/lib/mail.jar
./tomcat/lib/libFileSysUtilSosSp9.so
./tomcat/lib/libFileSysUtilFbdX86.so
./tomcat/lib/libFileSysUtilLinX64.so
./tomcat/lib/libFileSysUtilLinSpc.so
./tomcat/lib/libFileSysUtilSosX86.so
./tomcat/lib/libFileSysUtilLinPpc.so
./tomcat/lib/libFileSysUtilLinArm.so
./tomcat/lib/libFileSysUtilLinP64.so
./tomcat/lib/libFileSysUtilLinX86.so
./tomcat/lib/libFileSysUtilSosX64.so
./tomcat/lib/libFileSysUtilSosSpc.so
./tomcat/lib/ani.jar
./bin/startup.sh
./bin/shutdown.sh

Ao fazer o seguinte, consegui identificar as diferenças de texto com mais facilidade:

for NEW in 'find . | xargs file | grep text | sed 's/:.*$//' | xargs'
do
 OLD='echo $NEW | sed 's!^\.!/usr/local/rdr!''
 echo -e "$NEW \t\treplaces $OLD"
 diff $OLD $NEW
done

E neste patch mais recente, onde não há atualização (que eu poderia identificar) para qualquer um dos arquivos de texto. Significando que eu poderia simplesmente substituir o diff por rm $ NEW .

Depois disso, executei um diff sobre todos os arquivos, em vez de apenas os arquivos de texto:

# for NEW in 'find . -type f | xargs'; do OLD='echo $NEW | sed 's!^\.!/usr/local/rdr!''; diff $NEW $OLD; done
Binary files ./webapps/rdr/WEB-INF/lib/rdr.jar and /usr/local/rdr/webapps/rdr/WEB-INF/lib/rdr.jar differ
Binary files ./webapps/obs/WEB-INF/lib/rdr.jar and /usr/local/rdr/webapps/obs/WEB-INF/lib/rdr.jar differ
Binary files ./tomcat/lib/mail.jar and /usr/local/rdr/tomcat/lib/mail.jar differ
Binary files ./tomcat/lib/libFileSysUtilSosX64.so and /usr/local/rdr/tomcat/lib/libFileSysUtilSosX64.so differ
Binary files ./tomcat/lib/ani.jar and /usr/local/rdr/tomcat/lib/ani.jar differ

Dando a lista dos 5 (de 25) eu realmente preciso mudar.

Isso parece ser o tipo de mantenedor de dor de cabeça que os mantenedores lidam o tempo todo. Existe alguma maneira de tornar o processo menos pesado?

Meus servidores (se fizer alguma diferença) estão rodando o CentOS 6.5.

    
por azzid 28.02.2014 / 15:17

1 resposta

1

A julgar pela sua descrição, você não recebe patches, mas versões atualizadas de arquivos. O que você pode fazer é manter os arquivos de texto de uma instalação baunilha do seu software em ~/sw_current com uma cópia em ~/sw_new . Toda vez que você receber uma atualização, você deve aplicá-la a ~/sw_new copiando cegamente os arquivos e gerar um patch diff real:

diff -rupN ~/sw_current/ ~/sw_new/ > update.patch

Isso produziria o patch com instruções sobre quais linhas atualizar em quais arquivos, mantendo o restante dos arquivos intactos. Este patch deve então ser aplicado às suas instalações reais:

cd /path/to/software
patch < update.patch

Observe que, se você alterou manualmente uma determinada linha de texto em seu sistema e a linha foi atualizada, a aplicação do patch produzirá um conflito que você terá que resolver manualmente.

Após a aplicação da atualização, não se esqueça de remover o diretório baunilha ~/sw_current e copiar o conteúdo de ~/sw_new para ~/sw_current .

Com relação aos arquivos binários fornecidos com atualizações, você pode simplesmente copiar aqueles em todas as suas máquinas sobrescrevendo os originais, já que imagino que você nunca modifique os arquivos binários.

    
por 28.09.2015 / 10:20