安装软件包后避免sudo yum错误?

时间:2019-01-29 00:08:42

标签: amazon-ec2 yum

我在Linux机器上使用AWS Elastic Beanstalk,需要在.ebextensions中安装一些字体:

container_commands:
  01_getfont: 
    command: sudo yum -y install http://somesite.com/rpm/webcore-fonts-3.0-1.noarch.rpm

第一次安装字体后效果很好。

第二次再次部署EB时,它给了我这个错误:

应用程序更新在2019-01-28T23:44:14Z失败,退出状态为1并且错误:.ebextensions / fonts.config中的container_command 01_getfont失败。

Loaded plugins: priorities, update-motd, upgrade-helper
Examining /var/tmp/yum-root-0Yx1DY/webcore-fonts-3.0-1.noarch.rpm: webcore-fonts-3.0-1.noarch
/var/tmp/yum-root-0Yx1DY/webcore-fonts-3.0-1.noarch.rpm: does not update installed package.
Error: Nothing to do. 

当该软件包第二次安装在同一EC2实例上时,如何避免出现该错误?

2 个答案:

答案 0 :(得分:1)

对于不是真正错误的事情,Yum可以返回非零退出状态,从而导致诸如Elastic Beanstalk之类的更高级别的系统认为脚本已失败。

尤其是,yum有时会说“无所事事”,退出状态为1-这可能意味着各种情况,但包括已经安装了必需软件包的情况。

对于使用yum的脚本,我的解决方法是:

    yum -y install somepackage
    if [ $? -ne 1 ]; then   # Exit on any any error except 'nothing to do' 
      exit 0
    fi

一种更简单的方法是通过添加trueexit 0命令来忽略所有错误-但是,当Yum存储库无法访问或Yum过时时,这最终会咬住你元数据等

高级提示

如果您有几个yum命令或更多错误代码要处理,则可能需要阅读shell trap命令,特别是EXITERR上的命令,它可以使您处理这些情况放在一个地方,并且可能不会因不必要的错误而退出。有关更多信息,请参见this stack

替代本地安装

有关更多信息,请参见this answer,其中包括安装已下载的RPM时的一种简单选择。

答案 1 :(得分:0)

我稍后找到了这个问题的答案,将其发布在这里是为了让其他有类似问题的人受益。

我改用重新安装:

sudo yum -y reinstall http://somesite.com/rpm/webcore-fonts-3.0-1.noarch.rpm

这将在部署的第一次和所有其他时间生效。