Como descobrir qual versão do RHEL estou usando?

12

Eu trabalho em um ambiente em que estamos lentamente fazendo a transição de máquinas do Red Hat Enterprise Linux 5 para o RHEL 6.

Eu preciso de alguns dos meus scripts para fazer algo sutilmente diferente em máquinas RHEL6 para o que está sendo feito atualmente em máquinas RHEL5.

A solução pragmática é verificar em tempo de execução e executar alguns comandos no RHEL5, outros no RHEL6 e alguns em ambos.

Um exemplo prático disso é que estamos usando módulos de ambiente e meu .bashrc inclui uma linha module load git , mas em máquinas RHEL6 esses erros de comando:

RHEL6 system, git should be installed - not loading module

Olhando no modulefile, encontro o seguinte código:

set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
  puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
  ...
}

Isso parece fazer o que eu quero, mas eu estava esperando por algo mais curto.

Então, qual é a maneira mais fácil de dizer ao RHEL5 a partir do RHEL6 em um script bash?

O ideal é que ele seja robusto em diferentes versões principais, mas seja tolerante a variações em números menores de lançamentos.

    
por Mark Booth 29.11.2012 / 17:23

11 respostas

9

Você também pode usar o comando lsb_release . Se você já tiver certeza de que é o RHEL, obter o número da versão principal é:

majversion=$(lsb_release -rs | cut -f1 -d.)
    
por 29.11.2012 / 22:32
15
if grep -q -i "release 6" /etc/redhat-release
then
  echo "running RHEL 6.x"
fi

Esta seria a maneira mais simples de pensar.

    
por 29.11.2012 / 17:58
4

Use rpm -q |grep redhat-release-server

O arquivo /etc/redhat-release pode ter sido editado por um administrador que deseja instalar software de terceiros sem executar uma atualização real do sistema operacional.

    
por 18.08.2016 / 18:24
2

Você pode expandir isso para várias distribuições do Linux usando o arquivo /etc/issue em vez do arquivo /etc/redhat-release .

    
por 29.11.2012 / 18:05
2
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)

rpm -q --queryformat '%{RELEASE}' rpm imprime algo como 25.el7 . Então é só questão de tirar o (s) último (s) dígito (s). Testado nos RHELs 5,6,7 e Fedora 24.

Como outros salientaram, lsb-version pode não estar instalado. Além disso, há pelo menos um sistema RHEL5 que não possui o pacote redhat-release-server instalado.

    
por 03.09.2016 / 08:06
0

Acabei usando a jordanm resposta, mas adicionando uma reviravolta.

Porque eu não queria ter todos os meus comandos rhel6 juntos e todos os meus comandos rhel5 juntos, mas intercalados dentro de sua própria seção, e eu não queria ter que replicar esse código toda vez que eu queria trocar , em vez disso eu fiz isso:

if   grep -q -i "release 6" /etc/redhat-release ; then
  rhel6only=1
elif grep -q -i "release 5" /etc/redhat-release ; then
  rhel5only=1
else
  echo "Running neither RHEL6.x nor RHEL 5.x !"
fi

Dessa forma, eu poderia fazer coisas como:

# JDK
[ $rhel5only ] && module load java/6
[ $rhel6only ] && module load java/7

# Eclipse
module load eclipse

# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3

etc.

    
por 25.03.2013 / 16:23
0

se sua intenção for gerenciar modulefiles por contexto, Eu sugiro que você verifique EasyBuild e alguma lógica relacionada, vivendo em formato Python:

por 15.08.2013 / 14:59
0

Todos os métodos mencionados aqui dependem de arquivos de texto e, como tal, podem ser enganosos. Someoune com o acesso correto pode alterar o conteúdo de / etc / redhat-release, / etc / issue, etc. mesmo para ofuscar apenas essa informação. Um método mais confiável envolveria conhecer as versões do kernel normalmente fornecidas pela Red Hat em cada versão do RHEL:

  • RHEL4 usa o kernel 2.6.9-X
  • RHEL5 usa o kernel 2.6.18-X
  • RHEL6 usa o kernel 2.6.32-X
  • O RHEL7 usa o kernel 3.10.0-X

Invariavelmente, até agora, você pode descobrir o lançamento do kernel executando uname -r . Você pode ficar mais chique executando algo nos moldes de

uname -r | awk -F- '{print $1}'

Isso forneceria informações específicas sobre o kernel, como na tabela acima. Você pode conseguir paralelos com outras distribuições, se eles usarem consistentemente versões do kernel.

    
por 18.09.2015 / 01:14
0

O RHEL 6 adicionou o arquivo / etc / system-release-cpe. Contém uma string : -separada que pode ser parecida com

# cat /etc/system-release-cpe
cpe:/o:redhat:enterprise_linux:6computenode:ga:computenode

Agora basta puxar os campos $ 5 e $ 7 para obter a versão RHEL e a variante RHEL.

# will be 7 or 6, does not work for 5 as file is missing there
RHEL_VERSION_MAJOR=$(cat /etc/system-release-cpe | awk -F: '{ print $5 }' | grep -o ^[0-9]*)
RHEL_VARIANT=$(cat /etc/system-release-cpe | awk -F: '{ print $7 }')
    
por 02.10.2017 / 16:09
0

A partir do RHEL 6, a maneira mais concisa seria:

cat /etc/system-release-cpe | cut -d ':' -f5
    
por 15.12.2017 / 23:05
0

Aqui está outra maneira mais precisa de obter esse resultado. Os pacotes do kernel no RHEL têm a string 'elN' incluída, onde N representa a versão principal do sistema operacional. Assim, pode-se executar o seguinte comando para identificar a versão do RHEL:

# uname -r | sed 's/^.*\(el[0-9]\+\).*$//'

Isso retornaria uma string, "el5", "el6" ou "el7", dependendo da string correspondente no host fornecido.

    
por 01.09.2018 / 01:18

Tags