Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/01/2014, à 10:23

Haals

Porbleme de droit

Bonjour,

Dans le cadre de la réalisation d'un projet, mon groupe et moi même devons réaliser une application web. Il s'agit d'un projet a réaliser en plusieurs mois, nous avons donc choisi de louer un serveur ubuntu 12.04 (chez ovh). Afin de simplifier le travaille en groupe, nous avons mis en place un git.

Donc actuellement nous avons sur notre serveur :
   -Un user "root"
   -Un user "git"
   -Un repository git dans /home/git/test.git
   -Un serveur apache

A ce stade de la configuration du serveur nous pouvons "livrer" notre travail et le tester en faisant :
   -git push  (sur la machine ou l'on travaille)
   -On lance putty
   -On se connect au serveur
   -On fait : cd /var/www/test
   -On fait : git clone git@ADDR/test.git (ou git pull si il est déjà clone). (On ne peut pas faire un simple cp des fichiers se trouvant dans /home/git/test.git car les fichiers ne sont pas stoker en clair).

Tout cela marche parfaitement, mais nous aimerions un peut plus automatiser le processus : nous aimerions utiliser les hooks de git et en particulier le post-receive pour déclencher un pull sur le serveur dans le dossier /var/www/test.

Pour ce faire nous avons placer un fichier .sh nommé "post-receive" dans "/home/git/test.git/hooks/" contenant :

#!/usr/bin/env sh

path="/var/www/test/"

echo "passwd_du_root" | sudo -S git --work-tree=$path --git-dir=$path".git" pull

Et la, problème :
Le push marche bien, le script est bien appeler, mais il n'a pas les droits pour effectuer le pull. En fait le serveur me demande le root password (que je lui donne via le echo "..." | sudo -S) et il me dit que celui ci est incorrect. En faite sur ma console (depuis le pc ou je push) j'ai un truc du style :

remote: password for root : fail
remote: password for root : fail
remote: password for root : fail
fail after 3 attempt : abort 

Et lorsque je me connecte sur le server et que je lance le script après m’être logger sur le user git, j'ai un "permission denied".
Mais si je tape a la main la commande suivante, et ben sa marche .... :

sudo git --work-tree="/var/www/test" --git-dir="/var/www/test/.git" pull

Et la je ne comprend plus grand chose . Pour résumer :
j'essaye de faire en sorte que mon user git puisse lancer un script qui va faire des actions dans le dossier /var/www qui appartiens a root 

Si vous avez une idée ou besoin de plus d'infos (je tape se message rapidement et je n'ai pas ma machine sous la main pour citer les vrais message d'erreur) dite le moi.

Merci d'avance.

Ps : Désoler pour les nombreuses fautes qui doivent se trouver dans mon message.

Hors ligne

#2 Le 31/01/2014, à 11:01

tiramiseb

Re : Porbleme de droit

Salut,

J'ai deux propositions...


Mais d'abord :
Pourquoi ne pas simplifier la commande git en faisant un "cd" juste avant ?
Par ailleurs, pas besoin d'utiliser /usr/bin/env pour sh, car il est quasiment toujours dans /bin.
Ton script (non fonctionnel) deviendrait :

#!/bin/sh

cd /var/www/test/
echo "passwd_du_root" | sudo -S git pull


1/ Vu que tu utilises sudo, bah configure ton sudoers afin d'autoriser l'utilisateur "git" à exécuter "git" en tant que root sans mot de passe...
Dans le sudoers (édité avec la commande visudo) tu aurais cette ligne :

git  ALL=(ALL) NOPASSWD: git pull

Et ton script serait :

#!/bin/sh

cd /var/www/test/
sudo git pull

2/ Encore plus simple, pourquoi ne pas rendre l'utilisateur git propriétaire de /var/www/test ?
Tu exécutes la commande suivante:

sudo chown -R git.git /var/www/test

Et ton script devient alors :

#!/bin/sh
cd /var/www/test/
git pull

Moi j'aime bien la solution 2.

Bien sûr, ce sont juste des idées, je n'ai rien testé, je te laisse le soin de t'en charger.

Dernière modification par tiramiseb (Le 31/01/2014, à 11:02)

Hors ligne

#3 Le 31/01/2014, à 12:02

Haals

Re : Porbleme de droit

Salut tiramiseb,

merci pour ta réponse. J'ai essayer la deuxième solution et quand je lance le script a la main depuis le serveur j'ai :

Host key verification failed.
fatal: The remote end hung up unexpectedly

faudrait il que je créer une clef ssh.pub a mon user git pour la mètre dans son fichier autorized-key ? (je n'ai pas u le temps de tester. J’éditerais se message après l'avoir tester vers 15h)

Dernière modification par Haals (Le 31/01/2014, à 12:03)

Hors ligne

#4 Le 31/01/2014, à 12:45

tiramiseb

Re : Porbleme de droit

Ah ouais, tu avais fait un "clone" par le réseau... du coup, problème d'identification après changement d'utilisateur... c'est normal.

Efface /var/www/test, puis récupère directement à partir du dépôt git localement :

git clone /home/git/test.git

D'ailleurs, je proposerais même que ce soit l'utilisateur "git" qui fasse directement le clone :

(en tant que "git")

sudo rm -fr /var/www/test
cd /tmp
git clone /home/git/test.git
sudo mv /tmp/test /var/www

Dernière modification par tiramiseb (Le 31/01/2014, à 12:46)

Hors ligne

#5 Le 31/01/2014, à 14:15

Haals

Re : Porbleme de droit

C'est parfait !

Merci beaucoup pour les infos smile

Hors ligne