linux 获取$releasever和$basearch值?

iyr7buue  于 2022-11-22  发布在  Linux
关注(0)|答案(2)|浏览(246)

我正在编写一个bash脚本,使用reposync从远程存储库中拉包,这样我就可以将节点指向本地拉包。因此,我试图使本地存储库配置尽可能与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值进行正则化。有点混乱,并寻找更优雅的方法。

ruoxqz4g

ruoxqz4g1#

大多数发行版使用distroverpkg版本来获取releasever和basesearch。
如果查看/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=$(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

相关问题