首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >百胜移除不是幂等的

百胜移除不是幂等的
EN

Unix & Linux用户
提问于 2015-11-04 11:09:18
回答 3查看 1.6K关注 0票数 1

在一些Centos上,我需要删除一些MySQL包(通过yum),然后安装MariaDB (通过rpm),所有这些都是在一个shell脚本中完成的。我使用yum进行移除:

代码语言:javascript
复制
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说:

代码语言:javascript
复制
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没有安装“并退出。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2015-11-04 14:04:11

我们可以长期讨论百胜如何表现或应该如何表现,但长话短说:

代码语言:javascript
复制
yum --cacheonly remove -y mysql-community-client

可能是你想要的。

票数 1
EN

Unix & Linux用户

发布于 2015-11-04 20:09:13

如果我正确理解,您希望阻止网络访问,禁用插件,并且只卸载当前安装的mysql-community包。那你觉得呢

代码语言:javascript
复制
yum --disablerepo="*" --noplugins remove "*mysql-community*" -y

这将只匹配与glob "*mysql-community*"匹配的任何已安装的包。尽管总的来说,我个人从来不会在-y标志和remove一起使用。

如果您只想在安装时有选择地卸载特定的包,那么托马斯的答复正是您所需要的。

票数 1
EN

Unix & Linux用户

发布于 2015-11-04 11:35:15

如果使用rpm而不是从yum存储库安装包,yum将不知道如何确定何时移除rpm,因为没有相关的存储库可供参考。所以其中的一部分(MariaDB)不能成为幂等的。

如果您想让脚本成为幂等的,更好的方法是对给定的包使用rpm -q来确定是否安装了它,并使用这个结果来决定是否运行yum。

如果您使用rpm安装软件包,yum不会立即通知您,但是当您要求它更新系统时,它会警告您RPM数据库是在yum之外安装的。因此,您应该使用yum install从您的RPM集安装MariaDB包。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/240710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档