Versões de análise
Caminho Hackey
Para a primeira parte, eu consultaria o RPM para as informações da versão em particular, assim.
$ rpm -qi vim-enhanced | grep Version
Version : 7.4.417
Você pode analisar isso assim:
$ rpm -qi vim-enhanced | awk -F': ' '/Version/ {print $2}'
7.4.417
Isso pode ser capturado em uma variável assim:
$ RPM_VERSION=$(rpm -qi vim-enhanced | awk -F': ' '/Version/ {print $2}')
$ echo $RPM_VERSION
7.4.417
Usando formatos de consulta
A ferramenta rpm
também fornece um recurso chamado --queryformat
, que permite personalizar a saída gerada. Sabendo disso, você pode dizer a rpm
para imprimir a macro "VERSION" assim:
$ rpm -q --queryformat '%{VERSION}' vim-enhanced
7.4.417
Colocando-o em uma variável:
$ RPM_VERSION=$(rpm -q --queryformat '%{VERSION}' vim-enhanced)
OBSERVAÇÃO: você pode ver todas as tags de consulta usando a opção --querytags
para rpm
, por exemplo:
$ rpm --querytags | head -5
ARCH
ARCHIVESIZE
BASENAMES
BUGURL
BUILDARCHS
Comparando versões
Fazer a comparação será mais complicado. Felizmente há uma ferramenta no pacote rpmdevtools
chamado rpmdev-vercmp
que pode ajudar muito você.
Uso
$ rpmdev-vercmp --help
rpmdev-vercmp <epoch1> <ver1> <release1> <epoch2> <ver2> <release2>
rpmdev-vercmp <EVR1> <EVR2>
rpmdev-vercmp # with no arguments, prompt
Exit status is 0 if the EVR's are equal, 11 if EVR1 is newer, and 12 if EVR2
is newer. Other exit statuses indicate problems.
Se você notar os status de saída que ele retorna, você pode descobrir qual versão é mais nova simplesmente perguntando a esta ferramenta, dando a ela os 2 nomes dos RPMs.
Exemplo
$ rpmdev-vercmp rpm-4.2-9.69 rpm-4.14-0.69
rpm-4.2-9.69 < rpm-4.14-0.69
$ echo $?
12
Portanto, com base no código de saída de 12, o segundo argumento seria o mais recente dos dois.
Juntando
Sua solução seria algo assim:
rpmdev-vercmp $RPM_VERSION $STR_BASE_ACCEPTABLE_VER > /dev/null
if [[ $? == 12 ]]; then
echo "$RPM_VERSION is too low..."
else
echo "$RPM_VERSION is fine"
fi
Então, se fôssemos definir variáveis da seguinte forma:
$ STR_BASE_ACCEPTABLE_VER="rpm-4.2-9.69"
$ RPM_VERSION="rpm-4.14-0.69"
$ ./cmp_rpmvers.bash
rpm-4.14-0.69 is fine
SE eu trocá-los:
$ STR_BASE_ACCEPTABLE_VER="rpm-4.14-0.69"
$ RPM_VERSION="rpm-4.2-9.69"
$ ./cmp_rpmvers.bash
rpm-4.2-9.69 is too low...