Lista diferente de pacotes instalados relatados pelo rpm em comparação com o yum

8

Quero que o Servidor B tenha exatamente a mesma configuração do Servidor A. Os Servidores A e B têm o mesmo Arch e o mesmo hardware.

Meu plano é ter uma lista de todas as coisas instaladas no servidor A e instalá-lo usando a lista no servidor B, algo como:

yum -y install $(cat installed.txt)

No servidor A, devo preferir usar:

rpm -qa > installed.txt

ou:

yum list installed > installed.txt  

As listas parecem diferentes e não faço ideia do porquê.

yum list installedtem 930 linhas enquanto rpm -qatem 895 linhas, qual pode ser a diferença?

john Smith
fonte
Você diffeditou as saídas (possível após a classificação)?
Anthon
Eu não tenho uma idéia de por que há uma diferença entre a saída yum e rpm. Pode ser que você deva tentar a sugestão de Anthon e nos informar qual é o resultado. Além disso, para mim, os dois comandos listam o mesmo número de linhas e, de acordo com o seu plano, eu iria com a rpmlista, pois ela possui a lista que pode ser usada no yumcomando do servidor b .
Ramesh 23/07
minha aposta: também por causa dos pacotes instalados pelo "rpm --install package.rpm"
Massimo

Respostas:

4

qual pode ser a diferença?

A principal razão para o número diferente de linhas é que a saída produzida por yumé formatada para que cada campo seja alinhado verticalmente (independentemente do comprimento do nome do pacote e / ou número da versão). Isso é feito usando duas linhas para listar esses pacotes e preenchendo a segunda linha com caracteres de espaço para alinhar os campos corretamente. A seguinte saída (de uma caixa do CentOS 6) mostra que duas linhas são usadas para listar o device-mapper-persistent-data.x86_64pacote:

device-mapper-libs.x86_64         1.02.95-3.el6_7.4    @clearos-verified-updates
device-mapper-persistent-data.x86_64
                                  0.3.2-1.el6          @clearos
dhclient.x86_64                   12:4.1.1-49.P1.v6    @clearos-verified-updates

No entanto, esse não é o único motivo e pode ser visto massageando a saída dos dois comandos antes de compará-los:

Para a saída do rpmcomando:

  1. Classifique-o para que os pacotes que começam com uma letra maiúscula apareçam antes daqueles com letras minúsculas:

    rpm -qa | LC_ALL=C sort
    
  2. Use um sedcomando para remover os números de versão do pacote:

    rpm -qa | LC_ALL=C sort r | sed 's/-[^-]*-[^-]*$//' >| installed.rpm
    

Para a saída do yumcomando:

  1. Remova as duas primeiras linhas do cabeçalho ( Loaded pluginse Installed Packages):

    Loaded plugins: etckeeper, fastestmirror
    Installed Packages
    

    Podemos usar sedpara isso:

     yum list installed | sed '1,2d;'
    
  2. Também podemos usar sedpara remover todas as linhas que são continuações de uma lista de pacotes (essas linhas começam com um número de espaços para que todas as versões do pacote estejam alinhadas).

    yum list installed | sed '1,2d;/^ /d;s/\..*//' >| installed.yum
    

Agora, podemos usar o diffcomando para comparar a saída dos dois arquivos. Aqui estão os resultados da caixa do CentOS 6:

# diff installed.{rpm,yum}
239,243d238
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey

Conclusão

Isso mostra que rpm -qatambém inclui listagens de pacotes para as chaves públicas confiáveis ​​para assinar pacotes enquanto o yumcomando omite esses pacotes.

Anthony Geoghegan
fonte
há algum tempo, mas nunca é tarde para muitos agradecimentos por sua útil análise e conclusão !!
John Smith
@johnSmith Antes tarde do que nunca! :) Lembro-me de passar um pouco de tempo com este, mas achei uma pergunta interessante. Responder a essas perguntas pode ser uma boa maneira de aprender por si só.
Anthony Geoghegan
6

A lista yum instalada possui 930 linhas, enquanto rpm -qa possui 895 linhas, qual pode ser a diferença?

Isso provavelmente é apenas formatação de diferenças. A lista yum fará um embrulho inteligente para o tamanho do seu terminal.

O que você provavelmente quer fazer é usar:

# Run this on the master server
yum-debug-dump

# Run this on the new server, with the input from the above.
yum-debug-restore
James Antill
fonte
obrigado pela resposta, depois de instalar o yum-utils no novo servidor e executar "yum-debug-restore master_out.gz", ele diz para cada pacote que não está disponível, estou perdendo alguma coisa?
John Smith
Se eles não são servidores idênticos (por exemplo, arch diferente, ou o novo possui pacotes mais antigos), você pode usar as opções --ignore-arch e / ou --install-latest na restauração.
James Antill
Vou sugerir para copiar o conteúdo do /etc/yum.repos.d/* mestre para o novo servidor antes de executar yum-debug-restore
Sergey Vlasov
1

Não sei ao certo por que as listas são diferentes, mas sei que rpm -qa > installed.txté a maneira correta de encontrar todos os pacotes instalados. Ele procurará yum installedtanto quanto rpm installed.

Além disso, o formato da rpm -qasaída funcionará melhor com o yum installcomando que você deseja executar.

Jeight
fonte
0

yum list installed me dá a saída como abaixo.

pam_krb5.i386                        2.2.14-22.el5                     installed

Agora, rpm -qatem o seguinte a dizer.

pam_krb5-2.2.14-22.el5

Ambos os comandos me dão o mesmo número de linhas que a saída. Eu iria com a rpm -qalista.

Além disso, a partir desta resposta, vejo a informação abaixo.

existe o programa "rpm", que manipula especificamente os pacotes que são solicitados a manipular, e existe "yum", que é um sistema de gerenciamento mais inteligente que pode encontrar dependências e baixar arquivos .rpm, mesmo que não estejam em o sistema.

Portanto, a diferença pode ser yumresolver as dependências, mas rpminstalou todas as dependências e, portanto, fornece uma lista mais completa.

Eu vejo a diferença real entre yume rpmcomo abaixo.

O problema mais proeminente rpmé um estado comumente referido pela maioria das pessoas como o inferno da dependência . Esse problema ocorre com pacotes que dependem de muitos outros pacotes, alguns desses pacotes também dependem de muitos outros pacotes. É do conhecimento geral que você deve instalar todas as dependências para que o programa funcione corretamente. rpmnão pode fazer isso automaticamente por você. Ele pode apenas verificar se todos os pacotes necessários estão instalados antes da instalação do pacote necessário. O rastreamento e a instalação manual de cada dependência são uma tarefa importante para a maioria das pessoas que deseja instalar apenas um único pacote inicialmente.

yumé capaz de rastrear as dependências de um pacote e instalá-las antes de instalar o pacote que o usuário desejava instalar. Isso simplifica todo o processo, pois você precisa saber apenas o nome do pacote que deseja instalar e não se preocupar se os pacotes necessários foram instalados ou não. Os pacotes que não podem ser encontrados no sistema são procurados nos repositórios disponíveis para o sistema.

Referências

http://www.differencebetween.net/technology/difference-between-yum-and-rpm/

Ramesh
fonte
obrigado pela resposta, para mim yum lista instalada tem 940 linhas enquanto rpm -qa tem 895 linhas, alguma idéia do que pode ser a diferença?
John Smith
@johnSmith, Yumlida com dependências e busca pacotes para preenchê-los. Yumexecuta efetivamente o mesmo comando, rpmmas também inclui todos os pacotes necessários para corresponder às dependências.
Ramesh 23/07
yumé uma dádiva de Deus para gerenciar dependências de pacotes, mas isso é irrelevante quando é simplesmente listar os pacotes instalados em um sistema. Veja James e minha resposta para o motivo da diferença.
Anthony Geoghegan
0

yum list installed pode criar uma saída de duas linhas, se o nome e a versão do pacote forem longos.

Jan Gerrit Kootstra
fonte
Esta resposta pode ser curta, mas está correta (com aprovação).
Anthony Geoghegan