如何获取 redhat 或 CentOS 发行版本号?
第一种方法,也是最容易想到的方法是查看 /etc/issue 和 /etc/redhat-release这两个文件,这两个文件都差不多,都含有发行号
第二种方法是使用命令,在RHEL 5 或 CentOS 5 中有个命令: lsb-release,通过这个命令可以查到,不过在RHEL 6就没这么幸运了,在我的最小化系统中找不到这个命令,看来此路又不通了。
不过有一个线索, 那就是在CentOS自带的yum源文件中使用了 $releasever , $basearch等这些变量, 奇怪的是这些变量的值是从哪获取的呢?
Google 一下之后,说明Yum变量的说明可以在这里(5.3.3. Using YumVariables)找到,说明如下:
Using Yum Variables
You can use and reference the following built-in variables inyum commands and in all Yum configuration files (that is,/etc/yum.conf and all .repo files in the /etc/yum.repos.d/directory):
$releasever
You can use this variable to reference the release version of Red Hat Enterprise Linux. Yum obtains the value of $releasever from the distroverpkg=value line in the /etc/yum.conf configuration file.
If there is no such linein /etc/yum.conf, then yum infers the correct value by deriving theversion number from the redhat-release package.
$arch
You can use this variable to refer to the system’s CPU architecture as returned when calling Python’s os.uname() function.Valid values for $arch include: i586, i686 and x86_64.
$basearch
You can use $basearch to reference the base architecture ofthe system.
For example, i686 and i586 machines both have a base architecture of i386, and AMD64 and Intel64 machines have a base architecture of x86_64.
$YUM0-9
These ten variables are each replaced with the value of anyshell environment variables with the same name.
If one of the sevariables is referenced (in /etc/yum.conf for example) and a shell environment variable with the same name does not exist, then the configuration file variable is not replaced.
To define a custom variable or to override the value of anexisting one, create a file with the same name as the variable(without the “$” sign) in the /etc/yum/vars/ directory, and add the desired value on its first line.
For example, repository descriptions often include the operating system name. To define a new variable called $osname,create a new file with “Red Hat Enterprise Linux” on the first lineand save it as /etc/yum/vars/osname:
# echo “Red Hat Enterprise Linux” >/etc/yum/vars/osname
Instead of “Red Hat Enterprise Linux 6”, you can now use the following in the .repo files:
name=$osname $releasever
文中说到$releasever的定义可以查看 /etc/yum.conf 文件的事distroverpkg=value行,打开 /etc/yum.conf 看一下
# cat /etc/yum.conf
distroverpkg=centos-release 代表什么? 去哪找 centos-release?
在 /etc/yum.repos.d/ 目录下的软件库定义文件中,常常会在 baseurl 的路径中提到$releasever 这个变量,表示当前发行版的大版本号,但这个变量是在哪设置的呢?
distroverpkg 和 releasever 名字不同,且看不出什么联系,distroverpkg的值,并不是明文,而是“centos-release”。
大家看到这个会有什么想法,首先想到的应该是 /etc/redhat-release 文件,实际上指的是 centos-release这个RPM包。
“distroverpkg=centos-release”的意思,其实是将 $releasever 设置为 redhat-release 这个RPM包的版本号
yum中的$releasever变量是取centos-release这个人rpm软件包的属性值( %{version})。
# rpm -qi centos-release
# rpm -q --qf %{version} centos-release;echo
# rpm -q --qf %{arch} centos-release;echo
# rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' nfs-utils rpcbind