Linux-Bash-Get$releasever和$basearch值?
我正在编写一个bash脚本,使用reposync从远程repos拉取包,这样我就可以将节点指向本地拉取。因此,我试图使本地回购配置尽可能与usptream回购配置相似,如下所示: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
# 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没有为此提供一个方便、有文档记录且稳定的界面,这是非常可笑的。