在一些Centos上,我需要删除一些MySQL包(通过yum),然后安装MariaDB (通过rpm),所有这些都是在一个shell脚本中完成的。我使用yum进行移除:
yum remove -y mysql-community-client
yum remove -y mysql-community-release
yum remove -y mysql-community-libs
yum remove -y mysql-community-common 现在,在一些VM上,可能客户端包没有安装,所以yum说:
No Match for argument: mysql-community-client
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=stock error was
14: PYCURL ERROR 7 - "couldn't connect to host" 我知道连接失败是因为我们的FireWall等等。
我的问题是:
可以让百胜忽略丢失的包裹吗?
或者至少在没有连接到镜像之类的情况下,No Match for argument就会失败?
问题标题指的是,yum remove -y mysql-community-client后面跟着yum remove -y mysql-community-client将使它连接到镜像,而我希望它说“已卸载的软件包”和“已卸载的软件包”。
重新定义问题:问题不是与RPM有关(我只提到为了问题的完整性),问题在于yum。如果安装了X,yum remove X将删除它。如果它没有安装,它将搜索我想要避免的镜像。我希望百胜说"X没有安装“并退出。
发布于 2015-11-04 14:04:11
我们可以长期讨论百胜如何表现或应该如何表现,但长话短说:
yum --cacheonly remove -y mysql-community-client可能是你想要的。
发布于 2015-11-04 20:09:13
如果我正确理解,您希望阻止网络访问,禁用插件,并且只卸载当前安装的mysql-community包。那你觉得呢
yum --disablerepo="*" --noplugins remove "*mysql-community*" -y这将只匹配与glob "*mysql-community*"匹配的任何已安装的包。尽管总的来说,我个人从来不会在-y标志和remove一起使用。
如果您只想在安装时有选择地卸载特定的包,那么托马斯的答复正是您所需要的。
发布于 2015-11-04 11:35:15
如果使用rpm而不是从yum存储库安装包,yum将不知道如何确定何时移除rpm,因为没有相关的存储库可供参考。所以其中的一部分(MariaDB)不能成为幂等的。
如果您想让脚本成为幂等的,更好的方法是对给定的包使用rpm -q来确定是否安装了它,并使用这个结果来决定是否运行yum。
如果您使用rpm安装软件包,yum不会立即通知您,但是当您要求它更新系统时,它会警告您RPM数据库是在yum之外安装的。因此,您应该使用yum install从您的RPM集安装MariaDB包。
https://unix.stackexchange.com/questions/240710
复制相似问题