यह इस प्रश्न का अनुसरण है । मैं एक Vagrant VM को प्रावधान करने के लिए Ansible का उपयोग करने की कोशिश कर रहा हूं। VM CentOS 6.4 चला रहा है। मैं निम्नलिखित (संक्षिप्त) संक्षिप्त पुस्तक का उपयोग कर रहा हूं:
- hosts: default
vars:
home: '/home/vagrant'
curl_version: '7_19_7'
curl_url: 'https://github.com/bagder/curl/archive/curl-{{ curl_version }}.tar.gz'
curl_dir: '{{ home }}/curl-curl-{{ curl_version }}'
# user: vagrant
remote_user: vagrant
sudo: yes
tasks:
- name: Ensure required packages and installed and up to date - pt1
yum: pkg={{ item }} state=present
with_items:
- make
- gcc
- etc...
# Lots more yum tasks in here
- name: Ensure CURL source downloaded
get_url: url={{ curl_url }} dest=/home/vagrant/curl-{{ curl_version }}.tar
- name: Extract CURL source
command: tar -zxf {{ home }}/curl-{{ curl_version }}.tar creates={{ curl_dir }}
- name: Copy ssh patch over
copy: src=./files/ssh.c.patch dest={{ home }}/ssh.c.patch
- name: Patch CURL with openssl
shell: patch -t {{ curl_dir }}/lib/ssh.c {{ home }}/ssh.c.patch chdir={{ curl_dir }}/lib
when: path_file_result.changed
- name: Build CURL with openssl
command: 'chdir={{ curl_dir }} "{{ item }}"'
with_items:
- ./buildconf
- ./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss
- make
- make install
- ldconfig
वैग्रंट ठीक काम कर रहा है और एन्सिबल प्लेबुक सफलतापूर्वक अंतिम कार्य 'ओपनसीएल के साथ CURL बनाएँ' तक चलता है - जो विफल रहता है, जैसे:
TASK: [Build CURL with openssl] ***********************************************
changed: [default] => (item=./buildconf) => {"changed": true, "cmd": ["./buildconf"], "delta": "0:00:10.709817", "end": "2014-02-07 02:26:44.802652", "item": "./buildconf", "rc": 0, "start": "2014-02-07 02:26:34.092835", "stderr": "configure.ac:78: installing `./compile'
configure.ac:73: installing `./config.guess'
configure.ac:73: installing `./config.sub'
configure.ac:65: installing `./missing'
Makefile.am: installing `./depcomp'
configure.ac:137: installing `./config.guess'
configure.ac:137: installing `./config.sub'
docs/examples/Makefile.am: installing `./depcomp'", "stdout": "buildconf: autoconf version 2.63 (ok)
buildconf: autom4te version 2.63 (ok)
buildconf: autoheader version 2.63 (ok)
buildconf: automake version 1.11.1 (ok)
buildconf: aclocal version 1.11.1 (ok)
buildconf: libtool version 2.2.6 (ok)
buildconf: libtoolize found
buildconf: GNU m4 version 1.4.13 (ok)
buildconf: running libtoolize
buildconf: running aclocal
buildconf: running aclocal hack to convert all mv to mv -f
buildconf: running autoheader
buildconf: cp lib/curl_config.h.in src/curl_config.h.in
buildconf: running autoconf
buildconf: running in ares
buildconf: running automake
buildconf: OK"}
failed: [default] => (item=./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss) => {"cmd": ["./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss"], "failed": true, "item": "./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss", "rc": 2}
msg: [Errno 2] No such file or directory
failed: [default] => (item=make) => {"changed": true, "cmd": ["make"], "delta": "0:00:00.001828", "end": "2014-02-07 02:26:45.003968", "item": "make", "rc": 2, "start": "2014-02-07 02:26:45.002140"}
stderr: make: *** No targets specified and no makefile found. Stop.
failed: [default] => (item=make install) => {"cmd": ["make install"], "failed": true, "item": "make install", "rc": 2}
msg: [Errno 2] No such file or directory
changed: [default] => (item=ldconfig) => {"changed": true, "cmd": ["ldconfig"], "delta": "0:00:00.009685", "end": "2014-02-07 02:26:46.096829", "item": "ldconfig", "rc": 0, "start": "2014-02-07 02:26:46.087144", "stderr": "", "stdout": ""}
FATAL: all hosts have already failed -- aborting
तो, ./buildconf
कदम काम करता है, लेकिन ./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss
कदम के साथ असफल हो रहा है [Errno 2] No such file or directory
। मुझे लगता है कि यह है क्योंकि यह पूरी स्ट्रिंग को चलाने की कोशिश कर रहा है जैसे कि यह एक ही आदेश था?
अगर मैं shell
इसके बजाय इसका उपयोग करने के लिए इसे बदल दूं command
, तो मुझे इसके बदले मिल जाएगा:
failed: [default] => (item=./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss) => {"changed": true, "cmd": " \"./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss\" ", "delta": "0:00:00.001171", "end": "2014-02-07 02:31:34.862373", "item": "./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss", "rc": 127, "start": "2014-02-07 02:31:34.861202"}
stderr: /bin/sh: ./configure --with-gssapi --with-libidn --with-libssh2 --prefix=/usr --without-nss: No such file or directory
मैंने सत्यापित किया है कि सभी कार्य उस बिंदु तक काम करते हैं, और फ़ाइलों को डाउनलोड किया जाता है और अपेक्षित स्थानों पर निकाला जाता है और पैच काम करता है ( यहां देखें )।
कार्य विफल होने के बाद (या यदि आप इसे टिप्पणी करते हैं), यदि आप एसएसएच में वीएम में कॉन्फ़िगर किए जा रहे हैं, और सभी समान चरणों को स्वयं चलाएं - प्लेबुक से सटीक मानों का उपयोग करके, यह काम करता है।
मैं अभी भी Ansible के लिए बहुत नया हूँ और मुझे यकीन नहीं है कि यह काम क्यों नहीं कर रहा है? मैं क्या गलत कर रहा हूं? क्या प्रारूप या उद्धरण का कोई रास्ता है जो configure
अलग-अलग आदेश देता है ताकि यह ठीक से व्याख्या हो जाए, अगर यह मुद्दा है? क्या मुझे इसके लिए उपयोग करना चाहिए raw
? या कुछ और?