Linux - Bash - 获取$ releasever和$ basearch值?

时间:2014-01-08 06:22:31

标签: linux bash yum

我正在编写一个bash脚本来使用reposync从远程repos中提取包,因此我可以将我的节点指向本地。因此,我试图保持本地回购配置与usptream repo配置尽可能相似,如下所示:

# upstream
baseurl=http://mirror.freedomvoice.com/centos/$releasever/os/$basearch/

# local
baseurl=http://user:password@repo.example.com/centos/stable/$releasever/os/$basearch/

在bash脚本中,是否有更简洁的方法来获取$ releasever和$ basearch值?我正在考虑做以下事情:

yum_metadata=$(yum version nogroups)

返回:

Loaded plugins: versionlock Installed: 6/x86_64 360:6167019baac7e76f94c26320424dc41a7f046a70 version

然后regexing为6 / x86_64值。有点凌乱,寻找更优雅的方法。

1 个答案:

答案 0 :(得分:15)

大多数发行版使用distroverpkg版本来获取发布者和basearch。

如果查看/etc/yum.conf,您会看到发行版设置为redhat-release(对于RHEL),enterpriseelinux-release(对于OEL)以及其他。

获取包名称:

distro=$(sed -n 's/^distroverpkg=//p' /etc/yum.conf)

获得释放者:

releasever=$(rpm -q --qf "%{version}" -f /etc/$distro)

获得basearch:

basearch=$(rpm -q --qf "%{arch}" -f /etc/$distro)

上面的新代码将尝试获取与文件/etc/$distro关联的包。有些Linux将/etc/redhat-release添加到他们的软件包版本中。

如果您获得file not owned by any package,请使用发行版附带的/etc/*-release文件。可能是/etc/centos-release

您可以通过查看与centos打包的文件来检查适用于此代码的相应/etc/*-release

rpm -qf /etc/*-release

然后使用此文件而不是上面的第一行。

distro=/etc/centos-release

以下是OEL的示例,其中/etc/redhat-release打包为enterprise-release

rpm -q --qf "%{name}" -f /etc/redhat-release

输出:

enterprise-release