Calcula uma lista de diferenças entre pacotes instalados em dois hosts

11

Acabei de adicionar alguns problemas com meus servidores virtuais Debian e adiciono para reinstalar todos eles do zero. No entanto, ainda tive acesso à versão antiga e consegui recuperar a lista de pacotes instalados.

Para facilitar o processo de restauração de um servidor virtual no futuro, eu gostaria de criar uma lista de pacotes específicos para cada um dos meus servidores.

Para explicar melhor o que quero alcançar. Eu já tenho um processo automatizado para criar um novo servidor virtual com algum pacote básico e configuração usada em todos os lugares. Agora eu quero salvar o delta com este "esqueleto" para facilitar a reinstalação de um servidor em particular.

Uma vantagem real será também salvar os arquivos de configuração alterados do padrão, mas eu posso viver apenas com a lista de pacotes.

Em suma, quero uma maneira de criar uma lista de pacotes instalados em um host, mas não em outro.

Será ótimo se a lista contiver apenas pacotes instalados manualmente e não a lista de todas as dependências.

Se você tiver algumas ferramentas existentes projetadas para realizar essa tarefa específica, sinta-se à vontade para propor, mas quero manter a dependência o menor possível. Para obter informações, eles não são exatamente servidores virtuais, mas contêineres LXC.

    
por krtek 07.11.2011 / 21:57

5 respostas

12

Na instalação de referência (apenas uma vez):

dpkg-query -W -f='${Package}\n' | sort > baselist.txt

(O seguinte assume bash )

Para obter os pacotes adicionados a partir da instalação de referência (isso não mostra o que foi removido):

comm -1 -3 baselist.txt <(dpkg-query -W -f='${Package}\n' | sort)

Melhor ainda, evitando copiar baselist.txt :

comm -1 -3 <(ssh user@refserver cat /path/to/baselist.txt) <(dpkg-query -W -f='${Package}\n' | sort)
    
por 07.11.2011 / 22:20
2

no servidor antigo, execute:

dpkg --get-selections > old-packages-list

copie o arquivo acima para o novo servidor e execute-o no novo servidor:

dpkg --set-selections < old-packages-list

apt-get update

dselect update

Além disso, lembre-se de adicionar todos os repositórios extras de /etc/apt/sources.list do servidor antigo para o novo servidor, antes dessa migração de pacotes, como se você não o fizesse, a maioria dos pacotes não será mais instalada.

    
por 07.11.2011 / 22:09
1

Você pode usar o seguinte comando para obter a lista completa de pacotes nos dois servidores:

     dpkg -l | sort > old_file
     dpkg -l | sort > new_file

Depois, você pode obter as diferenças usando:

     diff -Nur old_file new_file > changes.txt

Você pode filtrar as alterações necessárias usando o grep. Além disso, o diff pode ser usado para obter as alterações nos arquivos de configuração e gerar os patches para serem aplicados quando necessário. A propósito, o diff pode comparar duas pastas, não apenas dois arquivos.

    
por 07.11.2011 / 22:34
1

O Blueprint foi projetado exatamente para sua necessidade. Cuspa pacotes de descrição instalados e arquivos de configuração que foram alterados. É capaz de converter essas descrições em scripts Puppet ou Chef para aplicá-las em caixas limpas.

    
por 06.03.2012 / 13:02
0

Também foi encontrado este pacote útil, cuja descrição é a seguinte:

Um script Bash que compara a árvore do sistema de arquivos de um pacote Debian com a árvore atual do sistema de arquivos, imprimindo diffs unificados para arquivos diferentes.

link

Apenas um único arquivo bash que você pode colocar em seu PATH em algum lugar e rodar - parece funcionar para mim e não é muito antigo.

Espero que isso ajude alguém.

    
por 07.09.2013 / 23:53