Ansible: apt: update_cache = yes fallando en ansible 1.3 (?)

Creado en 17 sept. 2013  ·  18Comentarios  ·  Fuente: ansible/ansible

Recibo un nuevo error en 1.3 al ejecutar

apt: update_cache=yes:

rendimientos

msg: Failed to lock apt for exclusive operation

Pero, puedo ejecutar sudo apt-get update en el nodo sin problemas y esto funcionó antes de la actualización a 1.3 La falla ocurrió en más de un nodo.

Volví a ansible 1.2.3 y el problema desapareció.

En la lista de correo, algunos sugirieron que esto se debía a que no se estaba invocando sudo.

Estoy ejecutando Ubuntu 12.04 en el nodo que se controla.

Estoy usando roles (no actualizados para cambios en 1.3).

Un archivo node.yml de nivel superior define los roles:

- name: apply common configuration to all nodes
  hosts: all
#  connection: fireball

  roles:
    - common

Parece que nada en esa cadena en particular invoca sudo, lo cual definitivamente es incorrecto. No entiendo por qué funcionó antes de la versión 1.3. En otros lugares, invoco específicamente sudo cuando es necesario.

Creo que 1.3 permite usar sudo por rollo más fácilmente; tendré que investigar eso.

bug

Comentario más útil

Ubuntu 16.04

Para el usuario de Ubuntu 16.04 (aunque creo que también podría suceder en la versión 15.04), Ubuntu se envía con unattended-upgrade habilitado _de forma predeterminada_. Comprueba regularmente las actualizaciones de seguridad (generalmente a diario), como lo menciona @bcoca. Entonces, la solución es agregar una tarea antes de tocar APT:

- name: kill automatic updating script, if any
  command: pkill --full /usr/bin/unattended-upgrade
  become: true
  register: kill_result
  failed_when: kill_result.rc > 1 # rc == 1 if the script is inactive
  changed_when: kill_result.rc == 0

Debería ser seguro, ya que el sistema volverá a ejecutar el script más tarde.

Todos 18 comentarios

¿Cómo estás invocando ansible-playbook, con -K? Hubo un cambio en 1.3 que indica que sudo debe especificarse explícitamente ya que el indicador -K no hará que las tareas usen sudo implícitamente.

Sí, estaba usando -K y usando sudo explícitamente en la mayoría de los lugares, pero no en
este caso específico. Entonces, ese es probablemente el isse.

Muy respetuosamente,

Dan CaJacob

El martes, 17 de septiembre de 2013 a las 4:23 p.m., James Cammarata
[email protected]ó :

¿Cómo estás invocando ansible-playbook, con -K? Hubo un cambio en 1.3
que sudo debe especificarse explícitamente ya que el indicador -K no hará tareas
use sudo implícitamente.

-
Responda a este correo electrónico directamente o véalo en Gi
.

Ok, te dejaré confirmar eso y si es así cerraremos esto. ¡Gracias!

Lo haré. ¡Gracias!

Muy respetuosamente,

Dan CaJacob

El martes, 17 de septiembre de 2013 a las 4:27 p.m., James Cammarata
[email protected]ó :

Ok, te dejaré confirmar eso y si es así cerraremos esto. ¡Gracias!

-
Responda a este correo electrónico directamente o véalo en Gi
.

¿Algún seguimiento a esto?

Continuando y cerrando esto, si aún tiene un problema, háganoslo saber. ¡Gracias!

También me encuentro con este problema. Ejecutando 1.3.2 pero no tengo referencias de versiones antiguas.

Al usar -K, obtengo otro error: la conexión ssh se cerró esperando la solicitud de contraseña de sudo.

Al final, necesito ejecutar esto no en modo interactivo, por lo que -K no puede ser la respuesta final.

Más detalles: ejecución manual: host1. *** es el FQDN redactado

vagrant @ ansible-head : ~ $ sudo -u vagrant ansible-playbook -i inventario ubuntu-apache2.yaml

PLAY [servidor web] * * * * * * * * * * * * * * * * * * * *

REUNIENDO HECHOS * * * * * * * * * * * * * * * * * * * *
ok: [host1. **]

TAREA: [Actualizaciones caché de apt] * * * * * * * * * * * * * * * *
fallido: [host1. **] => {"fallido": verdadero}
msg: no se pudo bloquear apto para operación exclusiva

FATAL: todos los hosts ya han fallado - abortando

JUGAR CRÓNICA * * * * * * * * * * * * * * * * * * * * * *
para volver a intentarlo, use: --limit @ / home / vagrant / ubuntu-apache2.yaml.retry

host1. ***: ok = 1 cambiado = 0 inaccesible = 0 fallido = 1

Ejecutar manualmente ansible obtiene el mismo error:

vagrant @ ansible-head: ~ $ sudo -u vagabundo ansible webserver -i inventario -m apt -a "update_cache = yes
"
host1. *** | FALLIDO >> {
"fallido": cierto,
"msg": "No se pudo bloquear apto para operación exclusiva"
}

@Ravenwater Eso parece ser un problema diferente, ¿podría abrir un nuevo problema de github para él? Es posible que también desee preguntar en la lista de correo para ver si otros se han encontrado con eso. ¡Gracias!

Tengo un problema similar con ansible 1.3.4.

Si uso:

apt: update_cache=yes:

Recibo el mismo mensaje de error:

msg: Failed to lock apt for exclusive operation

También al instalar un paquete con la opción update_cache:

apt: pkg=openjdk-6-jre-headless state=installed update_cache=yes cache_valid_time=604800

Se muestra un error similar:

msg: 'apt-get install 'openjdk-6-jre-headless' ' failed: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

El error aparece de forma intermitente. De hecho, usando un conjunto de 50 máquinas virtuales EC2 con ubuntu 12.04 (todas usando la misma imagen base, ami-e50e888c). El error aparece de 5 a 20 según la prueba.

"sudo: true" se especifica en el libro de jugadas.

Esto suele ser exactamente como dice el mensaje, o no tiene
permisos para bloquear la base de datos dpkg u otra persona (o usted en otro proceso)
lo ha bloqueado (esto me pasa si controlo + C en el medio e intento
otra vez).

Si. Pero usándolo con 50 VM con el mismo SO con la misma configuración en algunos de ellos funciona y en otros falla. Además, si vuelvo a intentar el libro de jugadas 3 o 4 veces, finalmente funciona en todos los nodos.

@micafer ¿ es posible que otros usuarios / procesos estén llamando a apt al mismo tiempo en esas máquinas?

Lo estoy probando con un conjunto de 50 máquinas virtuales creadas especialmente para estas pruebas, y soy el único usuario en todas.
No sé si ubuntu tiene algún proceso interno (cron o similar) que usa los comandos apt.

ubuntu tiene actualizaciones de caché cronned diariamente, normalmente escalonadas para no
crear un problema de 'manada atronadora', si ha instalado y desatendido
habilitado, también obtendrá actualizaciones de seguridad automáticas que también bloquearán
esta.

Votaría a favor de reabrir este problema ya que en la vida real existe una gran posibilidad de que esto suceda y ansible debería proporcionar una solución para ello, una solución que no involucre a un humano que lo intente hasta que funcione.

Ubuntu 16.04

Para el usuario de Ubuntu 16.04 (aunque creo que también podría suceder en la versión 15.04), Ubuntu se envía con unattended-upgrade habilitado _de forma predeterminada_. Comprueba regularmente las actualizaciones de seguridad (generalmente a diario), como lo menciona @bcoca. Entonces, la solución es agregar una tarea antes de tocar APT:

- name: kill automatic updating script, if any
  command: pkill --full /usr/bin/unattended-upgrade
  become: true
  register: kill_result
  failed_when: kill_result.rc > 1 # rc == 1 if the script is inactive
  changed_when: kill_result.rc == 0

Debería ser seguro, ya que el sistema volverá a ejecutar el script más tarde.

Solo un comentario de que no funcionó para mí, el bloqueo permaneció en su lugar incluso con el comando anterior. Pero como estoy implementando en EC2, simplemente actualicé mi imagen base eliminando manualmente unattended-upgrades .

¿Fue útil esta página
0 / 5 - 0 calificaciones