Différences de chemin de Subversion pour svn et svn + ssh

10

[02:48] [root @ serveur: ~] ps ax | grep svn 23986? SS 0:00 / usr / bin / svnserve -d -r / srv / svn Comme vous le voyez dans les arguments, mon répertoire racine svn est / srv / svn.

Maintenant, un peu de magie de la machine distante ...

Cela marche:

> svn co svn://[email protected]/test-repo

Mais ce n'est pas:

> svn co svn+ssh://svn-user@<putty-session-name>/test-repo
'No repository found in 'svn+ssh://svn-user@<putty-session-name>/test-repo'

En jouant pendant quelques heures, j'ai trouvé qu'en apparence, si j'utilise ssh tunnel, je peux obtenir mon dépôt en utilisant ce qui suit:

> svn co svn+ssh://svn-user@<putty-session-name>/srv/svn/test-repo

... ce qui signifie que je devrais spécifier le chemin physique complet vers le dépôt. Hein?

Andrejs Cainikovs
la source

Réponses:

13

Comme l'a dit womble, c'est en effet la «fonctionnalité» de svn sur ssh.

J'ai fait fonctionner svn + ssh sans spécifier le chemin complet vers les référentiels car le serveur svn avait un script wrapper svnserve à la place du binaire svnserve d'origine. Plus tard, lors de la mise à jour de subversion, ce script a été remplacé par le binaire d'origine.

Solution:

  1. Renommer svnserve en bin

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. Enregistrez ce script sous / usr / bin / svnserve:

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. Mettre à jour les autorisations

    chmod 755 /usr/bin/svnserve
    
Andrejs Cainikovs
la source
1
J'ai eu le même problème sauf inversé. J'ai passé des heures à essayer de comprendre pourquoi je ne pouvais pas faire svn + ssh: // host / path / to / repo parce que j'avais un script en cours d'exécution qui me dirigeait automatiquement vers la racine svn. Tout ce que je devais faire était svn + ssh: // host / repo.
Bot
La racine peut-elle être définie comme une variable, puis avoir une logique qui supprime la racine de $ @ si elle est fournie par erreur? Cela éviterait des problèmes comme ceux de @Bot.
MattPark
5

C'est parce que svn sur SSH ( svn+ssh://) accède simplement à un référentiel de subversion "localement", en utilisant SSH comme transport, et donc vous avez accès à l'ensemble du système de fichiers. Svnserve, en revanche, est dit "commencez vos chemins avec /srv/svn, et vous n'avez donc pas à le spécifier manuellement.

womble
la source
Merci pour votre avis, mais non, ce n'est pas le cas. Tout fonctionnait très bien jusqu'à ce que tout soit foiré, comme d'habitude.
Andrejs Cainikovs
Eh bien, réparez tout ce que vous avez foiré.
womble
Tu as raison, petit. On dirait que j'ai trouvé où était le problème.
Andrejs Cainikovs
3

Vous pouvez éditer la commande ssh login pour les utilisateurs utilisant svn + ssh, en éditant les ~ / .ssh / authorized_keys de l'utilisateur subversion. La ligne pour un utilisateur ressemble à ceci:

command="/usr/bin/svnserve -r /srv/svn [other svnserve options]" <key type> <user key> <key comment>

Il y a plus d'astuces svn + ssh dans le livre svn

slubman
la source
0

cela ressemble plus à une question en soi, mais elle est vraiment liée à celle-ci.

après avoir configuré svn + ssh avec des clés privées / publiques, je ne peux pas accéder à mon référentiel en utilisant des chemins relatifs de cette manière:

svn co svn+ssh://svn@SERVERIP/simple-webapp-svn simple-webapp-svn

puisque je reçois cette erreur:

svn: URL 'svn+ssh://svn@SERVERIP/simple-webapp-svn' doesn't exist

mais seulement comme ça:

svn co svn+ssh://svn@SERVERIP/home/svn/projects/simple-webapp-svn simple-webapp-svn

Ceci est le fichier authorized_keys2 que j'ai dans le répertoire /home/svn/.ssh

$ sudo cat /home/svn/.ssh/authorized_keys2
command="/usr/bin/svnserve.bin -t --tunnel-user=USERNAME",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa [rsa-key] [user-note]

et le fichier svnserve.bin suggéré par Andrejs à la réponse précédente

$ cat  /usr/bin/svnserve.bin 
#!/bin/sh
exec /usr/bin/svnserve -r /home/svn/projects "$@"

J'ai même pensé aux problèmes d'autorisation, qui sont répertoriés ici:

-rwxr-xr-x 1 root root 63684 2009-12-12 06:45 /usr/bin/svnserve
-rwxr-xr-x 1 root root    61 2010-08-25 17:19 /usr/bin/svnserve.bin

Je ne peux vraiment pas trouver de solution ...

mox601
la source
Vous n'avez pas lu ma réponse correctement. Vous devez renommer le binaire svnserve en svnserve.bin et enregistrer le script d'encapsuleur que vous y avez en tant que svnserve. Ou tout simplement, le contenu de vos deux fichiers doit être échangé.
Andrejs Cainikovs
Je pense qu'appeler svnserve.bin à partir de authorized_keys2 et dans ce fichier exécuter svnserve devrait être exactement le même, n'est-ce pas? J'ai aimé cela pour éviter de renommer le binaire svnserve, pensez-vous que c'est faux?
mox601