Determina a versão do SO de uma caixa OEL linux?

3

Os métodos usuais para determinar as versões do sistema operacional parecem estar sendo visualizados

/etc/*-release file 

* aqui seria a família à qual a versão específica do sistema operacional pertence. Mas no sistema OEL, os seguintes arquivos estão presentes e todos eles parecem estar retornando versões de lançamento válidas, em tais situações existe um método definido para determinar os detalhes da versão do SO:

 cat /etc/redhat-release
 Red Hat Enterprise Linux Server release 5.8 (Tikanga)

  cat /etc/enterprise-release
  Enterprise Linux Enterprise Linux Server release 5.8 (Carthage)

  cat /etc/oracle-release
  Oracle Linux Server release 5.8

cat /etc/*release*
Enterprise Linux Enterprise Linux Server release 5.8 (Carthage)
Oracle Linux Server release 5.8
Red Hat Enterprise Linux Server release 5.8 (Tikanga)

usando alternativas conforme mencionado abaixo são usadas somente no caso de os arquivos acima não retornarem valores válidos:

lsb_release -a returns the same output as returned by enterprise-release 

Atualização 1: contexto de execução

O arquivo / etc / * - release é examinado como parte de uma solução programática, o valor de * é fornecido por um arquivo fictício que pode ter estes valores:

asianux, empresa, mandrake, redhat, UnitedLinux, Suse, SuSE

dependendo da ordem de apresentação no cenário acima, uma vez que a empresa aparece primeiro O arquivo / etc / enterprise-release é consultado para encontrar a versão do sistema operacional No caso de a ordenação ser outra, com a redhat aparecendo antes do uso de / etc / redhat-release seria usado.

Isso não parece ser uma solução viável, portanto, buscar outros métodos mais definidos para determinar a versão do sistema operacional.

    
por bhavs 02.09.2014 / 08:53

4 respostas

7
lsb_release -a

Veja a documentação Linux Standard Base

De acordo com a sua pergunta, você menciona isso como uma alternativa, caso os itens acima não funcionem. Você deve usar lsb_release primeiro, como é o padrão.

Além disso, deve retornar mais informações do que o comando enterprise-release , especificamente a linha da versão LSB (por exemplo, lsb_release -v )

    
por 02.09.2014 / 10:17
5

( O Mandrake, o AsianUX e o UnitedLinux ainda estão próximos o suficiente para certificar a compatibilidade em um novo software? )

Definitivamente, verifique as sugestões em: Qual versão do RHEL estou usando?

Mas além disso, olhe facter se você tiver algum controle sobre os sistemas em que este software será implantado em. Se este for um software que será enviado e executado em sistemas que você não gerencia, provavelmente precisará lidar com a detecção do sistema operacional. Se for sua empresa / ambiente, facter é o método mais limpo.

Ao lidar com o RHEL e seus derivados, é importante saber que o ciclo de vida da distribuição se esforça para manter a compatibilidade entre liberações menores. Portanto, o software deve ser executado em * EL5.4, 5.8 e 5.10, por exemplo. Eu não acho que é o seu problema aqui, no entanto, como você provavelmente só se preocupa com a "família" do SO.

Veja a saída facter dos três sistemas a seguir.

# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => RedHat
operatingsystemmajrelease => 5
operatingsystemrelease => 5.8
osfamily => RedHat

e

# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => CentOS
operatingsystemmajrelease => 5
operatingsystemrelease => 5.9
osfamily => RedHat

e

# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => CentOS
operatingsystemmajrelease => 6
operatingsystemrelease => 6.5
osfamily => RedHat

Eles são o CentOS e o RHEL, versões 5.8, 5.9 e 6.5. Mas eu acho que você provavelmente só se importa que eles são derivados da RedHat. Eu usaria o osfamily e talvez o operatingsystemmajrelease fact.

Dê uma olhada na rotina de detecção de SO que facter usa ... link

snip

      if FileTest.exists?("/etc/enterprise-release")
        if FileTest.exists?("/etc/ovs-release")
          operatingsystem = "OVS"
        else
          operatingsystem = "OEL"
        end
      elsif FileTest.exists?("/etc/redhat-release")
        operatingsystem = get_redhat_operatingsystem_name

snip

  def get_redhat_operatingsystem_name
    txt = File.read("/etc/redhat-release")
    matches = {
      "CentOS"     => "centos",
      "Scientific" => "Scientific",
      "CloudLinux" => "^cloudlinux",
      "PSBM"       => "^Parallels Server Bare Metal",
      "Ascendos"   => "Ascendos",
      "XenServer"  => "^XenServer",
      "XCP"        => "XCP"
    }

Em suma, a detecção do Oracle Enterprise Linux depende totalmente da presença de /etc/enterprise-release .

[root@xt ~]# facter osfamily
RedHat
[root@xt ~]# facter operatingsystem
CentOS
[root@xt ~]# touch /etc/enterprise-release
[root@xt ~]# facter operatingsystem
OEL

Então você está fazendo isso da maneira certa, ou pelo menos da mesma maneira que facter faz.

    
por 02.09.2014 / 09:52
3

Não há métodos definitivos / padrão que funcionem em todas as principais distribuições. Você terá que usar um código extra para descobrir o melhor de seu conhecimento (com base em como você entende cada distribuição, disponibilize essas informações).

Se isso for para um script de instalação, dê ao usuário a opção de especificá-lo manualmente. Se você quer ser super legal, tente descobrir por si mesmo e apenas peça confirmação.

Se for para um programa que irá verificar as coisas (e, portanto, precisa procurar locais diferentes para encontrá-las), forneça a opção de um arquivo de configuração ou opção de linha de comando para especificar qual distro está sendo usada.

As outras soluções fornecidas são ótimas, mas você dependerá de códigos / pacotes que podem não estar disponíveis em todos os lugares (especialmente o facter, que é de longe a ferramenta mais completa para coletar informações sobre o ambiente).

    
por 02.09.2014 / 13:24
0
uname -a 

(Imprimir todas as informações)

uname -r 

(Imprime o nome do kernel)

cat /etc/issue
cat /etc/redhat-release
lsb_release –a
tail /etc/redhat-releas
    
por 13.10.2017 / 17:35