Differenze del percorso di sovversione per svn e svn + ssh


10

[02:48] [root @ server: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn Come vedi dagli argomenti la mia directory radice svn è / srv / svn.

Ora, un po 'di magia dalla macchina remota ...

Questo funziona:

> svn co svn://svn-user@domain.com/test-repo

Ma questo non:

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

Giocando in giro per un paio d'ore ho scoperto che apparentemente se uso ssh tunnel, sono in grado di ottenere il mio repository usando quanto segue:

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

... il che significa che dovrei specificare il percorso fisico completo per il repository. Eh?

Risposte:


13

Come ha detto Womble, in effetti questa è la 'caratteristica' di svn su ssh.

Avevo svn + ssh funzionante senza specificare il percorso completo dei repository perché il server svn aveva uno script wrapper svnserve al posto del binario svnserve originale. Successivamente, durante l'aggiornamento di sovversione questo script è stato sovrascritto dal binario originale.

Soluzione:

  1. Rinomina svnserve nel cestino

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. Salva questo script come / usr / bin / svnserve:

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. Autorizzazioni di aggiornamento

    chmod 755 /usr/bin/svnserve
    

1
Ho avuto lo stesso problema tranne il contrario. Ho passato ore a cercare di capire perché non potevo fare svn + ssh: // host / path / to / repo perché avevo in esecuzione uno script che mi indirizzava automaticamente alla radice svn. Tutto quello che dovevo fare era svn + ssh: // host / repo.
Bot,

Il root potrebbe essere impostato come variabile e quindi avere una logica che rimuove il root da $ @ se viene fornito per errore? Eviterebbe problemi come quelli di @Bot.
MattPark,

5

Questo perché svn su SSH ( svn+ssh://) sta semplicemente accedendo a un repository di sovversione "localmente", usando SSH come trasporto, e quindi hai accesso all'intero filesystem. Svnserve, al contrario, viene detto "inizia i tuoi percorsi con /srv/svn, e quindi non devi specificarlo manualmente.


Grazie per la tua opinione, ma no, non lo è. Tutto funzionava perfettamente fino a quando non ho avuto tutto incasinato, come al solito.
Andrejs Cainikovs,

Bene, allora, aggiusta qualunque cosa tu abbia rovinato.
womble

Hai ragione, womble. Sembra che abbia trovato il problema.
Andrejs Cainikovs,

3

È possibile modificare il comando di accesso ssh per gli utenti utilizzando svn + ssh, modificando le chiavi ~ / .ssh / authorized_keys dell'utente di sovversione. La linea per un utente sarà simile a:

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

Ci sono più trucchi svn + ssh nel libro svn


0

questa è più come una domanda da sola, ma è davvero correlata a questa.

avendo impostato svn + ssh con chiavi private / pubbliche non posso accedere al mio repository utilizzando i percorsi relativi in ​​questo modo:

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

poiché sto ricevendo questo errore:

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

ma solo così:

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

Questo è il file authorized_keys2 che ho nella directory /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]

e il file svnserve.bin suggerito da Andrejs nella risposta precedente

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

Ho anche pensato a problemi di autorizzazione, che sono elencati qui:

-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

Non riesco davvero a trovare una soluzione ...


Non hai letto la mia risposta correttamente. Dovresti rinominare svnserve binary in svnserve.bin e salvare lo script wrapper che hai lì come svnserve. O semplicemente, i contenuti di entrambi i tuoi file dovrebbero essere scambiati.
Andrejs Cainikovs,

Penso che chiamare svnserve.bin da authorized_keys2 e in quel file che esegue svnserve dovrebbe essere esattamente lo stesso, no? Mi è piaciuto per impedire la ridenominazione di svnserve binary, pensi che sia sbagliato?
mox601,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.