Diferenças de caminho do Subversion para svn e svn + ssh

10

[02:48] [servidor root @: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn Como você vê nos argumentos, meu diretório raiz do svn é / srv / svn.

Agora, alguma mágica da máquina remota ...

Isso funciona:

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

Mas isso não:

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

Brincando por algumas horas, descobri que, aparentemente, se eu usar o túnel ssh, posso obter meu repo usando o seguinte:

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

... o que significa que devo especificar o caminho físico completo para o repositório. Hã?

Andrejs Cainikovs
fonte

Respostas:

13

Como o womble disse, este é realmente o 'recurso' do svn sobre o ssh.

Eu tinha o svn + ssh trabalhando sem especificar o caminho completo para os repositórios porque o servidor svn tinha um script de wrapper svnserve no lugar do binário svnserve original. Mais tarde, durante a atualização do subversion, esse script foi substituído pelo binário original.

Solução:

  1. Renomeie svnserve para bin

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

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. Atualizar permissões

    chmod 755 /usr/bin/svnserve
    
Andrejs Cainikovs
fonte
1
Eu tive o mesmo problema, exceto ao contrário. Passei horas tentando descobrir por que não podia fazer o svn + ssh: // host / caminho / para / repo porque eu tinha um script sendo executado que automaticamente me direcionava para a raiz do svn. Tudo o que eu precisava fazer era svn + ssh: // host / repo.
Bot
O raiz pode ser definido como uma variável e, em seguida, ter alguma lógica que remova a raiz de $ @ se for fornecida por engano? Impediria problemas como os do @Bot.
MattPark
5

Isso porque o svn over SSH ( svn+ssh://) está apenas acessando um repositório do subversion "localmente", usando o SSH como transporte e, portanto, você tem acesso a todo o sistema de arquivos. O Svnserve, por outro lado, é instruído a "iniciar seus caminhos e /srv/svn, assim, você não precisa especificá-lo manualmente.

mulher
fonte
Obrigado pela sua opinião, mas não, não é. Tudo estava funcionando muito bem, até que eu estraguei tudo, como de costume.
Andrejs Cainikovs
Bem, então, conserte o que você estragou.
womble
Você está certo, womble. Parece que eu encontrei onde estava o problema.
Andrejs Cainikovs
3

Você pode editar o comando ssh login para usuários usando svn + ssh, editando as ~ / .ssh / allowed_keys do usuário do subversion. A linha para um usuário será semelhante a:

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

Existem mais truques svn + ssh no livro svn

slubman
fonte
0

isso é mais como uma pergunta por si só, mas está realmente relacionado a essa.

Após configurar o svn + ssh com chaves públicas / privadas, não consigo acessar meu repositório usando caminhos relativos desta maneira:

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

desde que eu estou recebendo esse erro:

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

mas só assim:

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

Este é o arquivo allowed_keys2 que tenho dentro do diretório /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 o arquivo svnserve.bin sugerido por Andrejs na resposta anterior

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

Eu até pensei em problemas de permissão, que estão listados aqui:

-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

Eu realmente não consigo encontrar uma solução ...

mox601
fonte
Você não leu minha resposta corretamente. Você deve renomear svnserve binário para svnserve.bin e salvar o script do wrapper que você possui como svnserve. Ou simplesmente, o conteúdo de ambos os arquivos deve ser trocado.
Andrejs Cainikovs
Eu acho que chamar svnserve.bin de allowed_keys2 e nesse arquivo executando svnserve deve ser exatamente o mesmo, não é? Eu fiz isso para evitar renomear o svnserve binário, você acha que está errado?
Mx601