Обычные методы определения версий ОС вроде бы просмотр
/etc/*-release file
* здесь будет семейство, к которому принадлежит конкретная версия ОС. Но в системе OEL присутствуют следующие файлы, и все они, похоже, возвращают действительные версии выпуска, в таких ситуациях существует определенный метод определения сведений о версии выпуска ОС:
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)
использование альтернатив, упомянутых ниже, используется только в том случае, если указанные выше файлы не возвращают допустимые значения:
lsb_release -a returns the same output as returned by enterprise-release
Обновление 1: контекст выполнения
Файл / etc / * - release рассматривается как часть программного решения, значение * предоставляется фиктивным файлом, который может иметь следующие значения:
asianux, enterprise, mandrake, redhat, UnitedLinux, Suse, SuSE
в зависимости от порядка появления в приведенном выше сценарии, поскольку предприятие появляется первым, запрашивается файл / etc / enterprise-release, чтобы найти версию ОС. В случае, если заказ был другим, с появлением redhat до использования Enterprise / etc / redhat-release.
Это не кажется жизнеспособным решением, поэтому требуется поиск других более определенных методов для определения версии ОС.
lsb_release -a
Видеть Стандартная базовая документация Linux
В соответствии с вашим вопросом вы упоминаете это как альтернативу, если вышеуказанное не работает. Вы должны использовать lsb_release
во-первых, так как это стандарт.
Также он должен возвращать больше информации, чем enterprise-release
команда, в частности строка LSB Version (например, lsb_release -v
)
(Достаточно ли Mandrake, AsianUX и UnitedLinux для подтверждения совместимости нового программного обеспечения?)
Обязательно проверьте предложения по адресу: Какую версию RHEL я использую?
Но помимо этого, посмотрите на фасад если у вас есть некоторый контроль над системами, на которых будет развернуто это программное обеспечение. Если это программное обеспечение, которое будет поставляться и запускаться в системах, которыми вы не управляете, вам, вероятно, придется обрабатывать обнаружение ОС. Если это является ваша компания / среда, facter
это самый чистый метод.
Имея дело с RHEL и его производными, важно знать, что жизненный цикл дистрибутива стремится поддерживать совместимость между второстепенными выпусками. Таким образом, программное обеспечение должно работать, например, на * EL5.4, 5.8 и 5.10. Я не думаю, что это ваша проблема, поскольку вы, вероятно, заботитесь только о «семействе» ОС.
Посмотрите на facter
вывод из следующих трех систем.
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => RedHat
operatingsystemmajrelease => 5
operatingsystemrelease => 5.8
osfamily => RedHat
и
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => CentOS
operatingsystemmajrelease => 5
operatingsystemrelease => 5.9
osfamily => RedHat
и
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => CentOS
operatingsystemmajrelease => 6
operatingsystemrelease => 6.5
osfamily => RedHat
Это CentOS и RHEL версий 5.8, 5.9 и 6.5. Но я думаю, что вас, вероятно, волнует только то, что они производные от RedHat. Я бы использовал osfamily
и, возможно, operatingsystemmajrelease
факт.
Взгляните на процедуру обнаружения ОС, которая facter
использует ... https://github.com/puppetlabs/facter/blob/master/lib/facter/operatingsystem/linux.rb
отрезать
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
отрезать
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"
}
Короче говоря, обнаружение Oracle Enterprise Linux полностью зависит от наличия /etc/enterprise-release
.
[root@xt ~]# facter osfamily
RedHat
[root@xt ~]# facter operatingsystem
CentOS
[root@xt ~]# touch /etc/enterprise-release
[root@xt ~]# facter operatingsystem
OEL
Значит, вы делаете это правильно или, по крайней мере, так же facter
делает.
Не существует окончательных / стандартных методов, которые будут работать во всех основных дистрибутивах. Вам придется использовать дополнительный код, чтобы понять это насколько вам известно (исходя из того, как вы понимаете, каждый дистрибутив делает эту информацию доступной).
Если это сценарий установки, дайте пользователю возможность указать его вручную. Если хочешь быть супер милым, попробуй понять это сам и просто попроси подтверждения.
Если это программа, которая будет что-то проверять (и, следовательно, должна искать их в разных местах), предоставьте вариант файла конфигурации или параметр командной строки, чтобы указать, какой дистрибутив используется.
Другие предлагаемые решения великолепны, но вы будете зависеть от кода / пакетов, которые могут быть недоступны повсюду (особенно facter, который на сегодняшний день является наиболее полным инструментом для сбора информации о среде).
uname -a
(Распечатать всю информацию)
uname -r
(Вывести имя ядра)
cat /etc/issue
cat /etc/redhat-release
lsb_release –a
tail /etc/redhat-releas