我正在编写一个bash脚本来使用reposync从远程repos中提取包,所以我可以将我的节点指向本地.因此,我试图保持本地repo configs尽可能与usptream repo configs相似,如下所示:
# 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值.有点凌乱,寻找更优雅的方法.
alv*_*its 16
大多数发行版使用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.
您可以/etc/*-release通过检查与centos打包的文件来检查适合此代码的相应内容.
rpm -qf /etc/*-release
然后使用此文件而不是上面的第一行.
distro=/etc/centos-release
以下是OEL的一个示例,其中/etc/redhat-release打包为enterprise-release.
rpm -q --qf "%{name}" -f /etc/redhat-release
输出:
enterprise-release