
Tenho um RHEL e em um dos servidores 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 eu posso fazer isso?
Responder1
Não tenho certeza de 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 em busca do nome do meu pacote, solicitando ao RPM que forneça os resultados em um formato específico - a VERSÃO seguida pelos campos padrão "rpm -qa". Isso é canalizado para sort -V
(tentativa) classificar os números de versão, seguido por um canal para awk
imprimir apenas a primeira linha, retirando o campo VERSION adicional, resultando na rpm -qa
saída padrão.
Isso pressupõe que você está executando isso em um sistema RHEL que possui um -V
sinalizador para classificação.
Responder2
Sempre fico paranóico em depender de programas que interpretam strings de versão; portanto, como alternativa à solução de Jeff, você também pode fazer o seguinte:
[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
o nome do seu pacote)
Isso essencialmente imprime o nome completo do pacote executando o mesmo rpm -qa
comando e apenas --queryformat
prefixando cada linha com o carimbo de data / hora Unix de quando ele foi instalado (que está na %{INSTALLTIME}
tag). Em seguida, ele sort -n
classifica a saída da mais antiga para a mais recente e apenas pega a primeira linha da saída e imprime a última coluna que será o nome completo do pacote.
O de Jeff funciona muito bem, no entanto. Provavelmente é mais uma questão de preferência pessoal.
Responder3
Você pode usar o nome do pacote de downgrade do yum. Às vezes, novos pacotes apresentam um bug. Eu fiz o downgrade para o pacote antigo.