我正在编写一个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值。有点凌乱,寻找更优雅的方法。
答案 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