Projet

Général

Profil

Bug #29422

create pg role: failed to set permissions on the temporary files

Ajouté par Christophe Siraut il y a plus de 5 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
03 janvier 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Ansible utilise le dossier temporaire /var/tmp qui n'est pas accessible en écriture par l'utilisateur postgres:

TASK [base : create the postgresql user named chris] ***********************************************************************************************************
fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo /var/tmp/ansible-tmp-1546513542.98-197608769648811 `\" && echo ansible-tmp-1546513542.98-197608769648811=\"` echo /var/tmp/ansible-tmp-1546513542.98-197608769648811 `\" ), exited with result 1", "unreachable": true}

Ceci peut être corrigé en utilisant /tmp (voir aussi le commentaire dans le code https://github.com/ansible/ansible/blob/stable-2.5/lib/ansible/plugins/shell/__init__.py#L130) :

diff --git a/ansible.cfg b/ansible.cfg
index d7649f6..3d7c3eb 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -1,2 +1,3 @@
 [defaults]
-hash_behaviour = merge
\ No newline at end of file
+hash_behaviour = merge
+remote_tmp = /tmp

Ensuite la plomberie ansible tente de faire un chown en temps que postgres, ce qui échoue. (J'imagine que la commande "become" n'est pas pensée pour être utilisée avec un utilisateur non-privilégié)

TASK [base : create the postgresql user named chris] ***********************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user (rc: 1, err: chown: changing ownership of '/var/tmp/ansible-tmp-1546513871.09-139933543405812/': Operation not permitted\nchown: changing ownership of '/var/tmp/ansible-tmp-1546513871.09-139933543405812/postgresql_user.py': Operation not permitted\n}). For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user"}

Je n'ai pas trouv^Wcherché de solution propre pour utiliser le plugin postgresql sur debian, en hotfix j'ai exécuté le script à la main et commenté la tache dans roles/base/tasks.

sudo chown -R postgres /var/tmp/ansible-tmp-1546513871.09-139933543405812
sudo -u postgres python /var/tmp/ansible-tmp-1546513871.09-139933543405812/postgresql_user.py

Fichiers

0001-install-package-acl-29422.patch (584 octets) 0001-install-package-acl-29422.patch Christophe Siraut, 03 janvier 2019 16:12

Demandes liées

Lié à Publik Installation Développeur - Bug #28231: Erreur sur création de role et db postgres Fermé21 novembre 2018

Actions

Révisions associées

Révision adaed61e (diff)
Ajouté par Votre Nom il y a plus de 5 ans

install package acl (#29422)

Révision eb4ed38d (diff)
Ajouté par Christophe Siraut il y a plus de 5 ans

install package acl (#29422)

Historique

#1

Mis à jour par Christophe Siraut il y a plus de 5 ans

  • Lié à Bug #28231: Erreur sur création de role et db postgres ajouté
#2

Mis à jour par Frédéric Péters il y a plus de 5 ans

Ansible utilise le dossier temporaire /var/tmp qui n'est pas accessible en écriture par l'utilisateur postgres:

Ça me semble curieux et je viens de regarder sur différentes machines sans constater ça.

#3

Mis à jour par Emmanuel Cazenave il y a plus de 5 ans

Ça se passe sur quelle version de debian ?

Tu lances ansible comme décrit dans https://doc-publik.entrouvert.com/dev/installation-developpeur/ ou il y a des subtilités ?

#4

Mis à jour par Christophe Siraut il y a plus de 5 ans

Même type d'erreur pour une autre tâche. J'utilise un conteneur stretch avec ansible backports (2.6.3). J'ai suivi la procédure.

TASK [app-setup : hobo - create db] ****************************************************************************************************************************
task path: /home/chris/src/publik-devinst/roles/app-setup/tasks/main.yml:7
fatal: [localhost]: FAILED! => {"msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user (rc: 1, err: chown: modification du propriétaire de '/tmp/ansible-tmp-1546523021.18-218678817496734/': Opération non permise\nchown: modification du propriétaire de '/tmp/ansible-tmp-1546523021.18-218678817496734/postgresql_db.py': Opération non permise\n}). For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user"}
    to retry, use: --limit @/home/chris/src/publik-devinst/install.retry
#5

Mis à jour par Frédéric Péters il y a plus de 5 ans

Ça dit que ça ne peut pas faire de chown, pas que les permissions du répertoire sont mauvaises.

#6

Mis à jour par Christophe Siraut il y a plus de 5 ans

Ça dit que ça ne peut pas faire de chown, pas que les permissions du répertoire sont mauvaises.

Déso pour la confusion (j'aurais pu créer deux tickets séparés).

Chez moi les tâches ansible avec "become: yes" et "become_user: postgres" :

  • tentent et échouent à utiliser /var/tmp pour stocker les fichiers temporaires, ce que j'ai corrigé en posant "remote_tmp = /tmp" dans ansible.cfg
  • tentent et échouent à faire un chown en temps que "postgres".
#7

Mis à jour par Frédéric Péters il y a plus de 5 ans

tentent et échouent à utiliser /var/tmp pour stocker les fichiers temporaires, ce que j'ai corrigé en posant "remote_tmp = /tmp" dans ansible.cfg

Pour ne pas s'exposer à mille soucis à cause d'une merde de répertoire chez toi, ça donne quoi un ls -ld /var/tmp/ chez toi ? Et sudo -u postgres mkdir /var/tmp/plop ?

(ce qui n'avancera pas sur le second point, mais je ne m'y aventurerai pas).

#8

Mis à jour par Christophe Siraut il y a plus de 5 ans

tentent et échouent à utiliser /var/tmp pour stocker les fichiers temporaires, ce que j'ai corrigé en posant "remote_tmp = /tmp" dans ansible.cfg

Pour ne pas s'exposer à mille soucis à cause d'une merde de répertoire chez toi, ça donne quoi un ls -ld /var/tmp/ chez toi ? Et sudo -u postgres mkdir /var/tmp/plop ?

étrangement:

drwxr-xr-t 2 root root 4096 Jan 3 15:56 /var/tmp/

Probablement lié à systemd-nspawn ou debootstrap. J'ai corrigé les permissions.

(ce qui n'avancera pas sur le second point, mais je ne m'y aventurerai pas).

en effet ça ne solutionne pas le second point: les fichiers créés là
appartiennent à chris:root, et ansible tente un chown en temps que
postgres.

#9

Mis à jour par Christophe Siraut il y a plus de 5 ans

il faut simplement avoir le paquet "acl" installé: https://github.com/ansible/ansible/issues/25493

#10

Mis à jour par Emmanuel Cazenave il y a plus de 5 ans

  • Statut changé de Solution proposée à Solution validée

Cool.

#11

Mis à jour par Christophe Siraut il y a plus de 5 ans

  • Statut changé de Solution validée à Solution déployée

Désolé, j'ai oublié de configurer git sur cette machine, le nom de l'auteur du commit est erroné.

commit adaed61e1c9ce3ad37153d8636090a40f74f8a00 (HEAD -> master, origin/master, origin/HEAD)
Author: Votre Nom <Vous@exemple.com>
Date:   Thu Jan 3 16:12:17 2019 +0100

    install package acl (#29422)
#12

Mis à jour par Frédéric Péters il y a plus de 5 ans

J'ai tapé le bon nom avec un git push -f.

Formats disponibles : Atom PDF