1 votes

Packer avec ansible depuis le local fonctionne mais depuis un autre serveur demande les permissions root

Pour un peu de contexte, j'utilise packer avec un provisionneur ansible pour créer des images AMI sur AWS.

Les parties pertinentes du packer et de l'ansible :

packer.json

"provisioners": [{
  "type": "shell",
  "inline": [
    "sleep 15",
    "sudo apt-get update",
    "sudo apt-get install -y aptitude python"
  ]
}, {
  "type": "ansible",
  "playbook_file": "../provision/ansible-playbook.yml",
  "groups": ["webworker"],
  "extra_arguments": [
    "--become-method=sudo"
  ]
}]

tasks.yml

- name: Install tools
  become: true
  apt:
    name: "{{ item }}"
    state: latest
  with_items:
    - build-essential
    - git

Sur ma machine locale, tout se passe bien.

Mais dans le cadre d'un CI, nous utilisons notre serveur Jenkins pour exécuter ce packer script mais il échoue sur la première tâche ansible qui a un become en place, dans ce cas la première étape est d'installer quelques outils via apt module :

amazon-ebs:         "W: chmod 0700 of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (1: Operation not permitted)",
amazon-ebs:         "E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)",
amazon-ebs:         "E: Unable to lock directory /var/lib/apt/lists/",
amazon-ebs:         "W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)",
amazon-ebs:         "W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)",
amazon-ebs:         "E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)",
amazon-ebs:         "E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?"

J'ai vérifié les autorisations, l'utilisateur, et même s'il y avait un autre utilisateur, j'ai vérifié les autorisations. apt en cours d'exécution en arrière-plan qui avait le verrou : rien.

La chose la plus intéressante est que si je remplace l'ansible par un command con sudo aptitude ... cela fonctionne, et aussi qu'avant la tâche ansible il y a un Shell provisioner qui s'exécute aussi apt-get sans erreur.

Encore une fois, cela fonctionne à partir de ma machine (et de deux autres ordinateurs), mais pas à partir d'un serveur. Je n'ai pas de fichier ansible.cfg sur aucune machine (même pas celle par défaut).

2voto

Bogdan Points 374

J'ai rencontré ce problème en utilisant packer pour créer une AMI AWS pour Ubuntu 16.04. Utilisez-vous Ubuntu ?

Ubuntu 16.04 exécute par défaut uattended-upgrades automatiquement (hors de la boîte). Ce qui se passe, c'est que la première fois qu'une boîte est mise en service, unattended-upgrades verrouille apt (voir /var/lib/dpkg/lock), et les scripts de provisionnement se trompent s'ils installent quoi que ce soit via apt.

Voir ici pour plus de détails https://github.com/ansible/ansible/issues/4355#issuecomment-286184925

Aussi ici:- https://github.com/geerlingguy/packer-ubuntu-1604/issues/3

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X