OVH Community, votre nouvel espace communautaire.

Installer un client Subversion sur un 60gp


qouki
18/09/2010, 13h17
Tout est bien qui finit bien !
Mais comme tu dis : ce n'est que le début.
Bon courage…

Petit_ange
17/09/2010, 20h09
Citation Envoyé par qouki
Ce qui devrait marcher, c'est "svn.sh --version".


Ca marche !!!!!

Je n'avais pas les yeux en face des trous en lisant le premier post.

Un immense merci pour le temps que tu m'as consacré et pour m'avoir aidée à résoudre mon problème

Y a plus qu'à! comme on dit

qouki
17/09/2010, 20h07
Ce qui devrait marcher, c'est "svn.sh --version".

Petit_ange
17/09/2010, 19h55
Citation Envoyé par qouki
Une idée (un peu simplette peut-être) : le répertoire dans lequel les libpthread/etc. se trouvent est-il dans le LD_LIBRARY_PATH ?

Sinon, je viens de mettre un exécutable svn 1.4.2 . Si ça peut te dépanner...

Enfin, sur le sujet des versions de SVN, la chose à laquelle il faut faire attention (mais tu le sais peut-être déjà) c'est qu'une working copy ne soit créée et accédée que par des clients sous la même version. (Voir .)
Bonsoir,

J'ai supprimé mon fichier svn et installé celui que tu m'as donné, de manière à être en version 1.4.2
J'ai supprimé les librairies que j'avais uploadées et mises celles que tu as zippées.

Je n'ai plus l'erreur de GLIBC.

En revanche, lorsque je tape la commande --version, j'ai ce message :
../bin/svn: error while loading shared libraries: libsvn_client-1.so.1: cannot open shared object file: No such file or directory
Donc j'exécute le script svn.sh (bien modifié pour pointer sur /www/lib, et j'ai ce message :
Type 'svn help' for usage.
Je me dis "chouette, c'est bon !"

Mais quand je retape la commande ../bin/svn --version, j'ai encore le message d'erreur concernant la librairie (qui est bien dans le répertoire lib, je viens de vérifier)
Aurais-je loupé une étape ? J'ai bien récupéré l'ensemble des fichiers que tu fournissais, donc ils devraient être tous "compatibles" entre eux, non ?

qouki
16/09/2010, 13h20
Une idée (un peu simplette peut-être) : le répertoire dans lequel les libpthread/etc. se trouvent est-il dans le LD_LIBRARY_PATH ?

Sinon, je viens de mettre un exécutable svn 1.4.2 . Si ça peut te dépanner...

Enfin, sur le sujet des versions de SVN, la chose à laquelle il faut faire attention (mais tu le sais peut-être déjà) c'est qu'une working copy ne soit créée et accédée que par des clients sous la même version. (Voir .)

Petit_ange
15/09/2010, 23h19
Bon, j'ai fini par comprendre... En fait, j'ai installé le client svn en version 1.5.1 alors que les bibliothèques devaient correspondre à la version 1.4.2

Donc j'ai téléchargé toutes les bibliothèques qu'il demandait (impossible de mettre la main sur subversion 1.4.2)

Je suis bloquée ici :
svn: /lib/tls/libpthread.so.0: version `GLIBC_2.4' not found (required by /www/lib/libapr-1.so.0)
svn: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by /www/lib/libapr-1.so.0)
svn: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by //www/lib/libaprutil-1.so.0)
svn: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by /www/lib/libldap_r-2.4.so.2)
J'ai téléchargé, et décompressé le package gnulib qui contient normalement les bibliothèques demandées (libpthread.so.0 et libc.so.6) mais ça ne fonctionne pas mieux (j'ai même essayé de les déplacer dans un répertoire /lib/tls)

Petit_ange
15/09/2010, 14h57
Citation Envoyé par qouki
Ce problème est traité à l'étape 8...

Attention : dans le tuto j'avais mis les bibliothèques dans le répertoire /lib (pas /www/lib) : il faudra donc adapter le script.
Oh oui exact, j'ai bien passé le script mais je n'ai pas fait attention à l'arborescence

J'essaierai ce soir car je n'ai pas accès à mon ftp en journée.
Merci de ton aide en tout cas !

EDIT :

Je viens de relire mon script, il semble pourtant que j'ai bien modifié l'arborescence :

#!/bin/sh

LD_LIBRARY_PATH=/mon-site/www/lib:/usr/lib
PATH=/mon-site/www/bin:$PATH
export LD_LIBRARY_PATH PATH

exec svn "$@"
(il y a bien le chemin de mon site de la forme /home/nomdusite/ dans le script, je ne veux juste pas le mettre ici pour éviter les soucis de sécurité ^^)

Peut-être le problème vient-il d'un souci de versions ? Voici les messages que j'obtiens quand j'exécute le script svn.sh :
svn: Version mismatch in 'svn_diff': found 1.4.2, expected 1.5.1
svn: Version mismatch in 'svn_delta': found 1.4.2, expected 1.5.1
svn: Version mismatch in 'svn_ra': found 1.4.2, expected 1.5.1
svn: Version mismatch in 'svn_wc': found 1.4.2, expected 1.5.1
svn: Version mismatch in 'svn_client': found 1.4.2, expected 1.5.1
svn: Version mismatch in 'svn_subr': found 1.4.2, expected 1.5.1

qouki
15/09/2010, 14h53
Ce problème est traité à l'étape 8...

Attention : dans le tuto j'avais mis les bibliothèques dans le répertoire /lib (pas /www/lib) : il faudra donc adapter le script.

Petit_ange
15/09/2010, 14h51
Citation Envoyé par qouki
Tu trouveras à http://www.basicpower.fr/utils/svn-for-ovh/svnlibs.zip une archive qui les contient toutes.
C'est bien le zip que j'ai récupéré hier, et que j'ai dézippé dans /www/lib/
D'ailleurs, après vérification, la bibliothèque recherchée est bien présente dans le dossier /lib/

Quand je tape "../bin/svn --version"

J'ai cette erreur :
../bin/svn: error while loading shared libraries: libsvn_client-1.so.1: cannot open shared object file: No such file or directory

J'ai mal organisé mon arborescence peut-être ?

A la racine de mon site (dans le répertoire /www/), j'ai :
- un dossier qui contient l'admin'ovh depuis lequel j'exécute mes commandes shell
- un dossier /bin/ qui contient le fichier svn et le script svn.sh
- un dossier /lib/ qui contient les bibliothèques du zip

qouki
15/09/2010, 14h39
Citation Envoyé par Petit_ange
Me voilà prête à lister/télécharger/uploader toutes les librairies une à une...
Tu trouveras à http://www.basicpower.fr/utils/svn-for-ovh/svnlibs.zip une archive qui les contient toutes.

Petit_ange
15/09/2010, 14h09
Citation Envoyé par qouki
Pour faire exécuter une commande par Unix, il faut (comme tu as fait) lui donner le chemin d'accès vers le fichier qui contient son exécutable. Et il faut en plus avoir les droits d'exécution sur ce fichier.

Ajoute lesdits droits en faisant : chmod u+x ../bin/svn
Ca fonctionne !
Me voilà prête à lister/télécharger/uploader toutes les librairies une à une...

Merci pour l'aide et (surtout) pour les explications (j'aime bien comprendre un peu ce que je fais ^^)

Citation Envoyé par qouki
Bon courage pour la suite...
Je crois que je vais en avoir besoin, mais je sais où venir si j'ai un problème

qouki
15/09/2010, 13h40
Bonjour,

Citation Envoyé par Petit_ange
Lorsque je tape la commande "svn --version" dans le pseudo-ssh du script admin'ovh (merci pour ce script !), j'ai le message " svn: command not found"

J'ai conservé le fichier "/usr/bin/svn" que j'ai uploadé dans le répertoire "/www/bin/"

Mon fichier admin'ovh est dans un autre répertoire que le bin.

J'ai essayé la commande : "../bin/svn --version" en pensant que cela pouvait venir du faire que mon fichier svn n'était pas au même endroit que mon fichier admin'ovh
Bien vu.

Citation Envoyé par Petit_ange
mais j'ai ce message :
" ../bin/svn: Permission denied"
Pour faire exécuter une commande par Unix, il faut (comme tu as fait) lui donner le chemin d'accès vers le fichier qui contient son exécutable. Et il faut en plus avoir les droits d'exécution sur ce fichier.

Ajoute lesdits droits en faisant : chmod u+x ../bin/svn

Explication : "chmod" signifie "change modes" soit "change les droits d'accès"; "u+x" signifie "ajoute (+) les droits d'exécution (x) à l'utilisateur (u) propriétaire du fichier (toi)"; "../bin/svn" est le nom du fichier concerné.

Tu devras faire la même manip avec tous les fichiers contenant des commandes que tu voudras exécuter par admin'ovh, ou par la fonction exec() de PHP, ou depuis un script Shell, etc. Par exemple le "svn.sh" cité à l'étape 8 du tuto.

Bon courage pour la suite...

Petit_ange
14/09/2010, 23h32
Bonjour,

Tout d'abord, merci pour ce tuto J'ai réussi tant bien que mal à arriver à l'étape 6...

Cependant, je bloque à ce niveau :

Car quand on uploade le fichier "svn" sur le 60gp et qu'on cherche à exécuter "svn --version" pour vérifier que ça marche, on s'aperçoit qu'il lui manque des bibliothèques.
Lorsque je tape la commande "svn --version" dans le pseudo-ssh du script admin'ovh (merci pour ce script !), j'ai le message " svn: command not found"

J'ai bien récupéré l'archive debian, je l'ai décompressée grâce à la commande "ar x archive.deb", puis j'ai décompressé le fichier data.tar.gz grâce à la commande "tar -xzvf archive.tar.gz"
J'ai conservé le fichier "/usr/bin/svn" que j'ai uploadé dans le répertoire "/www/bin/"

Mon fichier admin'ovh est dans un autre répertoire que le bin.

J'ai essayé la commande : "../bin/svn --version" en pensant que cela pouvait venir du faire que mon fichier svn n'était pas au même endroit que mon fichier admin'ovh, mais j'ai ce message :
" ../bin/svn: Permission denied"

Quelqu'un saurait-il m'aider, s'il vous plait ? Je ne suis pas du tout familière des commandes Unix et je suis un peu perdue !

Merci

qouki
25/01/2010, 12h13
Bonjour,

Je confirme que ça marchait au moins en décembre 2009. :-)

Voir aussi ici pour une discussion sur les versions de SVN (la morale étant que les libs listées plus haut conviennent).

Enfin, la syntaxe pour rediriger stderr sur stdout est "2>&1" et non "2>1&".

A+

yobuntu
25/01/2010, 11h27
Bonjour, et merci pour cet exposé, c'est exactement ce que je cherche à faire sur mon 60GP,
par contre peux tu confirmer que cette manip fonctionne encore en 2010?
je n'arrive pas à faire un exec('ls /etc');
(je pense que je n'ai pas accès en lecture sur le repertoire /etc).
je ne suis pas un habitué de la commande exec en php mais j'ai l'impression qu'il est impossible d'obtenir le message stderr avec cette commande (j'ai aussi essayé en redirigeant stderr ver stdout : exec('ls /etc 2>1&') mais toujours pas le moindre message...

merci pour les infos

qouki
17/08/2009, 14h04
Citation Envoyé par Abazada
Bonjour,
Question de quelqu'un qui rebascule de dédiés vers mutualisé :
J'avais cru comprendre qu'OVH bloquait tout accès "de l'extérieur" (pas de wget, read, curl...)
Pourquoi dans ce cas un SVN Update sur un serveur extérieur passe-t-il ?
J'hésite à répondre "je ne sais pas mais pourtant ça marche", ce qui est le cas, mais n'apporte pas grand chose.

Trop tard : j'ai répondu !

Abazada
16/08/2009, 06h43
Citation Envoyé par qouki
... et nous gérons le code du site sous Subversion, sur un autre hébergement, chez OVH ou pas; disons que l'URL du repository Subversion est http://svn.maboite.fr/monsite.
...
comment exécuter la commande "svn update" depuis le 60gp ?
...
Bonjour,
Question de quelqu'un qui rebascule de dédiés vers mutualisé :
J'avais cru comprendre qu'OVH bloquait tout accès "de l'extérieur" (pas de wget, read, curl...)
Pourquoi dans ce cas un SVN Update sur un serveur extérieur passe-t-il ?

anchnk
18/02/2009, 00h38
Aprés avoir pris un peu de recul sur ce projet en laissant en plan mon problème, je me rends compte que j'ai toujours le mm problème. Je suis passé par ton script qouki plus épuré et je me retrouve avec un status 137 et un arret brutal du fonctionnement de svn que ce soit sur de l'import ou du checkout.

J'avoue que sur ce coup je séche. Je me demande si ce n'est pas mon hébergeur de serveur svn qui coupe la connexion. Je suis chez springloops et comme il s'agit d'un petit projet je suis sur leur plan gratuit. Normalement ils autorisent que 3 déploiement par ftp/jour sur ce plan la. D'ou l'intêret pour moi de lancer un update depuis le serveur ovh.

Si quelqu'un sait ce que signifie le code erreur 137 ou a un hebergeur svn gratuit qui pourrais satisfaire ce genre de besoin, je suis preneur, pour les autres bon courage

gtraxx
01/02/2009, 02h05
J'ai un 240 Plan, je me demandais si c'etais possible d'avoir svn dessus mais de l'utiliser avec svnx ou tortoise ou encore scPlugin ?
Je pense que l'on à un acces ssh sous le 240 plan mais aucune idée de la manière de procéder étant donné que la distribution est inconnue donc impossible de savoir quel commande utilisé pour une install.
J'ai tout de même tester la connexion ssh

Diaoul
28/01/2009, 15h25
Salut,

Chez moi cela marche parfaitement
J'ai suivi le tuto d'un bout à l'autre et mon premier checkout s'est bien passé.
Ceci dit, je l'ai fait sur un petit dossier (3 petit fichiers dedans).
Je vais tester sur du lourd bientôt.

Edit : Tout fonctionne à la perfection, checkout sur un projet de plus de 8Mo OK. Switch, Update etc... nikel.

Merci pour ce tuto.
Ciao

ixM
10/01/2009, 11h36
Salut,

Je suis nouveau sur les forums OVH. Je cherche à installer un serveur svn pour un gros projet de recherche que je fais actuellement et j'aimerais pouvoir l'utiliser avec mon hébergement 90plan.

J'ai lu en vitesse ce qui était marqué plus haut et manifestement ça ne fonctionne donc pas ? Ou ai-je mal compris ?

@micalement,
`ixM

qouki
11/12/2008, 17h01
Bonjour à tous,

D'abord, désolé de ne pas avoir répondu; j'étais offline pendant un moment. Ironiquement, on dirait que la question a avancé tout de même, ce qui prouve bien que personne n'est irremplaçable. Bref.

Un moment, j'ai cru que certains des pbs venaient d'un manque de droits d'accès en exécution sur les fichiers contenant des exécutables. Clairement, il y a au moins autre chose. En tout cas, je me suis déjà fait avoir plusieurs fois, alors : ça vaut toujours la peine de vérifier qu'on a bien mis l'autorisation en exécution (pour le propriétaire, ça semble suffire) sur les exécutables.

Sinon, j'avoue que je n'utilise pas le script "admin'ovh" mais un machin que je m'étais bricolé avant de savoir qu'il existait. Il est plus frustre mais je le donne quand même ci-dessous au cas où ça peut rendre service, notamment par l'affichage des messages d'erreur. Attention : ce script ne contient aucune protection dans la mesure où dans mon cas je protège le répertoire où je le mets par .htaccess standard.

Code PHP:


  Command line execution




Current directory is: () ?>

stripslashes($_POST['cmd']); ?>


($cmd?>">


if ($cmd) {
$output = array();
exec($cmd " 2>&1", &$output, &$status);
?>



status = 

  foreach ($output as $line)
    echo 
htmlspecialchars($line) . "\n";
?>



?>

Généralement je ne cherche pas à utiliser le PATH : j'entre des chemins absolus ou relatifs vers les exécutables. C'est un peu fastidieux à taper mais ça élimine déjà un pb.

Sinon, voici les libs que j'ai installées :
Code:
libapr-1.so.0
libaprutil-1.so.0
libneon.so.26
libpq.so.4
libsqlite3.so.0
libsvn_client-1.so.1
libsvn_delta-1.so.1
libsvn_diff-1.so.1
libsvn_fs-1.so.1
libsvn_fs_base-1.so.1
libsvn_fs_fs-1.so.1
libsvn_ra-1.so.1
libsvn_ra_dav-1.so.1
libsvn_ra_local-1.so.1
libsvn_ra_svn-1.so.1
libsvn_repos-1.so.1
libsvn_subr-1.so.1
libsvn_wc-1.so.1
J'en ai fait un zip que j'ai mis là :
http://www.basicpower.fr/utils/svn-for-ovh/svnlibs.zip
Je ne sais pas si ça change qqch, mais j'ai fait le zip sous Windows.

Attention : aussi bien ce zip que la liste ci-dessus correspondent peut-être à une vieille version.

Enfin, en ce qui concerne l'arrêt au bout d'une 20aine de pages, je ne sais pas alors je me risque à une idée bête : ça serait pas un time-out genre ça prend bcp de temps et donc le serveur envoie la trace de ce qu'il a fait et le navigateur l'affiche, et même si le serveur continue à tourner tu ne le vois pas ? J'hésite à effacer ce paragraphe. Bon, vous me pardonnez si c'est une niaiserie. :-)

Hope this helps un peu quand même.

anchnk
09/12/2008, 14h47
Bonjour qouki,

d'abord, je voulais te remercier pour ton tuto, il est excellent.
J'ai donc essayé de mettre en place svn sur mon site, l'installation s'est très bien déroulée, le lancement de SVN aussi. Le problème est que Okillerd (le système de surveillance d'OVH) considère l'application comme un "Backdoor", et donc l'arrete automatiquement... Je voulais donc te demander si tu as rencontré ce problème, et si oui, comment l'as tu réglé? Par avance, merci.
J'ai l'impression d'avoir le même soucis car lors du checkout initial, svn s'arrête a une 20aine de page.
Si quelqu'un a une solution concernant ce problème ça serait tip top !!!

Pour ceux qui n'ont pas de message d'erreur lors de l'execution de la commande ~/bin/bin.sh. Il faut modifier le script admin'ovh pour afficher les erreurs sur le flux standard pour ça modifier la ligne
Code PHP:
$resultat shell_exec($commande); 
par
Code PHP:
$resultat shell_exec($commande." 2>&1"); 
Pour faire fonctionner svn j'ai installer les librairies suivantes:
  • libapr1_1.2.7-8.2_i386.deb
  • libapr1_1.2.7-8.2_i386.deb
  • libaprutil1_1.2.7+dfsg-2_i386.deb
  • libneon26_0.26.2-4_i386.deb
  • libsqlite3-0_3.3.8-1.1_i386.deb
  • libsvn1_1.4.2dfsg1-2_i386.deb

Avec la version de subversion : subversion_1.4.2dfsg1-2_i386.deb.

J'espère apporter un peu d'aide à ceux qui n'ont pas réussi à mettre en place cette solution et si quelqu'un a une solution pour le faire fonctionner via le pseudo-ssh (cde shell_exec) ça serait vraiment parfait.

anchnk
06/12/2008, 17h55
Voila après un peu plus d'investigation j'ai compris que la majorité des problèmes venait du fait que je décompressez les fichiers sous windows et que de la mm façon j'avais créer le fichier sh sous windows. La meilleure solution reste donc d'utiliser le pseudo ssh via le script php.

Je suis en train d'installer les libs une par une.
Effectivement un lien vers les urls des packages debian serait un plus.
Je m'y attelerai une fois l'installation achevée.

anchnk
06/12/2008, 12h49
Tjrs en train de trouver une solution.
J'ai modifié le script php de façon a avoir les codes de sortie du shell.
C'est-à-dire:

$commande = $_POST['commande'];
//$resultat = shell_exec($commande);
$resultat = shell_exec($commande.'; echo $?');
$_SESSION['texte'] .= $entete.$commande."\n".trim($resultat)."\n";

Et lorsque j'essaye d'executer svn j'ai le code 127.
J'en déduis donc qu'il s'agirait d'un problème de PATH.
Effectivement un echo $PATH ne me renvoi pas le path du dossier dans lequel j'ai placé le binaire svn.

J'upload donc le bash pour pouvoir modifier le path avant d'executer le binaire svn et je me retrouve avec l'erreur 126 qui indique un pb de droits a priori.

anchnk
06/12/2008, 01h32
Bonjour,

Tout d'abord, comme les autres membres je tiens à te remercier à ce how-to qui correspondait exactement à un de mes réel besoins.

Ceci dit je n'arrive pas à le mettre en pratique totalement.

Pour résumé:

- Je suis bien sur une offre 60gp (sans accés ssh dans l'offre d'hébergement).
- J'utilise donc le script (http://forum.ovh.com/showthread.php?t=14627) placé dans le repertoire /home/ftp_user/www/bin afin d'executer les commandes directement sur le serveur mutu ovh. D'apres les sources il passe par la fonction shell_exec.
- J'ai bien récupérer le package debian duquel j'ai extrait (directement via 7zip sous windows) le dossier data.tar.gz qui me donne deux dossiers /etc et /usr.
- Je créer deux repertoire sous le repertoire www:/bin et /lib.J'upload le binaire svn de mon disque local (/usr/bin/svn) dans /home/ftp_user/www/bin. Puis je lance l'adresse http://monsite/bin/index.php et j'accéde a la partie pseudo-ssh du script.
La, je saisi svn --version puis je valide et aucune sortie. Le script reviens a la ligne sans executer la commande et mm m'indiquer les librairies eventuellement manquante.

Alors je voulais savoir si c'était vraiment par ce script qu'il fallait lancer ces commandes et qu'ai-je oublié ou mal fait pour ne pas avoir un résultat fonctionnel ?

Merci d'avance, quouki ou n'important qui ayant réussi à mettre cette solution en place. J'ai un réel besoin d'avoir cette fonctionnalité en place.
Cdlt,

O.

qouki
04/12/2008, 10h31
Salut,

Tu y auras sans doute pensé tout seul, mais okazou : si tu ne peux pas faire un "svn co" par ssh, tu peux peut-être tenter la solution php (cf Etape 1 et
http://forum.ovh.com/showthread.php?t=14627).

A+, B.

b_b
03/12/2008, 19h05
Citation Envoyé par qouki

Etape 10 : enjoy

Il faut savoir savourer le plaisir d'un problème résolu...
Enjoy pas des masses en fait car après avoir réussi à mettre cette astuce en place j'ai bien la fonction svn dispo en ssh mais impossible de faire un svn co sur un repository externe car le ssh des plans n'a pas accès à l'extérieur...

Merci pour le tuto, peut être qu'on pourra enfin faire des svn co sur les plans lorsque la mutu 2008 sera sortie en 2009

++

rjolivet
02/05/2008, 23h25
Bonjour, je suis très intéressé par cette installation.
Pourrais tu STP partager le fruit de ton travail ?
Un petit ZIP de toutes les librairies "standalone" nécessaire serait parfait...
Si tu pouvais déposer ça sur un FTP quelconque.

Merci d'avance.

apatride
27/04/2008, 18h23
Bonsoir,
J'ai aussi un 60gp.
Tu indiques :
Quand j'exécute "bin/svn.sh --version", je reçois un message d'erreur
Je ne reçois rien avec exec("svn.sh") !
Tu peux envoyer des détails ?

fanilo
28/03/2008, 14h50
Bonjour qouki,

d'abord, je voulais te remercier pour ton tuto, il est excellent.
J'ai donc essayé de mettre en place svn sur mon site, l'installation s'est très bien déroulée, le lancement de SVN aussi. Le problème est que Okillerd (le système de surveillance d'OVH) considère l'application comme un "Backdoor", et donc l'arrete automatiquement... Je voulais donc te demander si tu as rencontré ce problème, et si oui, comment l'as tu réglé? Par avance, merci.

qouki
25/03/2008, 22h05
Pour le PHP qui exécute des commandes, je te renvoie à la discussion
http://forum.ovh.com/showthread.php?t=14627
dans laquelle tu trouveras le script Admin'OVH qui reçoit plein de louanges.

En ce qui concerne l'endroit où mettre l'exécutable, perso j'ai fait ce que je décris à l'étape 8. Mais d'autres solutions peuvent bien sûr fonctionner.

Bon courage.

primo411
25/03/2008, 19h39
Bonjour!Merci pour ce tutoriel, je cherche à le mettre en pratique sur mon 60GP. J'ai extrait l'executable svn du deb, je l'upload mais je n'arrive pas à l'executer... Y a-t-il un endroit particulier ou le mettre ? A quoi ressemble ton PHP qui execute les commandes serveur ?
Merci !

qouki
13/07/2007, 11h23
Avertissement : ce guide s'adresse à des lecteurs qui savent ce qu'est Subversion. Des lecteurs qui ne sauraient pas pourront peut-être y trouver un intérêt, mais c'est pas dit.

Enoncé du problème

Je développe un site web pour un client, disons www.monsite.com. D'après le dimensionnement et l'usage que ce client prévoit, je lui recommande un hébergement mutualisé 60gp chez OVH. Pour le développement du site, je travaille en équipe, et nous gérons le code du site sous Subversion, sur un autre hébergement, chez OVH ou pas; disons que l'URL du repository Subversion est http://svn.maboite.fr/monsite. Comme il est de coutume dans ce genre d'architecture, nous voulons gérer la mise à jour du site en prod www.monsite.com par Subversion, en faisant du code sur www.monsite.com une simple "working copy" du repository Subversion. Le problème est : comment exécuter la commande "svn update" depuis le 60gp ?

Etape 1 : comment exécuter une commande sur un 60gp, qui n'a pas d'accès SSH ?

La réponse est simple : on fait une page PHP (p.ex.) qui appelle exec() ou une autre fonction de la même famille. Bien entendu, on ne s'amuse pas à laisser une telle page en accès libre.

Etape 2 : les commandes client Subversion ne sont pas disponibles sur un 60gp.

On peut les installer en local (voir les conditions générales). Pour ça, la démarche naturelle est d'aller sur http://subversion.tigris.org/project_packages.html. On s'aperçoit alors qu'il n'y a pas de distribution binaire du seul côté client de Subversion. Et que si on veut installer des binaires sur son 60gp, ça serait bien de connaître la plateforme (architecture, distrib Linux, etc.) sur laquelle le 60gp est hébergé.

Etape 3 : trouver sur quelle distrib le 60gp est hébergé.

Après une recherche dans les pages d'aide et les forums de OVH, je n'ai pas trouvé de réponse complète. J'ai trouvé qu'il s'agissait d'une architecture i386, probablement une distrib Gentoo. Mais il n'y a pas de distrib Gentoo sur le site de Subversion, et http://www.gentoofr.org/ nous explique que Gentoo est une méta-distribution, ce qui montre qu'on n'est pas rendu.

En discutant avec un collègue, j'apprends qu'il existe dans de nombreuses distribs Linux un fichier /etc/{redhat,fedora,etc.}-release. A tout hasard, je lance un "ls /etc" (par la méthode décrite à l'étape 1), et je vois qu'il existe un fichier /etc/debian_release. La distrib est donc une Debian.

Etape 4 : trouver une distrib Debian de Subversion.

Sur le site de Subversion, on lit pour Debian : "Just run 'apt-get install subversion'." Oui mais non : je ne veux pas installer Subversion (en plus pas en entier) sur la machine, je veux juste récupérer l'exécutable de la partie client et la mettre sur mon 60gp.

On lit aussi : "Information on the latest official packages can be found here: http://packages.debian.org/subversion." Je m'y rends donc. Je choisis naturellement une version stable, puis i386, puis un mirroir près de chez moi, et je me retrouve avec un fichier subversion_1.4.2dfsg1-2_i386.deb, dans lequel j'imagine qu'il y a mon bonheur.

Etape 5 : aller regarder dans un fichier ".deb".

Wikipedia nous aide ici, en nous apprenant qu'un package Debian est une archive au format Unix "ar", dans laquelle les fichiers à installer sont dans un "data.tar.gz". Je n'ai pas de distrib Debian sous la main, mais j'ai une machine Unix à portée, sur laquelle je déballe le ".deb" puis le "data.tar.gz". (A défaut, on peut uploader le ".deb" sur le 60gp et le déballer à distance par la méthode décrite à l'étape 1.) Je vois effectivement dedans un fichier "svn" dans un répertoire "usr/bin".

Etape 6 : récupérer les bibliothèques

Car quand on uploade le fichier "svn" sur le 60gp et qu'on cherche à exécuter "svn --version" pour vérifier que ça marche, on s'aperçoit qu'il lui manque des bibliothèques. Ce n'est pas pour rien que la page de download du package Debian parlait de dépendances... On va donc devoir répéter pour chaque bibliothèque manquante la manip : recherche + download du package + déballage + upload de la lib.

Etape 7 : comment savoir quelles sont les bibliothèques manquantes ?

Il y a deux approches : soit on fait la fermeture transitive des dépendances entre packages, à partir des informations sur le site Debian; soit on regarde dans le message d'erreur au lancement de "svn --version", qui nous donne la première bibliothèque manquante, on la récupère, et on recommence juqu'à ce que ça marche. Pour ma part j'ai suivi la seconde approche.

Etape 8 : faire en sorte que les bibliothèques récupérées soient prises en compte

Le système d'exécution des binaires sous Linux utilise la notion de "library path", c'est-à-dire une liste de répertoires dans lesquels le système ira chercher les bibliothèques requises par un exécutable. On indique ce "library path" en donnant une valeur à la variable d'environnement LD_LIBRARY_PATH. J'ai donc fait les choses suivantes :
  • j'ai créé, à la racine de mon compte "monsite", un répertoire "bin" dans lequel j'ai mis l'exécutable "svn", et un répertoire "lib" dans lequel je mettrai les bibliothèques

  • j'ai écrit le script shell suivant que j'ai mis dans "bin/svn.sh" et auquel j'ai donné les droits en exécution

#!/bin/sh

LD_LIBRARY_PATH=/home/monsite/lib:/usr/lib
PATH=/home/monsite/bin:$PATH
export LD_LIBRARY_PATH PATH

exec svn "$@"
Ce script positionne le "library path" en le fixant au répertoire "lib" que je viens de créer, et y ajoute le répertoire commun "/usr/lib" où il y a déjà un certain nombre de bibliothèques. Ca m'évitera de récupérer des bibliothèques qui seraient déjà installées sur le serveur.

Etape 9 : récupérer les bibliothèques

Quand j'exécute "bin/svn.sh --version", je reçois un message d'erreur m'indiquant qu'il manque la bibliothèque "libsvn_client-1.so.1". Je retourne sur le site Debian, où je vois parmi les dépendances un package "libsvn1" (d'après le nom du package Subversion que j'ai déjà récupéré, je choisis celui pour la 1.4.2) que je récupère. En le déballant, je trouverai effectivement un fichier "libsvn_client-1.so.1", que j'uploade dans le répertoire "lib". Puis je répète la manip, jusqu'à ce que ça marche. Pour ma part j'ai ainsi récupéré et uploadé 18 bibliothèques.

Etape 10 : enjoy

Il faut savoir savourer le plaisir d'un problème résolu...