Como obter um nome de pacote mais antigo?

3

Eu tenho um RHEL e em um dos servidores eu instalei o mesmo pacote RPM em duas versões diferentes.

[root ~]# rpm -qa | grep my-package-name
my-package-name-6.6.2-129.x86_64
my-package-name-7.0.2-1.x86_64

Gostaria de saber se é possível receber apenas o nome do pacote mais antigo? Basicamente eu quero realizar algo assim:

[root ~]# rpm -qa | grep my-package-name | get-the-oldest-package

Como posso fazer isso?

    
por Konrad Klimczak 15.12.2016 / 12:21

3 respostas

3

Não sei ao certo como você conseguiu instalar duas versões do mesmo pacote, mas isso deve funcionar:

rpm -q --queryformat "%{VERSION} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" my-package-name | \
  sort -V | \
  awk 'NR==1 { print $2 }'

A primeira linha consulta o banco de dados RPM para my-package-name, pedindo ao RPM para fornecer os resultados em um formato específico - a VERSION seguida pelos campos padrão "rpm -qa". Isso é canalizado para sort -V para (tentativa) classificar os números de versão, seguido por um canal para awk para imprimir somente a primeira linha, removendo o campo VERSION adicional, resultando na saída padrão rpm -qa .

Isso faz a suposição esperançosa de que você está executando isso em um sistema RHEL que possui um sinalizador -V para ordenar.

    
por 15.12.2016 / 16:16
3

Eu sou sempre paranoico em depender de programas que interpretam strings de versão, então, como uma alternativa para a solução de Jeff, você também pode fazer isso:

[root@jb87-workstation ~]# rpm -q kernel --queryformat "%{INSTALLTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | sort -n | head -1 | awk '{print $NF}'
kernel-4.8.13-300.fc25.x86_64

(substituindo kernel pelo nome do seu pacote)

Isso essencialmente imprime o nome completo do pacote, fazendo o mesmo comando rpm -qa e usando apenas --queryformat para prefixar cada linha com o timestamp Unix de quando foi instalado (que está na tag %{INSTALLTIME} ). Em seguida, ele usa sort -n para classificar a saída da mais antiga para a mais nova e apenas pega a primeira linha da saída e imprime a última coluna que será o nome completo do pacote.

Jeff trabalha muito bem, no entanto. Provavelmente é mais uma questão de preferência pessoal.

    
por 15.12.2016 / 16:52
0

Você pode usar o yum downgrade package-name. Às vezes novos pacotes tem um bug. Eu fiz o downgrade para o pacote antigo.

    
por 15.12.2016 / 16:37