Como descobrir qual versão do RHEL eu estou usando?


14

Eu trabalho em um ambiente em que estamos migrando lentamente as máquinas do Red Hat Enterprise Linux 5 para o RHEL 6.

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

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

Um exemplo prático disso é que estamos usando módulos de ambiente e my .bashrcinclui uma module load gitlinha, mas nas máquinas RHEL6, este comando erro:

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 esperava algo mais curto.

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

Idealmente, ele deve ser robusto em diferentes versões principais, mas tolerar variações nos números de versão menores.


faz lsb_releaseo trabalho? ( -rdeve fornecer apenas o número; tente também -aver tudo disponível) Nesse caso, também é um fornecedor cruzado.
Derobert

Teste recursos, não plataformas. Hoje, seu teste de plataforma será interrompido quando o RHEL7 for lançado e poderá ser interrompido antes do lançamento do RHEL 6.next, talvez porque eles encaminharam um recurso do EL5 para o 6.x para silenciar as reclamações sobre a remoção. Portanto, se seu script precisar de um gitmódulo Bash, verifique se ele existe antes de chamá-lo. Quando / se aparecer mais tarde, os resultados da sua verificação mudam; de repente, o recurso começa a funcionar, sem nenhum esforço extra.
21912 Warren Young

@ WarrenYoung - Obrigado, mas não sou um sysasmin aqui, apenas um usuário de uma implantação RHEL gerenciada centralmente. Todas as nossas máquinas RHEL5 são essencialmente a mesma imagem, ao lado de todas as máquinas RHEL6, portanto, para mim, saber que a revisão principal é suficiente. Dado que estamos apenas nos estágios de planejamento da mudança para o RHEL6 agora, acho que levará um tempo até que tenhamos que nos preocupar com o RHEL7. * 8 ')
Mark Booth

@derobert - Não, no RHEL5 e 6 também lsb_release -rinclui outro texto, por exemplo Release: 5.8. Como explica Dennis Kaarsemaker , no entanto, se você usar lsb_release -rs, obtém apenas o número.
Mark Booth

Consulte também serverfault.com/questions/89654/what-version-of-rhel-am-i-using - há uma dica para fazer isso com o RPM quando o lsb não está instalado.
Dan Pritts

Respostas:


10

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

majversion=$(lsb_release -rs | cut -f1 -d.)

Funciona com Centos e Redhat propriamente dito, falha no lançamento do Redhat no Oracle Linux. lsb_release não encontrado.
user959690

Esta resposta parece desatualizada agora. Só encontro lsb_releasenas minhas máquinas RHEL / CentOS 5. É longe de ser encontrado em 6 ou 7.
Dale Anderson

Pode ser necessário instalar o pacote redhat-lsb-core.
Dennis Kaarsemaker

15
if grep -q -i "release 6" /etc/redhat-release
then
  echo "running RHEL 6.x"
fi

Essa seria a maneira mais simples em que consigo pensar.


Funciona para cada variação do CentOS e RHEL eu tenho no meu inventário de 5 a 7, ao contrário do lsb_releaseque só parece funcionar para 5.
Dale Anderson

4

Usar rpm -q |grep redhat-release-server

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


1
Você quis dizer em rpm -qavez de rpm -q? Usar -qpor si só requer um argumento de consulta.
Dale Anderson

@Dale Anderson, obrigado, este é o único que trabalhou para mim, em 7,4, e eu não sei que como 7.4até que eu corri isso com-qa
Brian Thomas

2

Você pode expandir isso para várias distribuições Linux usando o /etc/issuearquivo em vez de o /etc/redhat-releasearquivo.


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

rpm -q --queryformat '%{RELEASE}' rpmimprime algo parecido 25.el7. Então é só pegar o último dígito (s). Testado em RHELs 5,6,7 e Fedora 24.

Como outros apontaram, lsb-versionpode não estar instalado. Além disso, há pelo menos um sistema RHEL5 que não possui o redhat-release-serverpacote instalado.


obrigado, isso deve ser votado, pois sempre funciona e retorna exatamente o número desejado.
Phiphi #

1

Aqui está outra maneira mais precisa de obter esse resultado. Os pacotes de kernel no RHEL incluem a string 'elN', onde N representaria 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]\+\).*$/\1/'

Isso retornaria uma sequência "el5", "el6" ou "el7", dependendo da sequência correspondente no host especificado.


Estou usando uma mistura de CentOS e RedHat, versões 5-7, e a resposta realmente funciona em todas as versões: uname -r | / '. sed (el [0-9] \ +). * $ / \ 1 /'
WallStProg 5/18/18

0

Acabei usando a resposta de jordanm , mas adicionando um toque especial.

Como eu não queria ter todos os meus comandos rhel6 juntos e todos os meus comandos rhel5 juntos, mas intercalados em sua própria seção, e não queria replicar esse código toda vez que quisesse alternar. fez 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.



0

Todos os métodos mencionados aqui dependem de arquivos de texto e, como tal, podem ser enganosos. Alguém com o acesso correto pode alterar o conteúdo de / etc / redhat-release, / etc / issue, etc., mesmo para ofuscar essas informações. 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
  • O RHEL6 usa o kernel 2.6.32-X
  • RHEL7 usa o kernel 3.10.0-X

invariavelmente até agora, você pode descobrir a versão do kernel em execução executando uname -r. Você pode ficar mais sofisticado executando algo ao longo das linhas de

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

Isso daria informações específicas sobre o kernel, como na tabela acima. Você poderá conduzir paralelos a outras distribuições, se eles sempre usarem versões do kernel.


2
-1. Admin pode decidir atualizar o kernel com a mesma facilidade.
Oliver Gondža 13/11/2015

0

O RHEL 6 adicionou o arquivo / etc / system-release-cpe. Contém uma :sequência separada que pode parecer algo como

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

Agora é suficiente extrair 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 }')

0

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

cat /etc/system-release-cpe | cut -d ':' -f5

Se isso fosse "mais conciso", você faria cut -d: -f5 /etc/system-release-cpue evitaria o UUOC. No entanto, a pergunta estava perguntando sobre a transição do RHEL 5 para 6. Se isso funciona apenas a partir do RHEL 6 em diante, ele não atende aos requisitos da pergunta?
roaima
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.