bha*_*avs 4 linux redhat operating-system
确定操作系统版本的常用方法似乎正在查看
/etc/*-release file
Run Code Online (Sandbox Code Playgroud)
*这里是特定版本的操作系统所属的家族。但是在 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)
Run Code Online (Sandbox Code Playgroud)
仅在上述文件不返回有效值的情况下才使用下面提到的替代方法:
lsb_release -a returns the same output as returned by enterprise-release
Run Code Online (Sandbox Code Playgroud)
更新 1:执行上下文
/etc/*-release 文件作为编程解决方案的一部分进行检查,* 的值由一个虚拟文件提供,该文件可以具有以下值:
asianux,enterprise,mandrake,redhat,UnitedLinux,Suse,SuSE
取决于上述场景中的出现顺序,因为企业首先出现 /etc/enterprise-release 文件被查询以查找操作系统版本 如果排序是在企业 /etc/redhat-release 之前出现的其他顺序,则将使用企业 /etc/redhat-release。
这似乎不是一个可行的解决方案,因此寻求其他更明确的方法来确定操作系统的版本。
lsb_release -a
Run Code Online (Sandbox Code Playgroud)
请参阅Linux 标准基础文档
根据您的问题,您提到这是一种替代方法,以防上述方法不起作用。您应该lsb_release先使用,因为它是标准。
此外,它应该返回比enterprise-release命令更多的信息,特别是 LSB 版本行(例如,lsb_release -v)
(Mandrake、AsianUX 和 UnitedLinux 是否仍然足以证明新软件的兼容性?)
请务必查看以下建议:我使用的是哪个版本的 RHEL?
但除此之外,看facter如果你有一些控制系统这个软件将上部署。如果这是将在您不管理的系统上交付和运行的软件,那么您可能必须处理操作系统检测。如果是你的公司/环境,facter是最干净的方法。
在处理 RHEL 及其衍生产品时,重要的是要知道分发生命周期努力维护次要版本之间的兼容性。例如,软件应该能够在 *EL5.4、5.8 和 5.10 上运行。不过,我认为这不是您的问题,因为您可能只关心操作系统“家庭”。
查看facter以下三个系统的输出。
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => RedHat
operatingsystemmajrelease => 5
operatingsystemrelease => 5.8
osfamily => RedHat
Run Code Online (Sandbox Code Playgroud)
和
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => CentOS
operatingsystemmajrelease => 5
operatingsystemrelease => 5.9
osfamily => RedHat
Run Code Online (Sandbox Code Playgroud)
和
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => CentOS
operatingsystemmajrelease => 6
operatingsystemrelease => 6.5
osfamily => RedHat
Run Code Online (Sandbox Code Playgroud)
它们是 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
Run Code Online (Sandbox Code Playgroud)
剪断
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"
}
Run Code Online (Sandbox Code Playgroud)
简而言之,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
Run Code Online (Sandbox Code Playgroud)
所以你这样做是正确的,或者至少是同样的方式facter。
| 归档时间: |
|
| 查看次数: |
28322 次 |
| 最近记录: |