Linux-Bash-Get$releasever和$basearch值?

Linux-Bash-Get$releasever和$basearch值?,linux,bash,yum,Linux,Bash,Yum,我正在编写一个bash脚本,使用reposync从远程repos拉取包,这样我就可以将节点指向本地拉取。因此,我试图使本地回购配置尽可能与usptream回购配置相似,如下所示: # upstream baseurl=http://mirror.freedomvoice.com/centos/$releasever/os/$basearch/ # local baseurl=http://user:password@repo.example.com/centos/stable/$release

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

# 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

然后重新设置6/x86_64值。有点凌乱,正在寻找一种更优雅的方法。

大多数发行版都使用发行版获得Releaser和basearch

如果查看/etc/yum.conf,您将看到distrover被设置为redhat release(对于RHEL)、enterpriselinux 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版本

如果您获得的
文件不属于任何软件包
,请使用发行版附带的
/etc/*-release
文件。它可能是
/etc/centos发行版

rpm -q --qf "%{name}" -f /etc/redhat-release
您可以通过检查centos打包的文件来检查适合此代码的
/etc/*-release

rpm -qf /etc/*-release
然后使用此文件而不是上面的第一行

distro=/etc/centos-release
这里有一个来自OEL的示例,
/etc/redhat release
打包为
企业版

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

enterprise-release

上面示例中的
$basearch
$releasever
的值是多少?已安装:6/x86_64,6是releasever,x86_64是basearch。这在centos 6.x上似乎不起作用。我一直得到
未安装包redhat release
只要文件/etc/redhat release是包的一部分,您就可以更改查询。或者如果有/etc/centos版本。我将很快修改上面的代码。您的更新工作如所述。给a+1,如果没有其他结果,几天后接受。再次感谢。@CraigRinger-这个答案已经有一段时间了
basearch=$(rpm-eval%{{u arch})
即使在fedora上也能工作。@alvits确认。谢谢你。RH/Fedora没有为此提供一个方便、有文档记录且稳定的界面,这是非常可笑的。