Estou escrevendo um código comum em um driver para obter o nome da distribuição e o nome do host. nome de host do qual estou pegando struct utsname{nodename[]}
, mas como obtenho o nome da distribuição?
Responder1
A maioria dos programas e scripts que vi analisam os arquivos usuais no /etc
AFAIK, não há outra maneira:
On Redhat, look for /etc/redhat-release
On Debian, look for /etc/debian_version
Mandriva has /etc/version
and Slackware has /etc/slackware-version
Você também pode usar uname
para obter ARCH
ou, provavelmente a maneira mais sensata, usar lsb_release
.
Responder2
Você pode dar uma olhada em como o fator faz issoaqui.
Como Jan disse, lsb_release é provavelmente o melhor caminho a seguir, mas não pode ser o único caminho. Por exemplo, lsb_release não está presente por padrão em nenhum dos meus servidores RHEL:
[damaya@damaya-sandbox script]$ lsb_release
-bash: lsb_release: command not found
[damaya@damaya-sandbox script]$ yum provides "*/lsb_release"
redhat-lsb-core-4.0-7.el6.centos.i686 : LSB base libraries support for CentOS
Repo : base
Matched from:
Filename : /usr/bin/lsb_release
Portanto, se lsb_release não estiver presente no sistema, o próximo passo é obter as informações do arquivo /etc/*-release. No entanto, se isso também não estiver presente no sistema, você estará sem sorte. Infelizmente, não existe uma maneira 100% confiável de obter essas informações.
Responder3
O escopo para obter o nome da distribuição não está no escopo de desenvolvimento do kernel. Portanto, nenhum método específico está presente atualmente. Estou pedindo o parâmetro do módulo no meu driver para isso. você também pode solicitar uma variável ENV durante a compilação.
Obrigado pela ajuda...