Subversion ruta diferencias para svn y svn + ssh

10

[02:48] [root @ servidor: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn Como puede ver en los argumentos, mi directorio raíz de svn es / srv / svn.

Ahora, algo de magia de la máquina remota ...

Esto funciona:

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

Pero esto no:

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

Jugando un par de horas, he descubierto que, aparentemente, si uso el túnel ssh, puedo obtener mi repositorio usando lo siguiente:

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

... lo que significa que debería especificar la ruta física completa al repositorio. ¿Eh?

Andrejs Cainikovs
fuente

Respuestas:

13

Como womble ha dicho, de hecho esta es la 'característica' de svn sobre ssh.

Tenía svn + ssh trabajando sin especificar la ruta completa a los repositorios porque el servidor svn tenía un script de envoltorio svnserve en lugar del binario original svnserve. Más tarde, durante la actualización de Subversion, este script fue sobrescrito por el binario original.

Solución:

  1. Cambiar el nombre de svnserve a bin

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. Guarde este script como / usr / bin / svnserve:

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. Actualizar permisos

    chmod 755 /usr/bin/svnserve
    
Andrejs Cainikovs
fuente
1
Tuve el mismo problema, excepto al revés. Pasé horas tratando de descubrir por qué no podía hacer svn + ssh: // host / path / to / repo porque tenía un script que se ejecutaba y que automáticamente me dirigía a la raíz svn. Todo lo que necesitaba hacer era svn + ssh: // host / repo.
Bot
¿Se podría establecer la raíz como una variable y luego tener alguna lógica que elimine la raíz de $ @ si se proporciona por error? Evitaría problemas como @Bot 's.
MattPark
5

Esto se debe a que svn sobre SSH ( svn+ssh://) solo está accediendo a un repositorio de subversión "localmente", utilizando SSH como transporte, y por lo tanto tiene acceso a todo el sistema de archivos. Svnserve, por el contrario, se le dice "comience sus rutas con /srv/svn, por lo que no tiene que especificarlo manualmente.

womble
fuente
Gracias por tu opinión, pero no, no lo es. Todo funcionaba bien hasta que lo arruiné todo, como siempre.
Andrejs Cainikovs
Bueno, entonces, arregla lo que arruinaste.
womble
Tienes razón, womble. Parece que he encontrado dónde estaba el problema.
Andrejs Cainikovs
3

Puede editar el comando de inicio de sesión ssh para los usuarios que usan svn + ssh, editando las ~ / .ssh / Authorizedkeys del usuario de Subversion. La línea para un usuario se verá así:

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

Hay más trucos de svn + ssh en el libro de svn

slubman
fuente
0

Esto es más como una pregunta en sí misma, pero está realmente relacionado con esta.

Después de configurar svn + ssh con claves privadas / públicas, no puedo acceder a mi repositorio utilizando rutas relativas de esta manera:

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

ya que recibo este error:

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

pero solo así:

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

Este es el archivo autorizado_keys2 que tengo dentro del directorio /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]

y el archivo svnserve.bin sugerido por Andrejs en la respuesta anterior

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

Incluso pensé en problemas de permisos, que se enumeran aquí:

-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

Realmente no puedo encontrar una solución ...

mox601
fuente
No leíste mi respuesta correctamente. Debe cambiar el nombre del binario svnserve a svnserve.bin y guardar el script de contenedor que tiene allí como svnserve. O simplemente, el contenido de ambos archivos debe intercambiarse.
Andrejs Cainikovs
Creo que llamar a svnserve.bin desde autorizado_keys2 y en ese archivo ejecutar svnserve debería ser exactamente igual, ¿no? Me gustó eso para evitar renombrar svnserve binary, ¿crees que está mal?
mox601