( 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.