由于 Centos6 上的 GMP 软件包版本导致的 Ansible 错误

Posted

技术标签:

【中文标题】由于 Centos6 上的 GMP 软件包版本导致的 Ansible 错误【英文标题】:Ansible error due to GMP package version on Centos6 【发布时间】:2014-08-04 07:32:15 【问题描述】:

我有一个基于CentOS(标签:centos6)构建映像的 Dockerfile:

FROM centos

RUN rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN yum update -y
RUN yum install ansible -y

ADD ./ansible /home/root/ansible

RUN cd /home/root/ansible;ansible-playbook -v -i hosts site.yml

在 Docker 到达最后一行之前一切正常,然后我收到以下错误:

 [WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (ie. yum update gmp).


PLAY [all] ******************************************************************** 

GATHERING FACTS *************************************************************** 
Traceback (most recent call last):
  File "/usr/bin/ansible-playbook", line 317, in <module>
    sys.exit(main(sys.argv[1:]))
  File "/usr/bin/ansible-playbook", line 257, in main
    pb.run()
  File "/usr/lib/python2.6/site-packages/ansible/playbook/__init__.py", line 319, in run
    if not self._run_play(play):
  File "/usr/lib/python2.6/site-packages/ansible/playbook/__init__.py", line 620, in _run_play
    self._do_setup_step(play)
  File "/usr/lib/python2.6/site-packages/ansible/playbook/__init__.py", line 565, in _do_setup_step
    accelerate_port=play.accelerate_port,
  File "/usr/lib/python2.6/site-packages/ansible/runner/__init__.py", line 204, in __init__
    cmd = subprocess.Popen(['ssh','-o','ControlPersist'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Stderr from the command:

    package epel-release-6-8.noarch is already installed

我想错误的原因是 gmp 包不是最新的。 GitHub上有一个相关问题:https://github.com/ansible/ansible/issues/6941

但目前似乎没有任何解决方案... 有任何想法吗 ? 提前致谢!

我的site.yml 剧本:

- hosts: all

  pre_tasks:
    - shell: echo 'hello'

【问题讨论】:

这看起来不像 gmp 与我的问题有关。看起来 ssh 命令在我不存在的文件上失败。 我不确定在这种情况下该怎么做。我的Dockerfile 是相当基本的,所以它不应该真的阻塞 ssh 连接吗? 该问题似乎来自 ansible-playbook 本身。 hosts 文件是否存在于 ansible-playbook 正在寻找的任何地方?除此之外,还需要更熟悉 ansible(或者可能是 docker,尽管我对此表示怀疑)的人需要参与进来。 【参考方案1】:

确保文件site.ymlhosts 存在于您要添加到/home/root/ansible 的目录中。

旁注,您可以使用WORKDIR 来简化您的Dockerfile:

WORKDIR /home/root/ansible
RUN ansible-playbook -v -i hosts site.yml

【讨论】:

以上是关于由于 Centos6 上的 GMP 软件包版本导致的 Ansible 错误的主要内容,如果未能解决你的问题,请参考以下文章

CentOS6 安装gnutls

在64位Linux上安装32位gmp大数库

centos6.4编译gcc6.4

带有 msys 的 Windows 上的 GMP

Solr6.5在Centos6上的安装与配置

CentOS 6 上的 Node.js 0.12.0(通过 rpm)