Я пишу общий код в драйвере, чтобы получить имя дистрибутива и имя хоста. Имя хоста я беру из struct utsname{nodename[]}
, но как мне получить имя дистрибутива?
решение1
Большинство программ и скриптов, которые я видел, анализируют обычные файлы в /etc
формате . Насколько мне известно, другого способа нет:
On Redhat, look for /etc/redhat-release
On Debian, look for /etc/debian_version
Mandriva has /etc/version
and Slackware has /etc/slackware-version
Вы также можете использовать uname
для получения ARCH
или, что, вероятно, наиболее разумный способ, использовать lsb_release
.
решение2
Вы можете посмотреть, как это делает facterздесь.
Как сказал Ян, lsb_release, вероятно, лучший способ, но он не может быть единственным. Например, lsb_release не присутствует по умолчанию ни на одном из моих серверов 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
Итак, если lsb_release отсутствует в системе, то следующим шагом будет получение информации из файла /etc/*-release. Однако, если и его нет в системе, то вам не повезло. К сожалению, не существует 100% надежного способа получить эту информацию.
решение3
Область действия для получения имени дистрибутива не входит в область разработки ядра. Поэтому в настоящее время нет конкретного метода. Для этого я запрашиваю параметр модуля в моем драйвере. Вы также можете запросить переменную ENV во время компиляции.
Спасибо за вашу помощь...