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 .bashrc
inclui uma module load git
linha, 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.
lsb_release
o trabalho? (-r
deve fornecer apenas o número; tente também-a
ver tudo disponível) Nesse caso, também é um fornecedor cruzado.git
mó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.lsb_release -r
inclui outro texto, por exemploRelease: 5.8
. Como explica Dennis Kaarsemaker , no entanto, se você usarlsb_release -rs
, obtém apenas o número.Respostas:
Você também pode usar o
lsb_release
comando Se você já tem certeza de que é RHEL, obter o número da versão principal é:fonte
lsb_release
nas minhas máquinas RHEL / CentOS 5. É longe de ser encontrado em 6 ou 7.Essa seria a maneira mais simples em que consigo pensar.
fonte
lsb_release
que só parece funcionar para 5.Usar
rpm -q |grep redhat-release-server
O
/etc/redhat-release
arquivo pode ter sido editado por um administrador que procura instalar software de terceiros sem executar uma atualização real do sistema operacional.fonte
rpm -qa
vez derpm -q
? Usar-q
por si só requer um argumento de consulta.7.4
até que eu corri isso com-qa
Você pode expandir isso para várias distribuições Linux usando o
/etc/issue
arquivo em vez de o/etc/redhat-release
arquivo.fonte
rpm -q --queryformat '%{RELEASE}' rpm
imprime algo parecido25.el7
. Então é só pegar o último dígito (s). Testado em RHELs 5,6,7 e Fedora 24.Como outros apontaram,
lsb-version
pode não estar instalado. Além disso, há pelo menos um sistema RHEL5 que não possui oredhat-release-server
pacote instalado.fonte
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:
Isso retornaria uma sequência "el5", "el6" ou "el7", dependendo da sequência correspondente no host especificado.
fonte
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:
Dessa forma, eu poderia fazer coisas como:
etc.
fonte
se sua intenção adicional é gerenciar arquivos de módulo por contexto, sugiro que você verifique o EasyBuild e alguma lógica relacionada, vivendo no formato Python:
fonte
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:
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 deIsso 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.
fonte
O RHEL 6 adicionou o arquivo / etc / system-release-cpe. Contém uma
:
sequência separada que pode parecer algo comoAgora é suficiente extrair os campos $ 5 e $ 7 para obter a versão RHEL e a variante RHEL.
fonte
A partir do RHEL 6, a maneira mais concisa seria:
fonte
cut -d: -f5 /etc/system-release-cpu
e 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?