我正在使用一组本地 yum 存储库,并尝试从这些存储库安装一组软件包。我注意到,当命令行上的某个包不存在时,Yum 只是打印出它没有找到,然后继续它的快乐方式。
当这种情况发生时我可以让 Yum 退出吗?是否有其他一些 Yum 实用程序可以用来给它我的存储库和包并告诉我是否有问题?
yum --disablerepo=* --enablerepo=myrepo --nogpgcheck \
--installroot=/var/some/place/test install \
abasdfasfeafseasfeasef bash coreutils utils-linux
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
No package **abasdfasfeafseasfeasef** available.
No package **utils-linux** available.
<snip>
Complete!
我从另一个脚本调用 Yum,但似乎无法判断我安装的软件包是否是真的安装。
答案1
现代版本的 yum (yum-3.4.3-133.el7+,票)提供了两个应该有助于此用例的选项:
安装时跳过缺失名称如果设置为 False,如果找不到任何提供的名称(程序包、组、rpm 文件),“yum install”将会失败。布尔值(1、0、True、False、是、否)。默认为 True。
更新时跳过缺失名称如果设置为 False,如果找不到任何提供的名称(程序包、组、rpm 文件),“yum update”将会失败。如果提供的名称是可用但未安装的包,它也会失败。布尔值(1、0、True、False、是、否)。默认为 True。
来源:手册页
用法:
yum --setopt=skip_missing_names_on_install=False <commands-here>
答案2
尝试使用 dnf 而不是 yum,如果软件包无法像 yum 以前那样可用,则会失败。在 CentOS 上,您可以通过以下方式安装它:
yum -y install epel-release && \
yum -y install dnf
然后在丢失的包上你会得到一个错误:
dnf -y install foobar
Error: no package matched: foobar
答案3
我不知道 yum,但你可以使用 询问是否安装了软件包rpm -q my_package ...
。如果缺少任何包,它将以失败状态退出。
$ rpm -q abasdfasfeafseasfeasef bash coreutils utils-linux
package abasdfasfeafseasfeasef is not installed
bash-4.1.2-9.el6_2.x86_64
coreutils-8.4-19.el6.x86_64
package utils-linux is not installed
$ echo $?
1
$ rpm -q bash
bash-4.1.2-9.el6_2.x86_64
$ echo $?
0