【问题标题】:Avoid yum error when a package is already installed已安装软件包时避免 yum 错误
【发布时间】:2019-01-29 00:08:41
【问题描述】:

我在 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 实例上时,如何避免出现该错误?

【问题讨论】:

    标签: shell amazon-ec2 error-handling yum


    【解决方案1】:

    我后来找到了这个问题的答案,在这里发布它以帮助其他有类似问题的人。

    我改用重新安装:

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

    这将在第一次和所有其他部署时工作。

    编辑:

    如果没有安装包,上述方法不起作用,重新安装也会失败。我最终检测了该软件包是否已安装,如果没有,请安装它,否则重新安装:

    command: sudo yum -q list installed webcore-fonts.noarch &>/dev/null && sudo yum -y reinstall http://somesite.com/rpm/webcore-fonts-3.0-1.noarch.rpm || sudo yum -y install http://somesite.com/rpm/webcore-fonts-3.0-1.noarch.rpm
    

    【讨论】:

      【解决方案2】:

      使用packages 指令:

      packages:
        rpm:
          webcore-fonts: http://somesite.com/rpm/webcore-fonts-3.0-1.noarch.rpm
      

      这将处理未安装和已安装的场景。

      【讨论】:

        【解决方案3】:

        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 时的简单替代方案。

        【讨论】:

          猜你喜欢
          • 2021-06-04
          • 2021-05-13
          • 2014-10-26
          • 1970-01-01
          • 2017-10-23
          • 1970-01-01
          • 2018-09-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多